求解一阶常微分方程时出现TypeError: object is not callable错误
错误原因分析
- 函数对象误用:
y = Function('y')(t)已经将y实例化为t的函数对象,后续不能再以y(t)的形式调用它,这是触发TypeError: 'y' object is not callable的核心原因。 - 方程格式错误:原代码将方程定义为元组
(Derivative(y(t)) - (2*t*y(t)), -t),但dsolve需要接收一个等式表达式(用Eq构造)或左边减右边等于0的表达式。
修正后的代码
# 求解一阶常微分方程 y' - 2ty = -t from sympy import * t = symbols('t') y = Function('y')(t) # 方法1:用Eq构造等式 eqn = Eq(Derivative(y, t), 2*t*y - t) # 方法2:直接写左边减右边等于0的表达式(两种方法任选其一即可) # eqn = Derivative(y, t) - 2*t*y + t display(eqn) ysol = dsolve(eqn, y) print("The solution is ", ysol.lhs, " = ", ysol.rhs) print("The solution is ") display(ysol)
代码说明
- 移除了所有
y(t)的调用,直接使用已实例化的函数对象y。 - 用
Eq(导数项, 右端项)正确构建微分方程,符合dsolve的参数要求。 dsolve的第二个参数传入y即可,无需再调用y(t)。
内容的提问来源于stack exchange,提问作者user22712330
相关产品推荐
相关产品推荐

