Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 薛定谔方程不能随时间正确演化?_Python 2.7_Numerical Methods_Numerical Integration - Fatal编程技术网

Python 2.7 薛定谔方程不能随时间正确演化?

Python 2.7 薛定谔方程不能随时间正确演化?,python-2.7,numerical-methods,numerical-integration,Python 2.7,Numerical Methods,Numerical Integration,我正在用python编写一个代码,使用Crank-Nicolson方案来发展与时间相关的薛定谔方程。我不知道如何处理这种可能性,所以我环顾四周,找到了一种方法,我已经从其他几个来源证实了这一点。根据它们,对于谐振子势,C-N格式给出 AΨn+1=A∗Ψn 其中A主对角线上的元件为dj=1+[(iΔt)/(2m(Δx)^2)]+[(iΔt(xj)^2)/4],上下对角线上的元件为A=−iΔt/[4m(Δx)^2

我正在用python编写一个代码,使用Crank-Nicolson方案来发展与时间相关的薛定谔方程。我不知道如何处理这种可能性,所以我环顾四周,找到了一种方法,我已经从其他几个来源证实了这一点。根据它们,对于谐振子势,C-N格式给出

                                      AΨn+1=A∗Ψn     
其中A主对角线上的元件为dj=1+[(iΔt)/(2m(Δx)^2)]+[(iΔt(xj)^2)/4],上下对角线上的元件为A=−iΔt/[4m(Δx)^2]

按照我的理解,我应该以矩阵ψn的形式给出一个初始条件(我选择了相干态),我需要计算矩阵ψn+1,它是时间Δt后的波函数。为了获得给定步骤的ψn+1,我将矩阵a倒置,并与矩阵a*相乘,然后将结果与ψn相乘。在下一步中,生成的矩阵变成ψn

但是当我这样做的时候,我得到了一个错误的动画。波包应该在边界之间振荡,但在我的动画中,它几乎没有从其初始平均值移动。我只是不明白我做错了什么。我对这个问题的理解错了吗?还是我的代码有缺陷?请帮忙!我已经在下面发布了我的代码和我的动画视频。我很抱歉代码的长度和问题,但它让我发疯不知道我的错误是什么

import numpy as np
import matplotlib.pyplot as plt
L = 30.0
x0 = -5.0
sig = 0.5
dx = 0.5
dt = 0.02
k = 1.0
w=2
K=w**2
a=np.power(K,0.25)
xs = np.arange(-L,L,dx)
nn = len(xs)

mu = k*dt/(dx)**2
dd = 1.0+mu
ee = 1.0-mu
ti = 0.0
tf = 100.0
t = ti
V=np.zeros(len(xs))
u=np.zeros(nn,dtype="complex") 
V=K*(xs)**2/2            #harmonic oscillator potential
u=(np.sqrt(a)/1.33)*np.exp(-(a*(xs - x0))**2)+0j    #initial condition for wave function
u[0]=0.0          #boundary condition
u[-1] = 0.0      #boundary condition

A = np.zeros((nn-2,nn-2),dtype="complex")     #define A
for i in range(nn-3):
    A[i,i] = 1+1j*(mu/2+w*dt*xs[i]**2/4)
    A[i,i+1] = -1j*mu/4.
    A[i+1,i] = -1j*mu/4.
A[nn-3,nn-3] = 1+1j*mu/2+1j*dt*xs[nn-3]**2/4 

B = np.zeros((nn-2,nn-2),dtype="complex")    #define A*
for i in range(nn-3):
B[i,i] = 1-1j*mu/2-1j*w*dt*xs[i]**2/4
    B[i,i+1] = 1j*mu/4.
    B[i+1,i] = 1j*mu/4.
    B[nn-3,nn-3] = 1-1j*(mu/2)-1j*dt*xs[nn-3]**2/4

X = np.linalg.inv(A)    #take inverse of A
plt.ion()
l, = plt.plot(xs,np.abs(u),lw=2,color='blue')   #plot initial wave function
T=np.matmul(X,B)                                #multiply A inverse with A*

while t<tf:
    u[1:-1]=np.matmul(T,u[1:-1]) #updating u but leaving the boundary conditions unchanged
    l.set_ydata((abs(u)))              #update plot with new u
    t += dt
    plt.pause(0.00001)
将numpy导入为np
将matplotlib.pyplot作为plt导入
L=30.0
x0=-5.0
sig=0.5
dx=0.5
dt=0.02
k=1.0
w=2
K=w**2
a=净功率(K,0.25)
xs=np.arange(-L,L,dx)
nn=len(xs)
mu=k*dt/(dx)**2
dd=1.0+亩
ee=1.0-mu
ti=0.0
tf=100.0
t=ti
V=np.0(len(xs))
u=np.零(nn,dtype=“复数”)
V=K*(xs)**2/2#谐振子势
u=(np.sqrt(a)/1.33)*np.exp(-(a*(xs-x0))**2)+0j#波函数的初始条件
u[0]=0.0#边界条件
u[-1]=0.0#边界条件
A=np.zero((nn-2,nn-2),dtype=“complex”)#定义A
对于范围内的i(nn-3):
A[i,i]=1+1j*(mu/2+w*dt*xs[i]**2/4)
A[i,i+1]=-1j*mu/4。
A[i+1,i]=-1j*mu/4。
A[nn-3,nn-3]=1+1j*mu/2+1j*dt*xs[nn-3]**2/4
B=np.zero((nn-2,nn-2),dtype=“complex”)#定义A*
对于范围内的i(nn-3):
B[i,i]=1-1j*mu/2-1j*w*dt*xs[i]**2/4
B[i,i+1]=1j*mu/4。
B[i+1,i]=1j*mu/4。
B[nn-3,nn-3]=1-1j*(mu/2)-1j*dt*xs[nn-3]**2/4
X=np.linalg.inv(A)#取A的逆
plt.ion()
l、 =plt.plot(xs,np.abs(u),lw=2,color='blue')#绘制初始波函数
T=np.matmul(X,B)#将一个逆与A相乘*

而在经过大量的修补之后,我的步幅变小了。这对我来说很管用——我减小了步长,程序运行正常。如果有人面临着和我一样的问题,我建议大家多看看台阶的大小。如果代码的其余部分没有问题,这是唯一可能出现错误的地方。

经过大量的修改,最终还是减小了我的步长。这对我来说很管用——我减小了步长,程序运行正常。如果有人面临着和我一样的问题,我建议大家多看看台阶的大小。如果代码的其余部分没有问题,这是唯一可能出现错误的地方