过滤三角SymPy表达式的项,并保留给定系数

时间:2018-09-04 07:52:27

标签: python sympy

让我们假设我们有一个表达式:

x*sin(y) + y*cos(x) + x*cos(z)

从上面的表达式中,我想获得一个新的多项式,仅包含系数为x的项,即:

     x*sin(y) + x*cos(z)

  x*(sin(y) + cos(z))

很显然,设置y = 0并不是一个解,因为x * sin(y)将变为0。如何在SymPy中过滤多项式的项以仅选择具有给定系数的项?

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找collect

collect(x*sin(y) + x*cos(z) + y*cos(x), x, evaluate=False)

将返回

{x: sin(y) + cos(z), 1: y*cos(x)}

答案 1 :(得分:0)

首先,这不是三角多项式。三角多项式在余弦和正弦前面具有恒定的系数。

使用expr.coeff(x),您可以获得以x为因数的项:即sin(y) + cos(z)

但是,如果表达式为x**3*sin(y) + y*cos(x) + x*cos(z),则仅返回cos(z)。也许这就是您想要的。但是,如果此示例的预期结果是x**3*sin(y) + x*cos(z),则使用

Add(*[v for v in expr.args if v.is_polynomial(x) and v.has(x)])

逻辑是通过条件项expr.args中的多项式,并且是非常数多项式来过滤求和x的元组。 (假设您不想包含常量)。