获取numpy.ndarray对象是不可调用的错误

时间:2017-12-01 04:23:47

标签: python error-handling differential-equations

嘿伙计们我收到错误而且我不能100%确定它为什么会发生。我试图同时执行eulers和heun的方法并将它们相互映射。任何帮助或建议都会很棒!我是python的新手,所以这对我来说有点新鲜。

import numpy
#eulers 
yi = 0
h = 0.2
te = [0.0,2.0,0.2]
def euler(f, y0, t):
    n = len(t)
    y = numpy.array([y0] * n)
    for i in range(n - 1):
        y[i+1] = y[i] + (t[i+1] - t[i]) * f(y[i], t[i])
    return y
fy = (y*t**3) - 1.5*y
y1 = euler(fy, yi, te)

#heun
def heun(f, y0, t):
    n = len(t)
    y = numpy.array( [y0] * n )
    for i in range(n - 1):
        h = t[i+1] - t[i]
        k1 = h * f( y[i], t[i])
        k2 = h * f( y[i] + k1, t[i+1])
        y[i+1] = y[i] + (k1 + k2) / 2.0
    return y

y2 = heun(fy, 1, te)

tp = numpy.linspace(0.0, 2.0, 0.2)
plt.plot(tp, y1,'r-',linewidth=2,label='Eulers')
plt.plot(tp, y2,'b--',linewidth=2,label='Heun')
plt.xlabel('time')
plt.ylabel('y(t)')
plt.legend()
plt.show()

这是我的错误代码:

TypeError                                 Traceback (most recent call last)
<ipython-input-152-395afeefc50a> in <module>()
     11     return y
     12 fy = (y*t**3) - 1.5*y
---> 13 y1 = euler(fy, yi, te)
     14 
     15 #heun

<ipython-input-152-395afeefc50a> in euler(f, y0, t)
      8     y = numpy.array([y0] * n)
      9     for i in range(n - 1):
---> 10         y[i+1] = y[i] + (t[i+1] - t[i]) * f(y[i], t[i])
     11     return y
     12 fy = (y*t**3) - 1.5*y

TypeError: 'numpy.ndarray' object is not callable

1 个答案:

答案 0 :(得分:2)

我的猜测是你试图在行中定义函数f(y,t)

fy = (y*t**3) - 1.5*y

作为你的微分方程。但是,这不是你在python中定义函数的方式。

尝试

def f(y,t): return y*t**3 - 1.5*y

您收到错误是因为在线 ---> 10 y[i+1] = y[i] + (t[i+1] - t[i]) * f(y[i], t[i])

f是一个NumPy数组,但您将其视为一个函数。