2017-03-04 25 views
0

Ich versuche, den Maximalwert einer Funktion, um herauszufinden (hier ist es T (n)) durch diesen Code:Python: Maximum einer Funktion in einem Bereich

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) 

Aber ich erhalte eine Fehlermeldung "float" Objekt ist nicht iterierbar ". Jeder Vorschlag dazu wäre hilfreich für mich.

Bitte beachten Sie, dass "q" und "T (i)" als Funktionen von "i" definiert wurden und alle anderen Begriffe Konstanten sind.

Antwort

2

Die Funktion max gibt die maximalen Werte unter mehreren zurück, so dass Sie logischerweise mindestens zwei Werte als Parameter übergeben müssen, beispielsweise in einer Liste oder einem Tupel.
Ich schlage vor, Sie diese Lösung auf dem aktuellen Code basiert leicht verstanden werden: Verständnis

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) 

Um weiter zu gehen (und vielleicht besser), Liste ist in diesem Fall ebenfalls angepasst, wie Andrea in seiner Antwort ausführlich.

+0

Vielen Dank Laurent – Ashok

1

max nimmt eine iterable (zum Beispiel eines list, dict, str, etc.), so könnte es so etwas wie aussehen, max([1, 2, 3]) #=> 3. Ein übliches Muster besteht darin, ein Verständnis zu verwenden: max(f(x) for x in range(10)). Die Sache mit Comprehensions ist, dass sie einen einzelnen Ausdruck benötigen, also können Sie nicht die ursprüngliche Definition von Tn verwenden. Wenn Sie die Definition von Tn so erweitern, dass es sich um einen einzelnen Ausdruck handelt, erhalten Sie Tn = T(i) + (Dt/(rho*cp*0.1)) * (q(i-1) - q(1)). Verwenden Sie das im Verständnis und wir erhalten max(T(i) + (Dt/(rho*cp*0.1)) * (q(i-1) - q(1)) for i in range(2, imax-1)).

+0

Vielen Dank Andrea – Ashok

Verwandte Themen