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

Sympy微分方程处理:如何将等式lhs的含f2项移动到rhs?

现有实现的正确性说明

你当前的实现针对你给出的场景(原等式右侧为0、f1和f2的项无交叉依赖)可以得到正确结果,但存在明显局限性:

  • 仅支持原等式右侧为0的场景,若原eq1.rhs有非零值会直接丢失这部分内容,导致结果错误
  • 仅支持f1、f2项完全分离的场景,若存在同时包含f1和f2的交叉项(如f1*f2),subs操作会直接剔除交叉项,得到错误结果

更简便的通用解决方案

你可以直接拆分等式左侧的所有项,按是否包含f2分类后重组等式,该方案支持任意原等式右侧值、无交叉项限制:

# 拆分原等式左侧项,分类重组
left = sum(term for term in eq1.lhs.as_ordered_terms() if not term.has(f2))
right = sum(-term for term in eq1.lhs.as_ordered_terms() if term.has(f2)) + eq1.rhs
eq2 = sp.Eq(left, right)

运行后得到的eq2就是Eq(f1 + Derivative(f1(t), (t, 2)), f2(t) - Derivative(f2(t), t)),完全符合移项要求。

如果需要更高复用性,可以封装为工具函数:

def move_terms_containing(eq, target_expr, to_right=True):
    all_terms = (eq.lhs - eq.rhs).as_ordered_terms()
    left_terms = []
    right_terms = []
    for term in all_terms:
        if term.has(target_expr) == to_right:
            right_terms.append(-term)
        else:
            left_terms.append(term)
    return sp.Eq(sum(left_terms), sum(right_terms))

# 调用示例:把所有含f2的项移到右侧
eq2 = move_terms_containing(eq1, f2, to_right=True)

内容的提问来源于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 05:15:08