2014-11-02 50 views
0

我有一個python程序,它接受一堆值並計算粒子的自旋作爲輸出。該程序不是一個功能,所以沒有輸入。我被告知要單獨優化三個不同的值(只改變一個值,而另一個值不變),以產生該粒子自旋的y分量的優化輸出。我認爲我需要做的事情是將這個程序變成一個函數,我希望優化的值是輸入。然後我想我需要創建一個新函數來遍歷輸入的所有可能值以產生我想要的輸出。例如,我需要優化偶極磁鐵的長度。在現實生活中,旋轉的y分量應該爲-1,但我需要精確到小數點後10位(-.99​​99999999)。如何優化偶極磁鐵長度的值以使y-旋轉的值精確到小數點後10位?如何優化我的python程序的輸出

+1

你可以提供一些關於你的代碼的更多信息嗎?它是一個線性腳本嗎?如果是這樣,你可以很快將它變成一個功能。如果你有這個功能,你可以看看'scipy.optimize'找到最佳的scipy.optimize:http://docs.scipy.org/doc/scipy-0.14.0/reference/optimize.html – tvandenbrande 2014-11-02 21:36:00

+0

@tvandenbrande I對不起,我真的不是很熟悉編程,所以我不知道它是否是線性腳本。那是什麼意思? – Spencer 2014-11-02 21:57:27

+0

你在python中使用類嗎?如果沒有,那麼你可能使用線性腳本。你可以把你的代碼放在這裏,以便我們看看它嗎? – tvandenbrande 2014-11-02 21:58:47

回答

1

如果我是正確的,你計算S [1],S [2]和S [3]是否正確?試着讓你得到像重寫代碼:

def getSpin(L1,L2,d): 
    ...all your calculations will be done here.. 
    # return the value of S[2] minus the goal value, optimization can find 0 
    return S[2]-1.0 

爲了優化結果,使用scipy.optimize -package和S上評價[2]。爲此,請確保您的機器上安裝了scipy。下面的代碼是我的第一個建議,因此尚未經過測試/調試,所以請查看documentation of the solver。在這個代碼中x0和邊界需要填入。如果你將某個參數的最小值和最大值設置爲相等,那麼解算器將把該參數固定爲該值,並且只改變其他參數。

from scipy.optimize import minimize 

x0=(0.203, 5.653, 0.189089089089089) # your initial guess 
bounds=((l1min,l1max),(l2min,l2max),(dmin,dmax)) # the minimum and maximum values for each parameter 

res=minimize(getSpin,x0,method=‘SLSQP’,args=(),bounds=bounds,tol:1e-10) 
#res.x contains the optimized values for L1,L2 and d 
+0

非常感謝! – Spencer 2014-11-02 23:16:51

+0

沒問題。如果答案有效,請接受它,以便其他人知道這是一個可行的解決方案。 – tvandenbrande 2014-11-03 07:53:55