我目前正在处理多个变量的函数,需要收集类似的术语,以尝试简化表达式。在
假设表达式如下:
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
和{
有人知道我如何收集a
的倍数,而不是^0或^2吗?在
tl'dr公司
其中z(x,y)包含由z
和zEx
及其type()描述的常数:如何从z
中删除所有非a
项,并从表达式中删除{a
的单位幂的项。在
最后,它只是一个班轮。@阿斯默勒把我带到了正确的轨道上(查看下面的评论)。代码如下;解释如下:
那么
^{pr2}$zmod
是所以让我们更仔细地看一下:
只是表达式中所有单个术语的集合(请注意,符号也经过了解析,这使事情变得更简单):
然后在列表理解中,使用函数
has
选择包含a
的所有术语。然后,可以使用Add
将所有这些项粘在一起,这将提供所需的输出。在编辑
上面的返回所有包含} 和
a
的表达式。如果只想用unity power筛选出包含a
的表达式,可以使用^{Mul
:那么
zmod2
是和
zmod2.expand()
这是正确的。在
通过更新的
z
,我运行:然后获得
zmod3.expand()
:这就是你要找的结果吗?在
附言:感谢@asmeurer的所有这些有用的评论!在
除了给出的其他答案之外,您还可以使用
collect
作为字典。在生成表达式
^{pr2}$要迭代表达式的术语,请使用
expr.args
。在我不清楚
a
应该是什么,但是{a1}可以做你想要的。在相关问题 更多 >
编程相关推荐