我試圖找出一個函數的最大值(這裏是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」的函數,並且所有其他項都是常數。
我試圖找出一個函數的最大值(這裏是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」的函數,並且所有其他項都是常數。
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)
爲了進一步(也許更好)去,列表理解很適合在這種情況下,由安德烈在他的回答中詳述。
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))
。
非常感謝Andrea – Ashok
非常感謝Laurent – Ashok