2014-06-12 49 views
1

的我的形式最小化的功能,同時保持一些變量恆定

def tmp(x,n): 
    R, s, a, T = x[0], x[1], x[2], x[3] 

它返回一個浮子,計算的一個長塊後的函數。

我需要最小化此功能和用於我使用了scipy.optimize.minimize():

minimize(tmp,[0,0,3,60000], args=(n,),tol =1e-15) 

上面的代碼查找的最小功能TMP()與起始值的如圖所示。

現在我需要最小化相同的函數tmp,但保留變量R,T超出最小化作爲參數。換句話說,我希望函數可以這樣寫:

def tmp(x,n,R,T): 
     s, a = x[0], x[1] 

怎麼可能創造像上述的功能,而無需編輯我的第一個功能?

回答

0

不知道什麼IST在功能上會使其難以測試的東西...... 你在哪裏定義R,S,A和T ...裏面功能?

couldn't你寫一個函數,如:

def tmp(x,n,cons): 
     if cons is False:#case 1 
      R, s, a, T = x[0], x[1], x[2], x[3] 
     elif cons is True:#case 2 
      R=0 #change them if you want 
      T=60000 
      s, a = x[0], x[1] 
     #your calculations 
     #... 

比你要記住,你的 「最小化」 擁有像她那樣的情況下,一個(!):

minimize(tmp,[0,0,3,60000], args=(n,cons),tol =1e-15)#where args is (2,False) for example 

和像情況2這樣:

minimize(tmp,[0,3], args=(n,cons),tol =1e-15)#where args is (2,True) 
+0

謝謝,這看起來更像我的想法。我在定義行後面的tmp(x,n)中定義了R,s,a,T,如我的第一篇文章所示。希望這會起作用。對不起,但我不能在這裏發佈整個函數(一個36x36的微分方程組),因爲它適用於我正在使用的客戶端。 – milia

+0

它的工作原理:)非常感謝! – milia

+0

請將我的答案標記爲已接受,如果這能解決您的問題:) @milia – Hiatus

1

默認情況下它是不可能的。你需要給tmp(x,n,R,T)一個不同的名字。

這是可能的,雖然使用multimethod library

+0

謝謝,我會看看multimethod庫。我試圖避免重寫tmp作爲一個新功能,因爲這意味着我將不得不復制許多代碼塊,這對我來說似乎毫無意義。 – milia

+0

您可以使用默認參數def'tmp(x,n,R = None,T = None):'。根據「R」和「T」的值,你的工作方式不同。 –

+0

如果我這樣做,我將不得不改變第一個功能,我想保留它們兩個。 – milia

相關問題