在任何事情之前,对不起任何人,英语问题,英语不是我的母语。在
我对欧拉计算ODE的方法做了一个假设,在LTE(局部截断误差)的计算中,我一直收到这个错误:
TypeError: 'numpy.ndarray' object is not callable
我看了一下以前的问题,有相同的主题,但我没有找到确切的我要找的。下面是欧拉法和误差计算的代码。在
def euler(f,y0,a,b,h):
t,y = a,y0
vet_s = np.array([])
vet_err = np.array([])
while t <= b:
#print t , y
vet_s = np.append(vet_s, y)
t += h
y += h * f(t,y)
vet_err = np.append(vet_err, erro(yn, y, t)) # The problem is here
return vet_s, vet_err
def y(t, y):
return lbd*y
def yn(t):
return np.exp(-1*t)
def erro(yn, un, t):
erro_local = abs(yn(t) - un)
return erro_local
当我调用vet\u errassignment函数中的错误计算时,我收到上面显示的错误。 我认为这是一个简单的解决办法,但我自己找不到。在
Euler方法的主要调用如下:
^{pr2}$有什么语法,代码问题吗?另外,任何一个改进代码的指针都会有很大的帮助。谢谢。在
我在你的代码中看到了一些问题-
我想你已经定义了一个名为
erro
的函数,然后你还在做-这会导致名称
erro
指向一个np.array
,这正是导致您遇到问题的原因,您应该在这里使用一个不同的名称,例如erro1
(或其他一些有意义的好名称)。然后在函数-
euler(f,y0,a,b,h)
-中定义了名为-y
的变量。但是在外部还有一个y
函数(这不会直接导致问题,因为您将对函数y的引用作为该函数的第一个参数传递)。在但我建议不要这样做(因为你以后可能会遇到问题)。总是使用不同的有意义的名字,我不认为在英语中有缺少的单词/字母可供使用:)。
也没有必要-
^{pr2}$因为您在下一行中将它重新分配给
euler()
函数的返回值,所以您甚至不需要在此之前定义它们(除非您想使用它们,这看起来不像是这样)。相关问题 更多 >
编程相关推荐