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

标签 python sympy symbolic-math

我对 sympy 简化有疑问。请参阅下面的代码。 当我用某些东西替换 sqrt 下的表达式时,它变得“牢不可破”。例如,在最后一行代码中,我将表达式乘以 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)

返回

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

关于python - Sympy 不会用符号除以其平方根来简化表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49956507/

相关文章:

python - 在python程序中定义类外的一些函数有什么好处

python - 使用接口(interface)在 Windows 上将 python 脚本作为服务运行

python - 如何确保数组中的索引仅包含有效的输入?

python - 如何避免 Sympify 自动去掉括号

python - Sympy 解决域上的所有解决方案

Python/Sympy三次方程三角解法

clojure - Clojure 中的机器学习

python - 从 udp 和 http torrent tracker 响应获取 IP 地址

python - 如何在 Python 中创建不立即求值的符号函数执行 DAG?

python - 圣贤新手;在向量和矩阵中引入符号(变量)