本帖最后由 li913 于 2017-1-3 16:13 编辑
1、我改了初始条件;2、tao参数不合适。把t1改成20后,第30个点随时间变化如图;
3、你的差分公式貌似不对。[Fortran] 纯文本查看 复制代码 program time_dependent_schrodinger_equation
implicit none
integer,parameter::M=150,N=500
real(8)::L=150d0, T1=20, hba=1d0,mu=0.5d0
integer::i,j
real,external::V !势能函数
real(8) ::psy2(m,n)
complex(8):: cj=cmplx(0.0,1.0), psy(M,N)
real(8)::h, tao, pi=3.1415926d0
h=L/M
tao=T1/N
!给出初始边界及初始值
psy = 0
psy2 = 0
do i=2,M-1
psy(i,1)=sin(2*pi/m*i) !!阱内给出初始值
end do
!中心差法解薛定谔方程
do j=1,N-1
do i=2,m-1
!psy(i,j+1)=psy(i,j)+cj*tao*((psy(i+1,j)-2*psy(i,j)+psy(i-1,j))/(h**2)-V(i)*psy(i,j)) !!核心内容,将中心差法代入薛定谔方程并整理
psy(i,j+1) = v(i)*psy(i,j) - (psy(i+1,j)-2*psy(i,j)+psy(i-1,j))/2.0/mu + cj*h/tao*psy(i,j)
psy(i,j+1) = psy(i,j+1) *tao/h/cj
psy2(i,j+1)=(abs(psy(i,j+1)))**2
end do
end do
do i=1,n
write(10,*) i,psy2(30,i)
end do
pause
end
!给出势函数
real function V(i)
implicit none
integer::i
v=0
if (abs(i-75)-5<1.e-6) then
V=10.
end if
end |