Я определил следующую функцию как метод аппроксимации интеграла с использованием правила Буля:
def integrate_boole(f,l,r,N):
h=((r-l)/N)
xN = np.linspace(l,r,N+1)
fN = f(xN)
return ((2*h)/45)*(7*fN[0]+32*(np.sum(fN[1:-2:2]))+12*(np.sum(fN[2:-3:4]))+14*(np.sum(fN[4:-5]))+7*fN[-1])
Я использовал функцию, чтобы получить значение интеграла для sin(x)dx
между 0 и пи (где N = 8) и присвоил его переменной sine_int
.
Ответ был 1.3938101893248442
После выполнения исходного уравнения (см. здесь ) вручнуюЯ понял, что этот ответ был довольно неточным.
Суммы fN дают неправильные значения, но я не уверен, почему.Например, np.sum(fN[4:-5])
равно 0.
Есть ли лучший способ кодирования соответствующих сумм или в моих параметрах есть ошибка, которая приводит к неточности вычислений?
Заранее спасибо.
РЕДАКТИРОВАТЬ
Я должен был прояснить, что это должна быть составная версия правила, то есть аппроксимация по N точкам, где Nделится на 4. Таким образом, к сожалению, типичные 5 точек с 4 интервалами здесь не помогут.Я скопировал бы уравнение, которое я использую здесь, но у меня нет изображения этого, и LaTex не вариант.Это должно быть ясно из кода, который я имею после return
.