如何在Python中使用Simpsons规则进行集成?
我正在尝试集成这个函数:x^4-2x+1从0到2 我写了这个程序:如何在Python中使用Simpsons规则进行集成?,python,physics,Python,Physics,我正在尝试集成这个函数:x^4-2x+1从0到2 我写了这个程序: def f(x): return (x**4)-(2*x)+1 N=10 a=0.0 b=2.0 h=(b-a)/N s=f(a)+f(b) for k in range(1,N/2): s+=4*f(a+(2*k-1)*h) for k in range(1,N/(2-1)): s1 +=f(a+(2*k*h) M=(s)+(2*s1) print((1/3.0)*h)*(3) 但我有一个
def f(x):
return (x**4)-(2*x)+1
N=10
a=0.0
b=2.0
h=(b-a)/N
s=f(a)+f(b)
for k in range(1,N/2):
s+=4*f(a+(2*k-1)*h)
for k in range(1,N/(2-1)):
s1 +=f(a+(2*k*h)
M=(s)+(2*s1)
print((1/3.0)*h)*(3)
但我有一个错误:
File "<ipython-input-29-6107592420b6>", line 17
M=(s)+(2*s1):
^
SyntaxError: invalid syntax
我试着用不同的形式写它,但我总是在M中得到一个错误,你忘了在这里的第二个for循环中有一个右括号:s1+=fa+2*k*h。应该是:
s1 += f(a + (2 * k * h)) # <<< here it is
作为将来的参考,您还可以考虑使用scipy.integrate。 看看这里,根据数据集的性质和分辨率,哪一个可能更准确 代码可能如下所示:
import scipy.integrate as int
x = [ ii/10. for ii in range(21)]
y = [ xi**4 - 2*xi + 1 for xi in x]
tahdah = int.simps(y,x,even='avg')
print(tahdah)
你可以用铅笔和纸确认4.4的结果和答案。你看过维基百科上用python编写的《辛普森一家》规则吗?为了未来读者的利益,我将把它转载到这里
#!/usr/bin/env python3
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
# Demonstrate that the method is exact for polynomials up to 3rd order
print(simpson(lambda x:x**3, 0.0, 10.0, 2)) # 2500.0
print(simpson(lambda x:x**3, 0.0, 10.0, 100000)) # 2500.0
print(simpson(lambda x:x**4, 0.0, 10.0, 2)) # 20833.3333333
print(simpson(lambda x:x**4, 0.0, 10.0, 100000)) # 20000.0
只是要补充一点——通常当你遇到无效的语法错误时,问题通常是在上面的那一行。顺便说一句,你的辛普森规则公式不太正确。我在这里的旧答案可能会有所帮助,您可能希望在循环中使用它之前声明s1=0。或者使用s+=2*f。。。。