在Sympy中收集表达式的相似术语

hkh*_*hkh 6 python math sympy python-2.7 polynomials

我目前正在处理多个变量的函数,需要收集类似的术语以尝试简化表达式。

说表达式写成如下:

x = sympy.Symbol('x')
y = sympy.Symbol('y')
k = sympy.Symbol('k')
a = sympy.Symbol('a')

z = k*(y**2*(a + x) + (a + x)**3/3) - k((2*k*y*(a + x)*(n - 1)*(-k*(y**2*(-a + x) + (-a + x)**3/3) + k*(y**2*(a + x) + (a + x)**3/3)) + y)**2*(-a + k*(n - 1)*(y**2 + (a + x)**2)*(-k*(y**2*(-a + x)))))
zEx = z.expand()
print type(z)
print type(zEx)
Run Code Online (Sandbox Code Playgroud)

编辑:格式化以增加清晰度并更改表达式 z 以使问题更容易理解。

Sayz包含很多术语,需要通过眼睛筛选它们。并选择适当的条款,将花费不令人满意的时间。

我想收集所有的条款只有一个的** 1倍数。我不关心 a 的二次或更高次幂,也不关心不包含 a 的项。

的类型zzEx返回以下内容:

print type(z)
print type(zEx)
>>>
<class 'sympy.core.add.Add'>
<class 'sympy.core.mul.Mul'>
Run Code Online (Sandbox Code Playgroud)

有谁知道我如何收集是 的倍数的术语,而a不是 a^0 或 a^2?

医生

其中 z(x,y) 与常量 a 和 k 描述为zandzEx和它们的 type():如何从表达式中删除所有非aza从表达式中删除所有二次或更高项?这样剩下的只是包含 的统一幂的项a

cam*_*lor 6

除了给出的其他答案,您还可以collect用作字典。

print(collect(zEx,a,evaluate=False)[a])
Run Code Online (Sandbox Code Playgroud)

产生表达式

k*x**2 + k*y**2
Run Code Online (Sandbox Code Playgroud)