@wasabichen

Как нарисовать график с решением по методу Симпсона для определенных интегралов на библиотеки matplotlib (Python)?

Я смог нарисовать графики с решением по методу прямоугольников и по методу трапеций. Для метода Симпсона я смог нарисовать только график, но без решения (есть график функции, но там не показано решение методом Симпсона)

from math import sqrt
import matplotlib.pyplot as plt
import numpy as np
print('y=1/(x*sqrt(1+x**2))')#наша функция
n=int(input('n='))
a=float(input('Нижний предел:'))
b=float(input('Верхний предел:'))
h=(b-a)/n
#print(a,b)
k=a
m=0
x1=[]#список для построения трапеций
y1=[]#список для построения трапеций
sumsimpson1=0
sumsimpson2=0
sumx=0#для получения значений, которые записаны в xsrspisok
sumy=0#для получения значений, которые записаны в ysrspisok
ysr=0#для нахождения суммы чисел, которые записаны в ysrspisok
ysum=0
spisoksimpsona=[]
sumtrap=0#для нахождение суммы ряда от y[1] до y[n]
xsrspisok=[]#среднее значение между x[i] и x[i+1]
ysrspisok=[]#среднее значение между y[i] и y[i+1]
x=[a]
y=[1/(a*sqrt(1+a**2))]

for i in range(n):
    k=k+h
    m = 1 / (k * sqrt(1 + k ** 2))
    x.append(k)
    y.append(m)
    ysum+=m
print('x=',x)
print('y=',y)

for i in range(n):
    sumx=(x[i]+x[i+1])/2
    xsrspisok.append(sumx)
    sumy=(y[i]+y[i+1])/2
    ysrspisok.append(sumy)
    ysr=ysr+sumy
print('xsrspisok=',xsrspisok)
print('ysrspisok=',ysrspisok)
print('По правилу прямоугольников: ',ysr*h)

for i in range(1,n+1):
    sumtrap=sumtrap+y[i]
trap=h*(((y[0]+y[n])/2)+sumtrap)
print('По методу трапеций: ',trap)

for i in range(n+1):
    if i % 2 == 0:
        #sumsimpson1+=y[i]
        spisoksimpsona.append(y[i])
    if i % 2 == 1:
        #sumsimpson2+=ysrspisok[i]
        spisoksimpsona.append(ysrspisok[i])
simpson=(h/6)*((spisoksimpsona[0]+spisoksimpsona[-1])+4*ysr+2*ysum)
print('По методу Симпсона: ',simpson)


for i in range(n+1):
    x1.append(x[i])
    x1.append(x[i])
    x1.append(x[i])
    y1.append(y[i])
    y1.append(0)
    y1.append(y[i])
#x1=(x[0],x[0],x[0],x[1],x[1],x[1],x[2],x[2],x[2],x[3],x[3],x[3],x[4],x[4],x[4],x[5],x[5],x[5],x[6],x[6],x[6],x[7],x[7],x[7],x[8],x[8],x[8],x[9],x[9],x[9],x[10],x[10],x[10])
#y1=(y[0],0,y[0],y[1],0,y[1],y[2],0,y[2],y[3],0,y[3],y[4],0,y[4],y[5],0,y[5],y[6],0,y[6],y[7],0,y[7],y[8],0,y[8],y[9],0,y[9],y[10],0,y[10])

plt.figure(figsize=(15, 5))
plt.subplot(1, 3, 1)
plt.title("По методу прямоугольников") # заголовок
plt.xlabel("x") # ось абсцисс
plt.ylabel("y") # ось ординат
plt.grid() # включение отображение сетки
plt.plot(x, y,'r-', marker='*') # построение графика
plt.bar(x,y,width=0.15)
#plt.bar(x,y,width=0.15)

plt.subplot(1, 3, 2)
plt.title("По методу трапеций") # заголовок
plt.xlabel("x") # ось абсцисс
plt.ylabel("y") # ось ординат
plt.plot(x, y,'r-', marker='*') # построение графика
plt.plot(x1,y1,'b--')

plt.subplot(1, 3, 3)
plt.title("По методу Симпсона") # заголовок
plt.xlabel("x") # ось абсцисс
plt.ylabel("y") # ось ординат
plt.plot(x, y,'r-', marker='*') # построение графика
plt.plot(xsrspisok, ysrspisok,'b-.', marker='+') # построение графика
plt.show()
  • Вопрос задан
  • 472 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы