类型错误:'努比·恩达雷'对象在Euler的方法LTE计算中不可调用

2024-09-23 10:26:44 发布

您现在位置:Python中文网/ 问答频道 /正文

在任何事情之前,对不起任何人,英语问题,英语不是我的母语。在

我对欧拉计算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}$

有什么语法,代码问题吗?另外,任何一个改进代码的指针都会有很大的帮助。谢谢。在


Tags: 方法代码returnisdef错误nparray
1条回答
网友
1楼 · 发布于 2024-09-23 10:26:44

我在你的代码中看到了一些问题-

  1. 我想你已经定义了一个名为erro的函数,然后你还在做-

    erro = np.array([])
    

    这会导致名称erro指向一个np.array,这正是导致您遇到问题的原因,您应该在这里使用一个不同的名称,例如erro1(或其他一些有意义的好名称)。

  2. 然后在函数-euler(f,y0,a,b,h)-中定义了名为-y的变量。但是在外部还有一个y函数(这不会直接导致问题,因为您将对函数y的引用作为该函数的第一个参数传递)。在

    但我建议不要这样做(因为你以后可能会遇到问题)。总是使用不同的有意义的名字,我不认为在英语中有缺少的单词/字母可供使用:)。

  3. 也没有必要-

    ^{pr2}$

    因为您在下一行中将它重新分配给euler()函数的返回值,所以您甚至不需要在此之前定义它们(除非您想使用它们,这看起来不像是这样)。

相关问题 更多 >