Интеграл по путям в Matlab - PullRequest
1 голос
/ 04 июня 2011

Я знаю, что создание интеграла пути Фейнмана на Matlab отнимает много времени по сравнению с Fortran или C.

Однако, есть ли у кого-нибудь код Matlab гармонического осциллятора через интеграл по траектории? Мне не удалось найти ничего в Интернете (и даже на форуме Matlab).

Ниже кода на Фортране, который я не знаю, как перевести на Matlab (я новичок) Спасибо, Джони

!         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 Ответ

1 голос
/ 18 августа 2012

Это открытый исходный код для вычисления интегралов Фейнмана в MATLAB: http://arxiv.org/pdf/1205.6872v1.pdf, который может работать на любом обычном процессоре и намного быстрее на графическом процессоре.

Поскольку он использует только чрезвычайно эффективные встроенные функции MATLAB, которые скомпилированы в машинный код, он не будет значительно медленнее, чем FORTRAN или C (учитывая, что вычислительные затраты на вычисление интегралов Фейнмана масштабируются экспоненциально по отношению к количество временных шагов, означающее, что FORTRAN, C и MATLAB все будут медленными во многих случаях, и различия между ними будут намного меньше, чем разница между выполнением 12 временных шагов и 13 временных шагов).

Если вы запустите этот код MATLAB на графическом процессоре, он будет на самом деле быстрее, чем реализация на FORTRAN или C (только код CUDA FORTRAN или CUDA C сможет сравнивать).

Если у вас есть дополнительные вопросы по поводу этого кода, вы можете написать автору по адресу dattani.nike@gmail.com

...