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}))
我对 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}))