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

Sympy代入初始条件后无法求解微分方程组,求助排查问题

Sympy代入初始条件后无法求解微分方程组,求助排查问题

我完全懂你这种卡壳的烦躁——不带初始条件跑一小时才出冗长结果,带初始条件直接卡到天荒地老,试过简化问题也没空间,换Wolfram Alpha也没搞定,确实头疼。给你梳理几个可能的优化方向和排查点:

1. 先代入数值再求解,砍掉冗余符号运算

你现在是先保留R1/R2/R3/C1/C2/C3这些符号变量求解,之后再代入数值,这种方式会让符号运算的复杂度指数级上升。建议先把所有已知的电阻、电容数值直接代入方程,再调用dsolve,能大幅降低求解器的运算压力:

import sympy as sp

r1 = 3570
r2 = 3570
r3 = 6e6
c1 = 200e-12
c2 = 200e-12
c3 = 120e-12

t = sp.symbols("t")
V0 = sp.Function('V0')(t)
V1 = sp.Function('V1')(t)
V2 = sp.Function('V2')(t)

dV1 = sp.Derivative(V1, t)
dV2 = sp.Derivative(V2, t)

# 直接用数值构建方程,省去符号变量的冗余运算
eq1 = sp.Eq((c1 + c3)*dV1 + ((1/r1) + (1/r3))*V1 + (-c3)*dV2 + (-1/r3)*V2, (1/r1)*V0)
eq2 = sp.Eq((c3)*dV1 + (1/r3)*V1 + (-c3 - c2)*dV2 + (-1/r2)*V2, 0)

# 再求解带初始条件的方程组
sol = sp.dsolve([eq1, eq2], [V1, V2], ics={V1.subs(t,0): 0, V2.subs(t, 0): 0})
print(sp.latex(sol[1]))

2. 预处理方程,简化冗余项

你的方程组是线性非齐次常微分方程组,理论上有解析解,但复杂的系数组合会拖慢求解速度。可以先用sp.simplify()预处理方程,减少不必要的项:

eq1_simplified = sp.simplify(eq1)
eq2_simplified = sp.simplify(eq2)
sol = sp.dsolve([eq1_simplified, eq2_simplified], [V1, V2], ics={V1.subs(t,0): 0, V2.subs(t, 0): 0})

3. 指定求解方法,针对性优化

Sympy的dsolve支持指定求解器,对于线性方程组,尝试指定method="linear",让求解器用专门的线性方程组算法处理:

sol = sp.dsolve([eq1, eq2], [V1, V2], ics={V1.subs(t,0): 0, V2.subs(t, 0): 0}, method="linear")

额外参考:先数值解验证行为

如果解析解实在卡壳,可以先用数值求解工具(比如scipy.integrate.solve_ivp)先得到数值结果,确认方程组的行为是否符合预期,再回头排查解析解的问题。另外如果V0是具体的函数(比如阶跃、正弦),也可以先代入V0的具体形式,进一步降低求解难度。

备注:内容来源于stack exchange,提问作者noah rivas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:03:04