SymPy求解微分方程时sin函数调用报错的问题排查
问题原因与解决方法
错误根源
- 第一个错误
'sin' is not defined:直接调用sin(x),但既未从SymPy导入sin函数,也未通过SymPy模块名引用它。 - 第二个
TypeError:math.sin()是Python标准库的数值计算函数,仅能处理普通数值,无法识别SymPy的符号变量x,尝试将符号x转为float时失败。
正确做法
使用SymPy自带的符号三角函数sym.sin()(或先从SymPy导入sin后直接调用),SymPy的函数可与符号变量完全兼容。
修正后的完整代码
import sympy as sym sym.init_printing() from IPython.display import display_latex import sympy.plotting as sym_plot # 定义方程 x = sym.symbols('x') y = sym.Function('y') # 用sym.sin(x)替换原有的sin(x)或math.sin(x) eq1 = sym.Eq(y(x).diff(x), (2*y(x)-3*(y(x))**2)*sym.sin(x)) print("The equation") display_latex(eq1) # 求解方程 eq1sol = sym.dsolve(eq1, y(x)) print("has solutions") display_latex(eq1sol) print("or equivalently") display_latex(sym.simplify(eq1sol))
也可以在导入时直接引入sin,简化后续调用:
from sympy import sin, symbols, Function, Eq, dsolve, simplify # 后续代码中直接使用sin(x)即可
修改后代码可正常运行,正确求解目标微分方程。
内容的提问来源于stack exchange,提问作者Trixie
相关产品推荐
相关产品推荐

