Python:范围内函数的最大值

时间:2017-03-04 07:43:41

标签: function range max

我试图通过以下代码找出函数的最大值(这里是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”的函数,所有其他术语都是常量。

2 个答案:

答案 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采用可迭代(例如listdictstr等),因此它看起来像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))

相关问题