You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:42:52