我知道,与Fortran或C相比,在Matlab上进行Feynman路径积分是非常耗时的。
但是,有没有人通过路径积分获得谐波振荡器的Matlab代码? 我没有在网上找到任何东西(甚至在Matlab论坛上)。
下面的Fortran代码,我不知道如何翻译成Matlab(我是新手) 谢谢,Joni
! qmc . f90 : Feynman path i n t e g r a l for ground s t a t e wave Function
Program qmc
Implicit none
Integer :: i,j , max , element , prop ( 100 )
Real *8 :: change , ranDom , energy , newE , oldE , out , path ( 100 )
max = 250000
open ( 9 , FILE = ’qmc.dat’ , Status = ’Unknown’ )
! initial path and probability
Do j = 1 , 100
path (j) = 0.0
prop (j) = 0
End Do
! find energy of initial path
oldE = energy(path , 100)
! pick random element , change by random
Do i = 1 , max
element = ranDom ( )*100 + 1
change = ((ranDom() - 0.5)*2)
path (element) = path(element) + change
newE = energy ( path , 100) ! find new energy
! Metropolis algorithm
If ((newE > oldE) .AND. (exp( - newE + oldE ) < ranDom ())) then
path (element) = path (element) - change
EndIf
! add up probabilities
Do j = 1 , 100
element = path(j)*10 + 50
prop (element) = prop(element) + 1
End Do
oldE = newE
End Do
! write output data to file
Do j = 1 , 100
out = prop(j)
write (9 , *) j - 50 , out/max
End Do
close (9)
Stop ’data saved in qmc.dat’
End Program qmc
! Function calculates energy of the system
Function energy ( array , max )
Implicit none
Integer :: i , max
Real*8 :: energy , array (max)
energy = 0
Do i = 1 , (max - 1)
energy = energy + (array(i+ 1) - array(i))**2 + array(i)**2
End Do
Return
End
答案 0 :(得分:1)
这是一个用于计算MATLAB中的Feynman积分的开源代码:http://arxiv.org/pdf/1205.6872v1.pdf,可以在任何普通CPU上运行,在GPU上运行得更快。
由于它只使用编译为机器代码的极其高效的内置MATLAB函数,因此预计它不会比FORTRAN或C慢得多(请记住,计算Feynman积分的计算成本相对于时间步数,这意味着FORTRAN,C和MATLAB在许多情况下都会很慢,并且它们之间的差异将远小于采用12个时间步和13个时间步之间的差异。
如果你在GPU上运行这个MATLAB代码,它实际上会比FORTRAN或C实现更快(只有CUDA FORTRAN或CUDA C代码才能比较)。
如果您对此代码有更多疑问,可以发送电子邮件至dattani.nike@gmail.com