假设我有如下表达式:
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
? - 有没有一种方法可以“收集”(分解一个表达式)以一种对初始分解不变的方式,而不必先扩展表达式?