Sympy 进一步简化方程

问题描述 投票:0回答:1

我有一个 sympy 的表达:

m*a+m*b+n*a+n*b
这可以简化为
(a+b)*(m+n)
,但如果我在其上运行
simplify()
,我只会得到相同的表达式。有什么技巧可以让它变得更简单吗?

我尝试过使用

collect(expression, expression.free_symbols)
,但这最多只能让我得到
a⋅(m + n) + b⋅(m + n)
。我曾考虑过尝试对组合运行收集,但这很快就会失控,因为我的实际方程中有更多变量,而且还必须寻找减法等。有没有更好的办法呢? 也欢迎对其他库的建议,但未在 sympy 上修复。

python-3.x sympy symbolic-math algebra
1个回答
0
投票

在 SymPy 中,将表达式简化为人们可能喜欢的形式有时会很棘手,因为

simplify()
尝试了各种方法和启发式方法,但不能保证根据人类直觉找到最简化的形式。您的案例涉及以特定方式分解和收集术语,
simplify()
可能不会优先考虑。

对于您的具体问题,实现所需简化的一种方法是使用

factor()
函数,该函数尝试将表达式分解为更简单表达式的乘积。如果
factor()
不能直接产生所需的结果,则可能需要将其与
collect()
的策略性使用相结合,并可能需要使用其他 SymPy 功能进行手动操作。

您可以尝试以下策略,其中涉及对表达式进行更明确的操作:

  1. 使用
    factor()
    直接套用看是否简化成想要的形式。
  2. 显式收集和因式分解:如果直接因式分解还不够,您可以通过收集与两组符号相关的项(
    a
    b
    ,然后
    m
    n
    )来手动操作表达式),然后尝试分解结果。
  3. 自定义简化:如果您的表达式比较复杂并且涉及
    factor()
    collect()
    无法根据您的喜好进行简化的模式,您可能需要编写一个自定义函数来识别和操作这些模式。

让我们尝试使用 SymPy 简化给定的表达式,看看是否可以实现所需的 ((a + b)

© www.soinside.com 2019 - 2024. All rights reserved.