如何在Python中使用Simpsons规则进行集成?

如何在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) 但我有一个

我正在尝试集成这个函数: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)
但我有一个错误:

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。。。。