【问题标题】:Symbolically obtain real part of a fraction using sympy使用 sympy 象征性地获得分数的实部
【发布时间】:2021-02-12 17:43:25
【问题描述】:

sympy (1.6.2) 遇到了一个非常奇怪的问题:

import sympy as sm
alpha, phi = sm.symbols('alpha, phi', real=True)

print(sm.re(sm.exp(sm.I*phi)/(sm.I*alpha + 1)))

输出

re(exp(I*phi)/(I*alpha + 1))

显然,实部很容易计算,我是手动计算的:(cos(phi)+alpha*sin(phi))/(1+alpha**2)。虚部也是如此。我已经检查过了

print(sm.re(phi),sm.re(alpha),sm.im(phi),sm.im(alpha))

生产

phi alpha 0 0

如何告诉sympy 评估这个简单的表达式?

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    你可以使用:

    In [7]: expr
    Out[7]: 
       ⅈ⋅φ 
      ℯ    
    ───────
    ⅈ⋅α + 1
    
    In [6]: expr.rewrite(cos).as_real_imag()
    Out[6]: 
    ⎛α⋅sin(φ)   cos(φ)    α⋅cos(φ)   sin(φ)⎞
    ⎜──────── + ──────, - ──────── + ──────⎟
    ⎜  2         2          2         2    ⎟
    ⎝ α  + 1    α  + 1     α  + 1    α  + 1⎠
    

    【讨论】:

    • 这行得通,谢谢! re(expr.rewrite(cos)) 也可以。现在我想知道为什么不自动应用rewrite
    • 最好不要自动应用这些东西,因为这意味着你可以用不同的方式表示同一个表达式。
    • 我同意,但simplify 应该评估为最后可能的操作,但事实并非如此。在这里使用rewrite 不是很直观。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2023-02-04
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    相关资源
    最近更新 更多