我试图通过以下代码找出函数的最大值(这里是T(n)):
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”的函数,所有其他术语都是常量。
答案 0 :(得分: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)
为了更进一步(也许更好),列表理解在这种情况下得到了很好的适应,正如Andrea在他的回答中所详述的那样。
答案 1 :(得分: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))
。