Python 使用梯形方法集成SciPy问题(';numpy.ndarray';对象不可调用)
我正在尝试创建一个函数,它允许您为y输入一个具有上下限和N步数的表达式。它接受表达式,应该对其进行积分,然后通过梯形法运行N步,并输出结果。目前在我的方式中有一个错误('numpy.ndarray'对象不可调用)。不知道怎么修!这是密码Python 使用梯形方法集成SciPy问题(';numpy.ndarray';对象不可调用),python,python-3.x,numpy,numpy-ndarray,integrate,Python,Python 3.x,Numpy,Numpy Ndarray,Integrate,我正在尝试创建一个函数,它允许您为y输入一个具有上下限和N步数的表达式。它接受表达式,应该对其进行积分,然后通过梯形法运行N步,并输出结果。目前在我的方式中有一个错误('numpy.ndarray'对象不可调用)。不知道怎么修!这是密码 import numpy as np import scipy.integrate as integrate %matplotlib inline def trap(f,b,a): return 0.5 * (b-a)*(f(a) + f(b
import numpy as np
import scipy.integrate as integrate
%matplotlib inline
def trap(f,b,a):
return 0.5 * (b-a)*(f(a) + f(b))
def multistep(f,method,b,a,N):
step = (b-a)/N
lower = np.linspace(b,a,N,endpoint=False)
upper = np.linspace(b+step,a,N)
result = 0
for n in range(N):
result += method(f,lower[n],upper[n])
return result
def trapezium_rule_integration_function(f,a,b,N):
x = np.linspace(b,a,N)
yf = []
for p in x:
yf.append(f(p))
y = np.array(yf)
return multistep(y,trap,b,a,N)
y = 1/(1+x**2)
trapezium_rule_integration_function(y,10,0,100)
提前感谢您提供的任何支持
约翰·布拉姆斯通过快速观察,我发现这个错误源于函数梯形规则积分函数
y = np.array(yf)
return multistep(y,trap,b,a,N)
multistep的第一个参数应该是一个函数,但是您提供了一个数组y,它不能由“()”调用。然后将该数组传递给multistep,multistep需要一个函数f
顺便说一下,你应该把y重写为
y = lambda x: 1/(1+x**2)
祝你好运。非常感谢,这是一个巨大的帮助!!