Fortran Coder

查看: 13075|回复: 13
打印 上一主题 下一主题

[其他行业算法] 差分法解一维含时薛定谔方程,急...

[复制链接]

799

帖子

2

主题

0

精华

大宗师

F 币
3797 元
贡献
2270 点
楼主
发表于 2017-1-2 20:04:43 | 显示全部楼层
需要U和miu的表达式

799

帖子

2

主题

0

精华

大宗师

F 币
3797 元
贡献
2270 点
沙发
发表于 2017-1-3 15:24:53 | 显示全部楼层
本帖最后由 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

QQ截图20170103160402.jpg (10.9 KB, 下载次数: 383)

QQ截图20170103160402.jpg

评分

参与人数 1贡献 +9 收起 理由
vvt + 9

查看全部评分

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-10 21:55

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表