微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用梯形方法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)

祝你好运。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。