TypeError:求解一阶 ODE 时对象不可调用?

问题描述 投票:0回答:1

这是我编写并提供的代码,下面是我反复收到的错误。我尝试在这段代码中同时使用

y.diff
Derivative
函数,但是它们都给了我同样的错误。

#y'-2ty = -t
from sympy import *

t = symbols('t')
y = Function('y')(t)

eqn = (Derivative(y(t)) - (2*t*y(t)), -t)
display(eqn)

ysol = dsolve(eqn,y(t))
print("The solution is ", ysol.lhs, " = ", ysol.rhs)
print("The solution is ") 
display(ysol)

错误:

----> 1 ysol = dsolve(eqn,y(t))

TypeError: 'y' object is not callable
python typeerror sympy ode
1个回答
0
投票

线路

y = Function('y')(t)

已经将

y
定义为
t
的函数。当您稍后编写
y(t)
时,您要求 sympy 调用
y
,就好像它是一个函数一样(就像您将
print
函数称为
print(...)
一样)。您有两个选择: (1) 不要将
y
定义为
t
的函数,即

y = Function('y')

进行此更改后,您将不再收到错误。 (2) 保持

y
原样定义,但稍后只写
y
而不是
y(t)
,即

eqn = (Derivative(y) - (2*t*y), -t)

在你的问题中,你说你尝试过

y.diff()
,但是根据你如何定义
y
,这实际上应该有效,所以我猜你确实做到了
y(t).diff()


现在,你实际上还有另一个问题,那就是你应该将

eqn
定义为一个 sympy 方程,即

eqn = Eq(Derivative(y) - (2*t*y), -t)

如果没有这个,

dsolve
将会抛出一个错误(它需要一个方程)。


还有一个小问题,避免在代码中导入通配符 (

from X import *
)。有些人会做
import sympy as smp
import sympy as sp
或只是
import sympy
。然后,你会做
y = smp.Function("y")

© www.soinside.com 2019 - 2024. All rights reserved.