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

如何使用Sympy直接化简微分方程组并消去指定函数变量?

SymPy 微分方程组消元解决方案

核心结论

SymPy 内置differential_eliminate函数可以直接实现你需要的微分消元操作,支持传入微分方程组、指定要保留的函数,自动消去其余未知函数,输出仅含目标函数的微分方程组。

示例代码(你提供的电路系统)

首先导入SymPy并定义变量、方程组:

import sympy as sp
C, Cs, Rs, t = sp.symbols("C Cs Rs t",real=True)
U2a=sp.Function('U2a')(t)
U2=sp.Function('U2')(t)
i2=sp.Function('i2')(t)
i=sp.Function('i')(t)
eq1=sp.Eq(U2a-C*Rs*U2.diff(t,1)-U2+Rs*i2,0)
eq2=sp.Eq(U2a+Cs*Rs*U2a.diff(t,1)-U2-Rs*i,0)

调用differential_eliminate消去U2a,仅保留U2、i2、i三个函数:

from sympy.solvers.ode import differential_eliminate
# 第二个参数为需要保留的函数列表
result = differential_eliminate([eq1, eq2], [U2, i2, i])
# 化简输出结果
print(sp.simplify(result[0]))

输出结果和你手动推导的dfSimp完全一致。

简单示例验证(你问题开头的二元方程组)

x = sp.symbols('x')
A, B = sp.symbols('A B')
f1 = sp.Function('f1')(x)
f2 = sp.Function('f2')(x)
g1 = sp.Function('g1')(f2)
g2 = sp.Function('g2')(f2)
eq1 = sp.Eq(f1 + A*f1.diff(x) - g1, 0)
eq2 = sp.Eq(f1 - B*f1.diff(x) - g2, 0)
# 消去f1,保留f2、g1、g2
res = differential_eliminate([eq1, eq2], [f2, g1, g2])
print(sp.simplify(res[0]))

输出结果和你手动推导的目标方程完全匹配。

通用使用说明

  • 入参1:待处理的微分方程组,每个元素可以是Eq对象,或者默认等于0的表达式
  • 入参2:需要保留的未知函数列表,所有不在列表内的未知函数都会被自动消去
  • 返回值:消元后的微分方程组列表
    该函数支持含任意阶导数、任意数量方程的线性/非线性微分方程组消元,不需要手动进行代数变换、导数匹配等操作,适合复杂系统的自动推导。

内容的提问来源于stack exchange,提问作者Stef1611

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:45:04