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

6

我有一个相对简单的复杂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个回答

2

coeff函数返回顶层表达式的系数。如果在查找系数之前使用expand函数,则会得到数学上(而不是表达式相关文字)的系数。如果您知道所需符号的表达式是线性的,那么还可以对其进行一次微分:

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

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

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

0

你的第一个表达式中,a 的系数为 2640.0。正如你所看到的,在简化它之后,系数才变为零。确实如此,如果你在简化表达式后打印系数,你会得到 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

我知道在简化后它是如何工作的,但是语句“您的第一个表达式将2640.0作为a的系数”是不正确的。只有在将表达式简化为该变量的一个实例时,才定义了变量的系数。没有理由只选择我的第一个表达式中的第一个“a”实例并返回系数。 - shaun252

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接