Fortran Coder

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

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

[复制链接]

8

帖子

1

主题

0

精华

入门

F 币
50 元
贡献
24 点
跳转到指定楼层
楼主
发表于 2017-1-1 17:15:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
简单解释:偏微分,长得像倒e的那个符号,看作导数符号。基本就是差分法直接代替两个偏微分(一个一阶偏微分,一个二阶偏微分),化简一下,即得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))

先用Fortran写的程序,之后用origin画的图(图见附件),可是psy波函数解出来后应该是随时间而变化的,但我的基本没变化。(非物理方向专业可略去不看——这个方程类似一维热传导方程,只是相对多了一个虚数单位和一个psy函数,不知道会不会出现问题,方法二(未在图中展示)是我把psy(念为pusai)函数分解为实部和虚部,代回到薛定谔方程所得到的两个对应项的方程,然后仍旧是使用差分解法。)理论上两种方法基本没有区别,而实际上我的图也确实无异,但这更加使我疑惑,不知道问题出现在了哪里。
老师说我图像不对的原因是——M(空间的步数),N(时间的步数),Tao(即dx,空间步长)和h(即dt,时间步长)的值设置的不合理,而我试了一个晚上,终究还是没出来结果。其他考试临近,实在没太多时间执着于这个问题了,万望高人指点
[Fortran] 纯文本查看 复制代码
01program time_dependent_schrodinger_equation
02    implicit none
03    integer,parameter::M=150,N=500
04    integer::i,j
05    real*16::hba=1.,mu=1./2
06!hba即(普朗克常数/2/pi),mu为质量
07    real*16::l=150,T1=5
08    real,external::V !势能函数
09    real*16,dimension(M)::x,x1
10    real*16,dimension(N)::t,normalize,psy4
11    real*16,dimension(M,N)::psy2,psy3  !psy2为对复数psy取模并求其平方的大小,psy3,即为归一化后的波恩诠释下的概率。
12    complex*16,dimension(M,N)::psy
13    complex::cj
14    real*16::h,tao,pi
15    h=l/M
16    tao=T1/N
17    pi=asin(1.)*2
18    cj=(0.,1.)  !虚数单位
19!给出初始边界及初始值
20       do j=1,N
21        psy(1,j)=0
22        psy(M,j)=0 !边界设定为无限深势阱
23    end do
24    do i=2,M-1
25        x1(i)=i*h
26        psy(i,1)=exp(((-1)*(x1(i)*0.2-5)**2./2.)/(2.*pi))   !阱内给出初始值
27    end do                          !x(i)比着正常多乘上个0。2,平移了波的位置
28!中心差法解薛定谔方程
29    do j=1,N-1
30        do i=2,m-1
31            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))    !核心内容,将中心差法代入薛定谔方程并整理
32            psy2(i,j+1)=(abs(psy(i,j+1)))**2
33       !     write(13,*) psy2(i,j+1)
34        end do
35    end do
36!归一化
37    do j=2,n
38        normalize(j)=(sum(psy2(1:m,j)))!**0.5  
39    end do
40    do j=2,N
41        do i=2,m-1
42            x(i)=i*h
43            t(j)=j*tao
44            psy3(i,j)=psy2(i,j)/(normalize(j))!**2
45            write(13,*) x(i),t(j),psy3(i,j)
46        end do
47        psy4(j)=sum(psy3(1:M,j))
48    !    write(14,*) psy4(j)   !检验归一化的正确性
49    end do
50    stop
51    end
52!给出势函数
53real    function V(i)
54        implicit none
55        integer::i
56        v=0
57        if (abs(i-75)-5<1.e-6) then
58          V=10.
59        end if
60!   if abs(x-40)<3&abs(x-60)<3
61!   V=10
62        return
63end

5秒内psy的运动.png (18.17 KB, 下载次数: 717)

基本上就是初始值随t轴垂直于x轴平移,而理想中的应该不是垂直平移,而应该有一定的夹角 ... ...

基本上就是初始值随t轴垂直于x轴平移,而理想中的应该不是垂直平移,而应该有一定的夹角 ... ...

初始值.png (6.05 KB, 下载次数: 723)

正态分布式的初始psy(归一化之前的波函数)-x图像

正态分布式的初始psy(归一化之前的波函数)-x图像

Screenshot_2017-01-01-21-46-56_com.tencent.mtt_14.jpg (116.93 KB, 下载次数: 734)

一维薛定谔方程

一维薛定谔方程
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

8

帖子

1

主题

0

精华

入门

F 币
50 元
贡献
24 点
沙发
 楼主| 发表于 2017-1-1 21:57:26 | 只看该作者
这就是一维薛定谔方程,简单解释:偏微分,长得像倒e的那个符号,看作导数符号。基本就是差分法直接代替两个偏微分(一个一阶偏微分,一个二阶偏微分),化简一下,即得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))

Screenshot_2017-01-01-21-46-56_com.tencent.mtt_14.jpg (116.93 KB, 下载次数: 633)

Screenshot_2017-01-01-21-46-56_com.tencent.mtt_14.jpg

838

帖子

2

主题

0

精华

大宗师

F 币
3937 元
贡献
2339 点
板凳
发表于 2017-1-2 20:04:43 | 只看该作者
需要U和miu的表达式

8

帖子

1

主题

0

精华

入门

F 币
50 元
贡献
24 点
地板
 楼主| 发表于 2017-1-3 11:15:16 | 只看该作者
li913 发表于 2017-1-2 20:04
需要U和miu的表达式

我的u是以V的形式给的,miu是mu

838

帖子

2

主题

0

精华

大宗师

F 币
3937 元
贡献
2339 点
5#
发表于 2017-1-3 15:24:53 | 只看该作者
本帖最后由 li913 于 2017-1-3 16:13 编辑

1、我改了初始条件;2、tao参数不合适。把t1改成20后,第30个点随时间变化如图;
3、你的差分公式貌似不对。
[Fortran] 纯文本查看 复制代码
01program time_dependent_schrodinger_equation
02    implicit none
03    integer,parameter::M=150,N=500
04    real(8)::L=150d0, T1=20, hba=1d0,mu=0.5d0
05    integer::i,j
06    real,external::V !势能函数
07    real(8) ::psy2(m,n)
08    complex(8):: cj=cmplx(0.0,1.0), psy(M,N)
09    real(8)::h, tao, pi=3.1415926d0
10    h=L/M
11    tao=T1/N
12!给出初始边界及初始值
13    psy = 0
14    psy2 = 0
15    do i=2,M-1
16        psy(i,1)=sin(2*pi/m*i)   !!阱内给出初始值
17    end do                      
18 
19!中心差法解薛定谔方程
20    do j=1,N-1
21        do i=2,m-1
22            !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))    !!核心内容,将中心差法代入薛定谔方程并整理
23            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)
24            psy(i,j+1) = psy(i,j+1) *tao/h/cj
25            psy2(i,j+1)=(abs(psy(i,j+1)))**2
26             
27        end do
28    end do
29    do i=1,n
30      write(10,*) i,psy2(30,i)
31    end do
32pause
33    end
34!给出势函数
35real    function V(i)
36        implicit none
37        integer::i
38        v=0
39        if (abs(i-75)-5<1.e-6) then
40          V=10.
41        end if
42end

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

QQ截图20170103160402.jpg

评分

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

查看全部评分

59

帖子

2

主题

0

精华

大师

F 币
810 元
贡献
476 点
6#
发表于 2017-1-3 20:11:06 | 只看该作者
时间步长选着不合适
你可以找本时域有限差分法(FDTD)看看,
附件是一个解释


评分

参与人数 1贡献 +9 收起 理由
vvt + 9 赞一个!

查看全部评分

8

帖子

1

主题

0

精华

入门

F 币
50 元
贡献
24 点
7#
 楼主| 发表于 2017-1-5 12:07:16 | 只看该作者
li913 发表于 2017-1-3 15:24
1、我改了初始条件;2、tao参数不合适。把t1改成20后,第30个点随时间变化如图;
3、你的差分公式貌似不对 ...

麻烦你再推导一下你的公式,我推导过程如图。另外,我想要的是三维图像(x-t-psy的平方),当将你的数据输出修改后,图像差别太大。你为何把归一化条件给删掉了呢?

Screenshot_2017-01-05-12-02-43_com.miui.gallery.p.JPG (6.35 KB, 下载次数: 722)

Screenshot_2017-01-05-12-02-43_com.miui.gallery.p.JPG

8

帖子

1

主题

0

精华

入门

F 币
50 元
贡献
24 点
8#
 楼主| 发表于 2017-1-5 12:10:37 | 只看该作者
kerb 发表于 2017-1-3 20:11
时间步长选着不合适
你可以找本时域有限差分法(FDTD)看看,
附件是一个解释

我根据c(光速)=dx/dt作了图。M=15000,N=50,l=1500,T1=0.05,可是图像也并未移动。另外,在我的程序里,我应该是给光速暗含了重定义,并不等与传统的10**8量级,所以应该并不作影响吧?

8

帖子

1

主题

0

精华

入门

F 币
50 元
贡献
24 点
9#
 楼主| 发表于 2017-1-5 12:15:38 | 只看该作者
会不会边界条件已经暗示了我的波函数只能是驻波?
不知道为何,就连我给的热传导程序,也都是个静止的图像。
[Fortran] 纯文本查看 复制代码
01program main
02    implicit none
03    integer,parameter::M=150,N=500
04    real,dimension(M)::x,x1
05    real,dimension(N)::t
06    real,dimension(M,N)::y
07    integer::i,j
08    real::l=150,t1=5,pi,h,tao
09    pi=asin(1.)*2
10    h=l/m
11    tao=t1/n
12    do j=1,N
13        y(1,j)=0
14        y(m,j)=0
15    ENd do
16    do i=2,M-1
17        x1(i)=i*h
18        y(i,1)=exp(((-1)*(x1(i)*0.2-5)**2./2.)/(2.*pi))
19    end do
20    do j=1,n-1
21        do i=2,m-1
22            x(i)=i*h
23            t(j+1)=(j+1)*tao
24            y(i,j+1)=y(i,j)+tao*((y(i+1,j)-2*y(i,j)+y(i-1,j))/(h**2))
25            write(22,*) x(i),t(j+1),y(i,j+1)
26        end do
27    end do
28    end program

59

帖子

2

主题

0

精华

大师

F 币
810 元
贡献
476 点
10#
发表于 2017-1-5 19:56:19 | 只看该作者
你搜一下courant condition
双曲类偏微分方程差分法求解,对dx,dy,dt等有一定要求,你自己搜一下
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2025-5-1 21:14

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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