为什么 sympy 不认为我的常数是真实的?

问题描述 投票:0回答:1

我正在运行这段代码:

import sympy as sym
sym.init_printing()
from IPython.display import display_latex
a = sym.symbols('a', real = True)
r = sym.symbols('r', real = True)

wavefunction = sym.exp(-a*r**2)
normalization_squared = 4*sym.pi*sym.integrate((r**2)*wavefunction**2, (r, 0, sym.oo))
display_latex(normalization_squared.simplify())

并得到这个结果:

我很惊讶它有一个“if arg(z)

我尝试添加“sym.asclusions.assume.global_asminations.add(sym.Q.real(a))”,但这不会改变任何东西。

python sympy physics
1个回答
0
投票

您看到的

arg
条件是表示
a
的实部应该为正的一种方式。这是因为 meijerg 算法处理的是复平面的角区域。声明
a
为实数并不意味着其实部为正。

您的积分是:

In [3]: 4*sym.pi*sym.Integral((r**2)*wavefunction**2, (r, 0, sym.oo))
Out[3]:
    ∞
    ⌠
    ⎮           2
    ⎮  2  -2⋅a⋅r
4⋅π⋅⎮ r ⋅ℯ        dr
    ⌡
    0

该积分对于负

a
不收敛。如果您声明
a
为正 (
symbols('a', positive = True)
),那么您将得到预期的结果:

In [5]: normalization_squared
Out[5]:
    3/2
√2⋅π
───────
   3/2
4⋅a
© www.soinside.com 2019 - 2024. All rights reserved.