Python sympy - 简化方程中的非零因子

Python sympy - simplify nonzero factors from an equation

我正在为 python3 使用 sympy 库,并且我正在处理方程式,例如以下方程式:

a, b = symbols('a b', positive = True)
my_equation = Eq((2 * a + b) * (a - b) / 2, 0)

my_equations 完全按照我定义的方式打印((2 * a + b) * (a - b) / 2 == 0,即),即使使用 simplify 或类似函数我也无法减少它。

我想要实现的是简化等式(2 * a + b1 / 2)中的非零因子;理想情况下,如果我确定 a != b.

,我也希望能够简化 a - b

我有什么方法可以达到这个目标吗?

重点是 simplify() 还不能(还)对假设进行复杂推理。我在 Wolfram Mathematica 的 simplify 上测试了它,它可以工作。它看起来像是 SymPy 中缺少的功能。

无论如何,我建议一个函数来做你正在寻找的事情。

定义这个函数:

def simplify_eq_with_assumptions(eq):
    assert eq.rhs == 0  # assert that right-hand side is zero
    assert type(eq.lhs) == Mul  # assert that left-hand side is a multipl.
    newargs = []  # define a list of new multiplication factors.
    for arg in eq.lhs.args:
        if arg.is_positive:
            continue  # arg is positive, let's skip it.
        newargs.append(arg)
    # rebuild the equality with the new arguments:
    return Eq(eq.lhs.func(*newargs), 0)

现在您可以拨打:

In [5]: simplify_eq_with_assumptions(my_equation)
Out[5]: a - b = 0

您可以轻松地根据需要调整此功能。希望在 SymPy 的某些未来版本中调用 simplify.

就足够了