Я пытаюсь закодировать правило Симпсона на python, используя циклы for, но продолжаю получать сообщение об ошибке и не могу понять, почему.
def integrate_numeric(xmin, xmax, N):
xsum = 0
msum = 0
h = (xmax-xmin)//N
for i in range(0, N):
xsum += f(xmin + i*h)
print (xsum)
for i in range(0,N-1):
msum += f(xmin + (h/2) + i*h)
print (msum)
I = (h/6) * (f(xmin) + 4*(msum) + 2*(xsum) + f(xmax))
return I
f:
def f(x):
return (x**2) * numpy.sin(x)
образец:
assert numpy.isclose(integrate_numeric(xmin=0, xmax=4, N=50), 1.096591)
f(something)
в предпоследней строке. Для правила Симпсона с N + 1 очками (N делений) вы должны коллироватьf
N + 1 раз. Вы хотите суммироватьf
значений в ваших циклах. Вместо этого вы суммируете аргументы с этими вызовами (значенияx
). - person Mark Dickinson   schedule 27.10.2019(xmax-xmin)/N
вместо(xmax-xmin)//N
. Могут быть и другие проблемы. - person Mark Dickinson   schedule 27.10.2019