使用梯形方法SciPy进行集成的问题“ numpy.ndarray”对象不可调用

问题描述

我正在尝试创建一个函数,该函数可让您输入带有上限和下限以及N个步骤的y表达式。它接受表达式,应该对其进行积分,然后将其通过梯形方法运行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))
def multistep(f,method,a,N):
    step = (b-a)/N
    lower = np.linspace(b,N,endpoint=False)
    upper = np.linspace(b+step,N)
    result = 0
    for n in range(N):
        result += method(f,lower[n],upper[n])
    return result

def trapezium_rule_integration_function(f,N):
    x = np.linspace(b,N)
    yf = []
    for p in x:
        yf.append(f(p))
    y = np.array(yf)
    return multistep(y,trap,N)
y = 1/(1+x**2)
trapezium_rule_integration_function(y,10,100)

在此先感谢您提供任何支持

约翰·勃拉姆斯

解决方法

通过快速查看,我发现此错误源于函数trapezium_rule_integration_function,

y = np.array(yf)
return multistep(y,trap,b,a,N)

multistep的第一个参数应该是一个函数,但是您提供了一个数组y,它不能由'()'调用。然后将此数组传递给多步,多步需要一个函数f。

顺便说一句,您应该将y重写为

y = lambda x: 1/(1+x**2)

祝你好运。