Matlab中的路径积分

时间:2011-06-04 13:46:05

标签: matlab path integral

我知道,与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

1 个答案:

答案 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