Ich muss ein normalisiertes Exponential eines Vektors in Matlab berechnen.Numerisch stabile Implementierung
einfach
res = exp(V)/sum(exp(V))
Überlauf in einem Element V Schreiben größer ist als log (Realmax) = 709,7827. (Ich bin mir nicht sicher über Unterlaufbedingungen.)
Wie sollte ich es implementieren, um numerische Instabilität zu vermeiden?
Update: Ich habe ausgezeichnete Antworten erhalten, wie man Überlauf vermeiden kann. Ich bin jedoch immer noch glücklich, Ihre Gedanken über die Möglichkeit des Unterlaufs im Code zu hören.
Dank. Ich bin neu bei bsxfun. Was ist, wenn V eine Matrix ist und wir möchten, dass dies entlang der Dimension dim gilt? – user25004
@ user25004 Wie wäre das? 'exp (V)' wäre dann eine Matrix und 'sum (exp (V), dim)' wäre ein Vektor. Wie definiert man 'exp (V)/sum (exp (V, dim))' in diesem Fall? –
Ich meine, wenn die Variable Dim 1 ist, möchte ich Ihren vorherigen Code auf jede Spalte angewendet werden. Wenn dim 2 ist, wird der Code zeilenweise angewendet. – user25004