说我有一个表达式如下:
a*b*c + b*c + a*d
可以将其分解为:
b*(a*c + c) + (a*d)
或
c*(a*b + b) + (a*d)
或
a*d + b*c*(a + 1)
其他可能性。
对于其他表达方式,可能性的数量会大得多。
我的问题是,SymPy有没有允许用户选择显示哪些实用程序的实用程序?有没有办法在表达式中对术语进行分解/分组时指定要使用的公因子?
编辑:正如@ user772649指出的那样,我可以使用collect
。但是,collect
似乎根据数学表达式的初始因子分解给出不同的输出,例如:
a,b,c,d = symbols("a,b,c,d")
# These two equations are mathematically equivalent:
eq1 = a*b*c + b*c + a*d
eq2 = a*d + b*c*(a + 1)
print collect(eq1, a)
print collect(eq2, a)
打印:
a*(b*c + d) + b*c
a*d + b*c*(a + 1)
等式eq1
和eq2
在数学上是等价的,但collect
为每个等式输出不同的因子分解,尽管调用collect
命令两者都是一样的。这让我想到以下两个问题:
collect
之前,有没有办法“扩展”表达式? 答案 0 :(得分:5)
使用collect():
from sympy import *
a,b,c,d = symbols("a,b,c,d")
eq = a * b * c + b * c + a * d
print collect(eq, b)
print collect(eq, c)
print collect(eq, b*c)
输出是:
a*d + b*(c + a*c)
a*d + c*(b + a*b)
a*d + b*c*(1 + a)