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 + b
和 1 / 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.
就足够了
我正在为 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 + b
和 1 / 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.
就足够了