【问题标题】:Obtaining coefficients of complex expressions in sympy在 sympy 中获取复杂表达式的系数
【发布时间】:2019-03-30 23:49:13
【问题描述】:

我有一个相对简单的复杂 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 但显然不是?任何帮助表示赞赏。

【问题讨论】:

    标签: python sympy complex-numbers


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      您的第一个表达式将2640.0 作为a 的系数。如您所见,系数在简化后变为零。确实,如果你在简化表达式后打印系数,你会得到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”的第一个实例并返回系数。
      猜你喜欢
      • 1970-01-01
      • 2022-10-04
      • 2015-07-04
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多