类型错误:求解一阶常微分方程时对象不可调用?
这是我写的代码和我得到的代码,下面是我一直遇到的错误。我尝试在这段代码中使用了 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
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")
。