1

Fortran や C と比較して、Matlab で Feynman path Integral を実行するのは時間がかかることを私は知っています。

しかし、誰かが経路積分による調和振動子のMatlabコードを持っていますか? 私はウェブ上で(そしてMatlabフォーラムでさえ)見つけることができませんでした。

Matlab に変換する方法がわからない Fortran コードの下 (私は初心者です) ありがとう、ジョニ

!         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 時間ステップの差よりもはるかに小さくなります)。

この MATLAB コードを GPU で実行すると、実際には FORTRAN または C の実装よりも高速になります (比較できるのは CUDA FORTRAN または CUDA C コードのみです)。

このコードについてさらに質問がある場合は、dattani.nike@gmail.com で作成者に電子メールを送信できます。

于 2012-08-18T14:17:04.913 に答える