Sympy拉普拉斯变换求解微分方程报错及方程组求解咨询
Sympy 微分方程相关问题解答
1. 调用laplace_transform报错的原因
Sympy的laplace_transform函数仅支持处理单个表达式,而你传入的是Eq类型的等式对象(即diff_eq是一个等式),该函数无法直接解析这种类型的输入,因此抛出AttributeError。
解决方法是分别对等式的左右两侧应用拉普拉斯变换,或者将方程整理为表达式 = 0的形式后,对左侧表达式进行变换:
from sympy import symbols, Function, Eq, laplace_transform t, K, s = symbols('t K s') A = Function('A')(t) # 原微分方程 diff_eq = Eq(A.diff(t), -K*A) # 方法1:分别处理等式两边 lt_left = laplace_transform(diff_eq.lhs, t, s) lt_right = laplace_transform(diff_eq.rhs, t, s) print("左边拉普拉斯变换结果:", lt_left) print("右边拉普拉斯变换结果:", lt_right) # 方法2:将方程转为表达式(左-右)后处理 expr = diff_eq.lhs - diff_eq.rhs lt_expr = laplace_transform(expr, t, s) print("表达式拉普拉斯变换结果:", lt_expr)
2. 用Sympy求解微分方程组
使用dsolve函数即可求解微分方程组,只需将多个方程组成列表传入,还可以通过ics参数指定初始条件。
以下是一个一阶线性微分方程组的求解示例:
from sympy import symbols, Function, Eq, dsolve, exp # 定义符号和未知函数 t = symbols('t') x = Function('x')(t) y = Function('y')(t) k1, k2 = symbols('k1 k2') # 定义微分方程组 eq1 = Eq(x.diff(t), -k1*x) eq2 = Eq(y.diff(t), k1*x - k2*y) # 求解方程组 general_sol = dsolve((eq1, eq2)) print("通解:") for sol in general_sol: print(sol) # 添加初始条件求解特解(t=0时x(0)=X0, y(0)=0) X0 = symbols('X0') particular_sol = dsolve((eq1, eq2), ics={x.subs(t, 0): X0, y.subs(t, 0): 0}) print("\n特解:") for sol in particular_sol: print(sol)
内容的提问来源于stack exchange,提问作者PPenton
相关产品推荐
相关产品推荐

