Для класса числовых методов мне нужно написать программу для оценки определенного интеграла с составным правилом Симпсона. Я уже получил это далеко (см. Ниже), но мой ответ неправильный. Я тестирую программу с f (x) = x, интегрированной над 0 на 1, для которой результат должен быть равен 0,5. Я получаю 0.78746 ... и т. Д. Я знаю, что в Scipy есть правило Симпсона, но мне действительно нужно написать его сам.Правило Симпсона в Python
Я подозреваю, что с двумя петлями что-то не так. Я пытался «для i в диапазоне (1, n, 2)» и «для i в диапазоне (2, n-1, 2)» раньше, и это дало мне результат 0,41668333 ... и т. Д. Я также пробовал «x + = h», и я попробовал «x + = i * h». Первый дал мне 0.3954, а второй вариант 7.9218.
# Write a program to evaluate a definite integral using Simpson's rule with
# n subdivisions
from math import *
from pylab import *
def simpson(f, a, b, n):
h=(b-a)/n
k=0.0
x=a
for i in range(1,n/2):
x += 2*h
k += 4*f(x)
for i in range(2,(n/2)-1):
x += 2*h
k += 2*f(x)
return (h/3)*(f(a)+f(b)+k)
def function(x): return x
print simpson(function, 0.0, 1.0, 100)
Python 2 или Python 3? – Makoto
Это может быть связано с ошибками усечения, вы проверяли неопределенные значения в любой точке? – StoryTeller
Вы посмотрели http://en.wikipedia.org/wiki/Simpsons_rule, есть алгоритм, указанный в python2 – epsilonhalbe