Я пытаюсь изобразить результат трапецеидального метода на графике, я понял, что для получения точного значения интеграла вы можете использовать integrate.trapz(f(x))
из scypy библиотеки. Это мой второй месяц изучения математической математики, но я еще не совсем уверен в использовании библиотек.
Вот мой код
from scipy import integrate
def f(x):
return 1 - x - 4*x**3 + 2*x**5
def trapezoid(a, b, n):
h = (b - a) / n
s = (f(a) + f(b))
i = 1
while i < n:
s += 2 * f(a + i * h)
i += 1
area = ((h / 2) * s)
return area
def graphTrapezoid():
val = []
err = []
exact_sum = integrate.trapz(f(b))-integrate.trapz(f(a))
for i in range (2,100):
val.append(trapezoid(a,b,i))
errVal = abs((trapezoid(a,b,i) - exact_sum)/exact_sum)
err.append(errVal)
plt.plot(val, err)
a = 1
b = 5
n = 1
graphTrapezoid()
Ниже приведено сообщение об ошибке, которое я получил
IndexError Traceback (most recent call last)
<ipython-input-134-504c0acc46bf> in <module>
39
40
---> 41 graphTrapezoid()
<ipython-input-134-504c0acc46bf> in graphTrapezoid()
29 val = []
30 err = []
---> 31 exact_sum = integrate.trapz(f(b))-integrate.trapz(f(a))
32 for i in range (2,100):
33 val.append(trapezoid(a,b,i))
~\Anaconda3\lib\site-packages\numpy\lib\function_base.py in trapz(y, x, dx, axis)
4059 slice1 = [slice(None)]*nd
4060 slice2 = [slice(None)]*nd
-> 4061 slice1[axis] = slice(1, None)
4062 slice2[axis] = slice(None, -1)
4063 try:
IndexError: list assignment index out of range