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

如何使用SymPy简化耦合线性常微分方程组的求解结果并提取G(t)、H(t)的表达式

如何使用SymPy简化耦合线性常微分方程组的求解结果并提取G(t)、H(t)的表达式

我明白你的困扰——用SymPy解耦合线性ODE得到一堆复杂的表达式,还都是等式形式,想提取出G(t)和H(t)并简化成和手算结果匹配的样子对吧?别担心,咱们一步步来处理:

首先,先回顾下你的求解结果:dsolve_system返回的是一个列表,里面的第一个元素是包含G(t)和H(t)解的元组(因为你的问题只有一组符合初始条件的特解)。接下来我们可以通过以下步骤提取并简化表达式:

步骤1:解包求解结果

先把求解得到的两个等式从结果里取出来:

# 解包G(t)和H(t)的解等式
g_sol, h_sol = solution1[0]

步骤2:提取G(t)和H(t)的表达式

每个等式对象都有rhs属性(表示等号右侧的内容),我们可以直接提取出对应的表达式:

# 提取G(t)的表达式
g_expr = g_sol.rhs
# 提取H(t)的表达式
h_expr = h_sol.rhs

步骤3:简化表达式

SymPy提供了多种简化函数,针对你的复杂系数情况,推荐这几种方式:

  1. 通用简化:用simplify()做整体简化,它会自动处理代数运算、指数合并等:
g_simplified = sy.simplify(g_expr)
h_simplified = sy.simplify(h_expr)
  1. 有理式整理:如果你的结果里有大量分式系数,用ratsimp()专门整理有理表达式,会让系数更简洁:
g_ratsimp = sy.ratsimp(g_expr)
h_ratsimp = sy.ratsimp(h_expr)
  1. 按指数项合并:因为线性耦合ODE的解通常是指数函数的组合,用collect()把相同指数项的系数合并,结果会和你手算的形式更匹配:
g_collected = sy.collect(sy.simplify(g_expr), sy.exp)
h_collected = sy.collect(sy.simplify(h_expr), sy.exp)

完整修改后的代码

把这些步骤加到你的原有代码后面,就可以得到清晰的G(t)和H(t)表达式了:

import sympy as sy
import scipy as sc
from sympy.physics.units.quantities import Quantity
from sympy.solvers.ode.systems import dsolve_system

from IPython.display import display
from sympy import init_printing

sy.init_printing()

t=sy.Symbol('t',real=True,positive=True)
kF=sy.Symbol('k_{F}',real=True,positive=True)
kR=sy.Symbol('k_{R}',real=True,positive=True)
kG=sy.Symbol('k_{G}',real=True,positive=True)
kH=sy.Symbol('k_{H}',real=True,positive=True)

G=sy.Function('G')
H=sy.Function('H')

eq1=sy.Eq(sy.Derivative(G(t),t),-kG*G(t)-kR*G(t)+kF*H(t))
eq2=sy.Eq(sy.Derivative(H(t),t),-kH*H(t)-kF*H(t)+kR*G(t))

system1=(eq1,eq2)
solution1=dsolve_system(eqs=system1,funcs=[G(t),H(t)],t=t,ics={G(0):1,H(0):0})

# 解包求解结果
g_sol, h_sol = solution1[0]

# 提取表达式并简化
g_expr = sy.collect(sy.ratsimp(g_sol.rhs), sy.exp)
h_expr = sy.collect(sy.ratsimp(h_sol.rhs), sy.exp)

# 显示结果
print("简化后的G(t):")
display(g_expr)
print("\n简化后的H(t):")
display(h_expr)

这样处理后,你得到的结果应该会和手算的形式一致,复杂的系数也会被整理得更易读。如果还想进一步调整格式,比如用factor()分解系数,或者expand()展开表达式,都可以根据你的需求添加对应的SymPy函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:50:29