[英]Simpson rule integration,Python
我写了这段代码,但是我不确定它是否正确。在辛普森规则中,有一个条件是它必须具有偶数个间隔。我不知道如何将此条件压入我的代码中。
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
有趣的是,您可以在Wikipedia条目中找到它:
from __future__ import division # Python 2 compatibility
def simpson(f, a, b, n):
"""Approximates the definite integral of f from a to b by the
composite Simpson's rule, using n subintervals (with n even)"""
if n % 2:
raise ValueError("n must be even (received n=%d)" % n)
h = (b - a) / n
s = f(a) + f(b)
for i in range(1, n, 2):
s += 4 * f(a + i * h)
for i in range(2, n-1, 2):
s += 2 * f(a + i * h)
return s * h / 3
您将其用作:
simpson(lambda x:x**4, 0.0, 10.0, 100000)
请注意,它如何通过需要一个函数和n
来绕过您的奇偶校验问题。
但是,如果您需要它来获取值列表,则在修改代码之后(应该很容易),我建议您还引发ValueError
,以防长度ValueError
。
由于您似乎已经在使用numpy,因此您也可以考虑使用scipy,它可以方便地提供Simpson的规则集成例程。
from scipy.integrate import simps
result=simps(data)
有关完整的文档,请参见http://docs.scipy.org/doc/scipy-0.14.0/reference/generation/scipy.integrate.simps.html (他们讨论了偶数/奇数间隔的处理)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.