首页 文章

Python:odeint用于解决具有可变系数的ODE(QHO)

提问于
浏览
1

我正在尝试使用odeint以数字方式解决方程式 y'' + (epsilon-x^2)y = 0 . 我知道解决方案(QHO的波函数),但是odeint的输出与它没有明显的关系 . 我可以很好地解决具有常系数的ODE,但是当我转向变量时,我可以't solve any of the ones I tried. Here' s我的代码:

#!/usr/bin/python2
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate as spi

x = np.linspace(-5,5,1e4)

n = 0
epsilon = 2*n+1 

def D(Y,x):
    return np.array([Y[1], (epsilon-x**2)*Y[0]])

Y0 = [0,1]

Y = spi.odeint(D,Y0,x)
# Y is an array with the first column being y(x) and the second y'(x) for all x
plt.plot(x,Y[:,0],label='num')
#plt.plot(x,Y[:,1],label='numderiv')

plt.legend()
plt.show()

情节:[不够代表:] https://drive.google.com/file/d/0B6840LH2NhNpdUVucUxzUGFpZUk/edit?usp=sharing

在这里查看解决方案的图表:http://hyperphysics.phy-astr.gsu.edu/hbase/quantum/hosc5.html

1 回答

  • 0

    看起来您的等式没有被正确解释 . 你有一个微分方程 y'' + (epsilon-x^2)y = 0 ,但你忘记了矢量形式的减号 . 特别应该是

    y[0]' = y[1]
    y[1]' = -(epsilon-x^2)y[0]
    

    所以(在epsilon术语前添加减号

    def D(Y,x):
        return np.array([Y[1], -(epsilon-x**2)*Y[0]])
    

    事实上,你所拥有的情节与DE y'' + (epsilon-x^2)y = 0 一致 . 看看:Wolphram Alpha

相关问题