2011-06-04 76 views
0

积分我知道,这样做Feynman路径Matlab的积分是耗时比较Fortran语言或C路径在Matlab

然而,做别人通过路径积分有谐振荡器的Matlab代码? 我没有设法找到任何网络上(甚至在Matlab论坛上)。

下面一个Fortran代码,我不知道怎么翻译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

是否有C/Fortran语言代码可用?你可以尝试将其转换为MATLAB?或者你有没有试过自己写?向我们展示你已经尝试过... – abcd 2011-06-04 14:32:07

+0

hi Yoda,我在Fortran中找到了一个代码,虽然我不知道如何将它转换为Matlab(我是新手)。 – user783973 2011-06-04 16:45:39

+1

没问题,我们在某个时候都是新手。最好的学习方法是自己尝试。所以请尝试翻译,然后您可以使用您编写的MATLAB代码更新该问题,并寻求有关您所面临的特定问题的帮助。你可以使用[MATLAB的优秀文档](http://www.mathworks.com/help/index.html)来指导你。 – abcd 2011-06-04 17:06:58

回答

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代码能够比较)更快。

如果您对这个代码,您可以通过电子邮件笔者在[email protected]更多的问题