Sympy 不会用符号除以其平方根来简化表达式

Sympy does not simplify an expression with a symbol divided by the square root of its square

我对 sympy 简化有疑问。请参阅下面的代码。 当我用某些东西替换 sqrt 下的表达式时,它变成 "unbreakable"。例如,在最后一行代码中,我将表达式乘以 f0 并简化了结果。分子中的 f0 和分母中的 sqrt(f0**2) 没有得到简化,即使 f0 被声明为 nonnegative。我做错了什么以及如何在没有这种效果的情况下替换表达式?

代码(pretty version with rendered equations):

>>> from __future__ import division
>>> from sympy import *
>>> from sympy.abc import pi

>>> init_printing(use_unicode=True)
>>> L0, Csum0, f0 = symbols("L0 C_{{\Sigma}0} f0", nonnegative=True)
>>> equation = sqrt(L0)
>>> equation
  ____
╲╱ L₀

>>> substitute = solve(Eq(1/(2*pi*sqrt(L0)*sqrt(Csum0)), f0), L0, dict=1)[0]
>>> substitute
⎧              1           ⎫
⎪L₀: ──────────────────────⎪
⎨                      2  2⎬
⎪    4⋅C_{{\Sigma}0}⋅f₀ ⋅π ⎪
⎩                          ⎭

>>> equation = equation.subs(substitute)
>>> equation
     ______________________
    ╱          1
   ╱  ────────────────────
  ╱                   2  2
╲╱    C_{{\Sigma}0}⋅f₀ ⋅π
───────────────────────────
             2

>>> simplify(equation*f0)
        ______________________
       ╱          1
f₀⋅   ╱  ────────────────────
     ╱                   2  2
   ╲╱    C_{{\Sigma}0}⋅f₀ ⋅π
──────────────────────────────
               2

当 f0 为 0 时,取消 f0/sqrt(f0**2) 是不合法的。为确保允许取消,请将 f0 声明为正数,而不仅仅是非负数。

此外,从 sympy.abc 导入 pi 会使 pi 成为没有特定含义的通用符号;特别是,它不知道是积极的。 SymPy 已经内置了 pi(数学常数),并且知道它是一个正数。因此,从 sympy.abc 中删除导入可以改进简化。

from sympy import *
L0, Csum0, f0 = symbols("L0 C_{{\Sigma}0} f0", positive=True)
equation = sqrt(L0)
substitute = solve(Eq(1/(2*pi*sqrt(L0)*sqrt(Csum0)), f0), L0, dict=1)[0]
equation = equation.subs(substitute)
simplify(equation*f0)

returns

1/(2*pi*sqrt(C_{{\Sigma}0}))