我有一個討厭的不連續2維積分I(k,k''; J,Jp,a,b,c,d)
,它有4個變分參數(a,b,c,d)
和2固定常數(J,Jp)
。找到積分的過程並不簡單,並且有第一步。查找函數I(a,b,c,d)積分的四維最小值(a,b,c,d)
我需要找到從
-pi
根(mu
)到一維積分到pi
A = Integrate [ 1/(exp(E(k; a,b,c,d)-mu)+1 ] dk/2pi = 0.5
,其中
E
是由平方根和餘弦的複雜函數。在發現畝,我需要
J
,Jp
提供找到4D(全球)最低(a,b,c,d)
值此二維積分(同-pi
到pi
限制)。result(J,Jp) = Minimum[ Integrate [ I(J,Jp;k,k''; a,b,c,d,mu) ] dk/2pi dk''/2pi ]
的複雜功能I
基本上看起來像
I(J,Jp;k,k''; a,b,c,d,mu) = A(k)*A(k'')*f(a,b,c,d)*[J cos(k+k'') + Jp cos(k-k'')]
我已經完成了第一步,與a,b,c,d
假定值發現mu
,但我不知道該如何去任意他們的價值。除了嵌套所有的lambda函數之外還有其他方法嗎?即便如此,我如何去嵌套lambda函數來完成我所需要的功能呢?
beta=100.0
a=1.2
b=1.5
c=0.1
d=0.5
findmu = lambda mu: integrate.quad(lambda k:1.0/(2.0*pi)*1.0/(exp(beta*(0.5*(c+d-2.0*(1.0+b)*cos(k)-sqrt(32.0*(b*cos(k/2.0))**2.0+(c-d-2.0*(1-b)*cos(k))**2.0))-mu))+1.0)-0.5/(2.0*pi), -pi,pi)
mu0 = optimize.fsolve(findmu,0.0)
我有用Mathematica編寫的程序,但它需要很長時間才能獲得最小值,並且有時是錯誤的。我想嘗試將它移植到我目前正在學習的Python。謝謝!
編輯:關於物理系統的更多信息:第一步是通過強制填充系統找到量子系統的費米能級。利用費米能級,人們可以找到變分參數使Hartree-Fock系統的基態能量最小化。
(1)你能不能給這兩個方程?我想我可以看到E是什麼 - 我認爲你錯過了a)來自你的findmu系列 - 但是(2)它看起來像E有時會很複雜。那是對的嗎? – DSM 2012-02-21 05:47:37
E有時可能很複雜,但第一步基本上強加一個約束,使得E不會很複雜。所有的參數都是真實的(實際上它試圖解決一個物理系統)。我編輯了原始文章以包含E的實際形式。可以看出,它非常複雜。我需要最小化的函數_I_可以認爲是E的平方形式乘以[J cos(k + k'')+ Jp cos(k-k'')] – CKtalon 2012-02-21 06:18:18