2017-03-04 88 views
0

我試圖找出一個函數的最大值(這裏是T(n))的通過這個代碼:的Python:在一個範圍內的函數的最大

for i in range(2, imax-1): 
    Q=q(i-1)-q(i) 
    Tn=T(i)+(Dt/(rho*cp*0.1))*Q 
    y=max(Tn) 

但我得到一個錯誤「float」對象不可迭代「。任何有關這方面的建議都會對我有所幫助。

請注意,「q」和「T(i)」已被定義爲「i」的函數,並且所有其他項都是常數。

回答

2

max函數返回幾個中的最大值,因此您邏輯上需要傳遞至少2個值作爲參數,例如在列表或元組中。
我建議你根據你當前的代碼這個解決方案很容易理解:

y = None 
for i in range(2, imax-1): 
    Q=q(i-1)-q(i) 
    Tn=T(i)+(Dt/(rho*cp*0.1))*Q 
    if y is None: 
     y=Tn 
    else: 
     y=max(Tn,y) 

爲了進一步(也許更好)去,列表理解很適合在這種情況下,由安德烈在他的回答中詳述。

+0

非常感謝Laurent – Ashok

1

max需要一個迭代(例如list,dict,str等),所以它可能看起來像max([1, 2, 3]) #=> 3。一種常見的模式是使用理解:max(f(x) for x in range(10))。關於理解的事情是他們需要一個表達式,所以你不能使用Tn的原始定義。

如果將Tn的定義擴展爲單個表達式,我們將獲得Tn = T(i) + (Dt/(rho*cp*0.1)) * (q(i-1) - q(1))。在理解中使用它,我們得到max(T(i) + (Dt/(rho*cp*0.1)) * (q(i-1) - q(1)) for i in range(2, imax-1))

+0

非常感謝Andrea – Ashok