1

我知道在 Matlab 上进行 Feynman 路径积分与 Fortran 或 C 相比非常耗时。

但是,有人通过路径积分获得了谐振子的 Matlab 代码吗?我没有设法在网上找到任何东西(甚至在 Matlab 论坛上)。

下面是我不知道如何翻译成 Matlab 的 Fortran 代码(我是新手)谢谢, 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
4

1 回答 1

1

这是一个在 MATLAB 中计算费曼积分的开源代码:http ://arxiv.org/pdf/1205.6872v1.pdf ,它可以在任何普通 CPU 上运行,在 GPU 上运行速度更快。

由于它只使用编译为机器代码的极其高效的内置 MATLAB 函数,因此预计它不会比 FORTRAN 或 C 慢很多(请记住,计算费曼积分的计算成本随时间的数量呈指数增长步,这意味着 FORTRAN、C 和 MATLAB 在很多情况下都会很慢,并且它们之间的差异会比采取 12 个时间步和 13 个时间步的差异要小得多)。

如果您在 GPU 上运行此 MATLAB 代码,它实际上会比 FORTRAN 或 C 实现更快(只有 CUDA FORTRAN 或 CUDA C 代码能够比较)。

如果您对此代码有更多疑问,可以通过 dattani.nike@gmail.com 向作者发送电子邮件

于 2012-08-18T14:17:04.913 回答