说我有一个表达式如下:
a*b*c + b*c + a*d
Run Code Online (Sandbox Code Playgroud)
人们可以把它分解为:
b*(a*c + c) + (a*d)
Run Code Online (Sandbox Code Playgroud)
或者作为
c*(a*b + b) + (a*d)
Run Code Online (Sandbox Code Playgroud)
或者作为
a*d + b*c*(a + 1)
Run Code Online (Sandbox Code Playgroud)
其他可能性.
对于其他表达式,可能性的数量可以大得多.
我的问题是,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)
Run Code Online (Sandbox Code Playgroud)
打印:
a*(b*c + d) + b*c
a*d + b*c*(a + 1)
Run Code Online (Sandbox Code Playgroud)
方程eq1和eq2在数学上是等效的,但collect尽管这样的事实该呼叫到,输出用于它们中的每一个不同的因式分解collect命令是为这两个是相同的.这让我想到以下两个问题:
collect?使用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)
Run Code Online (Sandbox Code Playgroud)
输出是:
a*d + b*(c + a*c)
a*d + c*(b + a*b)
a*d + b*c*(1 + a)
Run Code Online (Sandbox Code Playgroud)