【发布时间】:2016-06-09 05:44:02
【问题描述】:
我目前正在处理多个变量的函数,并且需要收集类似的术语以尝试简化表达式。
假设表达式写成如下:
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)
编辑:格式化以增加清晰度并更改表达式 z 以使问题更易于理解。
假设z 包含这么多术语,可以通过肉眼筛选它们。并选择适当的条款,将花费不令人满意的时间。
我想收集所有仅是 a**1 倍数的术语。我不关心 a 的二次或更高次幂,也不关心不包含 a 的项。
z 和 zEx 的类型返回以下内容:
print type(z)
print type(zEx)
>>>
<class 'sympy.core.add.Add'>
<class 'sympy.core.mul.Mul'>
有谁知道我如何收集 a 的倍数而不是 a^0 或 a^2 的术语?
tl'dr
其中 z(x,y) 和常数 a 和 k 由 z 和 zEx 及其 type() 描述:如何从 z 中删除所有非 a 项并删除所有二次或表达式中a 的更高术语?这样剩下的就是仅包含a的统一力量的术语。
【问题讨论】:
标签: python python-2.7 math sympy polynomials