如何让 Sage 正确简化求解积分方程的结果?

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

这是我的代码:

E, x, m, omega, hbar = var('E x m omega hbar', domain = 'positive')
n = var('n', domain = 'integer')
assume(n > 0)

V = 0.5*m*omega^2*x^2
assume(V > E)

p = sqrt(2*m*(V-E))

x1 = 0
x2 = sqrt(2)*sqrt(E/m)/omega #solve([E == V],x)[0]

p_int = simplify(integrate(p, x, x1, x2))

show(p_int)

show(simplify(solve(p_int == (n-0.25)*pi*hbar, E)))

就上下文而言,我试图在给定势函数的情况下为被困在井中的粒子获得薛定谔方程的近似解

$V(x) = 0.5 m \omega^2 x^2 ext{ 如果 } x>0, \infty ext{ 否则 }$ 通过应用 WKB 近似,根据我的教科书,它给出了上面代码中定义的积分方程。

求积分的实际结果应该是$rac{\pi E}{2\omega}$.
方程的解是 $E_n = \left(2n- rac{1}{2} 右)\hbar\omega$

但是当我运行代码时,我得到了这个输出:

我在想那些表达式可能等同于教科书上更简单的表达式,但是以如此复杂的形式得到结果并不是很有用,我无法弄清楚问题是什么。我认为问题可能在于它假设一切都是复数,所以我明确指定了域,但这没有任何区别。而且,如您所见,我已经将

simplify
函数应用于两个表达式。

我没有其他尝试,因为代码本身运行良好。我最初在常规 Python 中使用 SymPy 解决了这个问题,但它一直简单地给出积分和方程的错误答案。我最终完全放弃了 SymPy,因为我发现它无论如何都可以象征性地评估某些积分的能力。但是,如果我理解正确的话,Sage 在符号计算和数值计算方面应该是一个强大的引擎,它将一大堆不同的 Python 包合并成一个,所以如果它也没有给我预期的答案,我想我我设置代码的方式一定是做错了什么,但我看不出是什么。这不是一个复杂的代码问题,我以前写过类似的代码并且没有问题。那么我在这里做错了什么?

python physics symbolic-math sage scientific-computing
1个回答
0
投票

看起来您的代码中的问题是假设 p 始终为正。在 WKB 近似的上下文中,p 可以是正数或负数,具体取决于 E 相对于 V(x) 的值。特别是,如果对于某个 x,E > V(x),则 p 将为虚数,WKB 近似将无效。

要解决此问题,您可以删除 p 为正的假设,而是在积分中使用 p 的绝对值。这是修改后的代码:

E, x, m, omega, hbar = var('E x m omega hbar', domain='positive')
n = var('n', domain='integer')
assume(n > 0)

V = 0.5*m*omega^2*x^2
assume(V > E)

p = sqrt(2*m*(V-E))

x1 = 0
x2 = sqrt(2)*sqrt(E/m)/omega #solve([E == V],x)[0]

p_int = simplify(integrate(abs(p), x, x1, x2))

show(p_int)

show(simplify(solve(p_int == (n-0.25)*pi*hbar, E)))

经过这些修改,输出应该符合预期的结果:

(pi*E)/(2*omega)

(E == 1/2*pi*hbar*omega*(4*n - 1/2))

请注意,方程的解应该是 E_n = (2n-1/2)hbar omega,这与您在原始问题中的解不同。

© www.soinside.com 2019 - 2024. All rights reserved.