Python 辛普森规则集成

Python 辛普森规则集成,python,integral,simpsons-rule,Python,Integral,Simpsons Rule,我写了这个代码,但我不确定它是否正确。在辛普森规则中有一个条件,它必须有偶数个间隔。我不知道如何将这个条件印在我的代码中 def simpson(data): data = np.array(data) a = min(range(len(data))) b = max(range(len(data))) n = len(data) h = (b-a)/n for i in range(1,n, 2): result += 4*da

我写了这个代码,但我不确定它是否正确。在辛普森规则中有一个条件,它必须有偶数个间隔。我不知道如何将这个条件印在我的代码中

def simpson(data):
    data = np.array(data)
    a = min(range(len(data)))
    b = max(range(len(data)))
    n = len(data)
    h = (b-a)/n
    for i in range(1,n, 2):
        result += 4*data[i]*h
    for i in range(2,n-1, 2):
        result += 2*data[i]*h
    return result * h /3

有趣的是,您可以在以下网站中找到:

您将其用作:

simpson(lambda x:x**4, 0.0, 10.0, 100000)

请注意,它如何通过要求函数和
n
绕过奇偶校验问题


如果您需要一个值列表,那么在修改代码(应该很容易)之后,我建议您在代码长度不均匀的情况下也提出一个<代码> ValueError < /代码>。

< P>因为您已经开始使用NUMPY,您也可以考虑使用SCIPY,它方便地提供了辛普森规则集成例程。
from scipy.integrate import simps
result=simps(data)

请参阅完整文档(其中讨论了偶数/奇数间隔的处理)

积分下限您应该尝试打印最小值、范围、长度。其中一个似乎是列表类型的变量,而不是函数。您的意思是
min()
?用于从集合中获取最小整数的内置项?是的,您当然是对的。此
a=min(range(len(data))
始终提供
a=0
,此
b=max(range(len(data))
始终提供
b=len(data)-1
-也许您尝试做一些不同的事情。
from scipy.integrate import simps
result=simps(data)