gpt4 book ai didi

python - 在 SymPy 中选择不同的表达式分解

转载 作者:太空狗 更新时间:2023-10-29 21:06:12 26 4
gpt4 key购买 nike

假设我有如下表达式:

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)

方程 eq1eq2 在数学上是等价的,但是 collect 为它们中的每一个输出不同的因式分解,尽管事实上两者对 collect 命令的调用是相同的。这让我想到了以下两个问题:

  1. 有没有办法在调用 collect 之前“展开”表达式?
  2. 有没有一种方法可以“收集”(对表达式进行因式分解)而不必先展开表达式,而这种方式对初始因式分解是不变的?

最佳答案

使用收集():

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)

关于python - 在 SymPy 中选择不同的表达式分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6879236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com