在sympy中获得复杂表达式的系数

时间:2019-03-30 23:49:14

标签: python sympy complex-numbers

我有一个相对简单的复杂sympy表达式,可以很容易地从变量中读取系数。但是coeff功能似乎无法正常工作

import sympy as sp

a,b =  sp.symbols("a, b")

expr = 2640.0*a  - 4.5*(1 + 1j)*(264.0*a + 264.0*b) - 4.5*(+1 - 1j)*(264.0*a  + 264.0*b)

print(expr.coeff(a))

> 2640.00000000000

print(sp.simplify(expr))

> 264.0*a - 2376.0*b

我希望expr.coeff(a)的输出返回264.0,但显然不是吗?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

您的第一个表达式具有2640.0作为系数a。如您所见,系数简化后变为 only 。确实,如果您在简化表达式后打印系数,则会得到264.0

import sympy as sp

a,b =  sp.symbols("a, b")

expr = 2640.0*a  - 4.5*(1 + 1j)*(264.0*a + 264.0*b) - 4.5*(+1 - 1j)*(264.0*a  + 264.0*b)

print(expr.coeff(a))
# 2640.00000000000

print(sp.simplify(expr))
# 264.0*a - 2376.0*b

print(sp.simplify(expr).coeff(a)) # <--- Simplified expression
# 264.000000000000

答案 1 :(得分:0)

coeff 给出顶层表达式的系数。如果您在查找系数之前使用 expand ,那么您将获得数学(不是表达式相关的文字)系数。如果您知道表达式在感兴趣的符号中是线性的,您也可以微分一次:

>>> expr.diff(a)
264.000000000000
>>> expr.expand().coeff(a)
264.000000000000

Poly 自动扩展表达式并允许查询单项式:

>>> Poly(expr).coeff_monomial(a)
264.000000000000