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
是否有C/Fortran语言代码可用?你可以尝试将其转换为MATLAB?或者你有没有试过自己写?向我们展示你已经尝试过... – abcd 2011-06-04 14:32:07
hi Yoda,我在Fortran中找到了一个代码,虽然我不知道如何将它转换为Matlab(我是新手)。 – user783973 2011-06-04 16:45:39
没问题,我们在某个时候都是新手。最好的学习方法是自己尝试。所以请尝试翻译,然后您可以使用您编写的MATLAB代码更新该问题,并寻求有关您所面临的特定问题的帮助。你可以使用[MATLAB的优秀文档](http://www.mathworks.com/help/index.html)来指导你。 – abcd 2011-06-04 17:06:58