类型错误:求解一阶常微分方程时对象不可调用?

0 投票
1 回答
24 浏览
提问于 2025-04-12 03:19

这是我写的代码和我得到的代码,下面是我一直遇到的错误。我尝试在这段代码中使用了 y.diffDerivative 这两个函数,但它们都给我带来了同样的错误。

#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 smpimport sympy as sp,或者直接用 import sympy。这样的话,你就可以写 y = smp.Function("y")

撰写回答