首页 > 解决方案 > 使用梯形方法集成 SciPy 问题('numpy.ndarray' 对象不可调用)

问题描述

我正在尝试创建一个函数,该函数可让您为 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))
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)

提前感谢您提供的任何支持。

约翰·勃拉姆斯

标签: pythonpython-3.xnumpynumpy-ndarrayintegrate

解决方案


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

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

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

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

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

祝你好运。


推荐阅读