Das Levenberg-Marquardt-Verfahren

 
  • Das Levenberg-Marquardt-Verfahren ist ein Verfahren zur Lösung nichtlinearer Ausgleichsaufgaben. Hier wird zu einem Satz von Daten ti,yi eine Funktion (Fit) f(t,x) gesucht, so daß die Summe der Fehlerquadrate S(x) = ||F(x)||22 minimal wird. Die Komponenten des Vektors F(x) sind dabei die "Fehler" Fi(x) = f(ti,x) - yi. Die Funktion f(t,x) kann nichtlinear vom ''Parametervektor'' x abhängen.
  • Ausgehend von einem Startvektor x0 wird iteriert: xk+1 = xk+dk.
    Hierbei ist dk die Lösung einer ungleichungsrestringierten linearen Ausgleichsaufgabe:
    ||F(xk) + JF(xk)d ||2 = mind mit ||Dkd|| <= deltak (Dk ist hier eine Diagonalmatrix mit positiven Einträgen)
  • JF ist die Jacobimatrix von F und wird mittels des Vorwärtsdifferenzenquotienten angenähert. Der sogenannte "Vertrauensbereichradius" deltak wird adaptiv aus der Übereinstimmung zwischen den Differenzen ||F(xk)||2-||F(xk+1)||2 und ||F(xk)||2-||F(xk) + JF(xk)dk ||2 gesteuert. rho in der graphischen Ausgabe (3. Bild) ist der Quotient zwischen diesen Differenzen. Mit rho nahe bei 1 wird deltak vergrößert, sonst verkleinert.
  • Die Lösung des restringierten linearen Ausgleichsmodells führt schliesslich auf ein Gleichungssystem
    2(ATA+lambda*Dk)dk = -grad(||F(x)||2)
    mit A = JF(xk) und x=xk. Dabei hängt lambda von deltak ab. lambda = 0 ergibt das Gauss-Newton-Verfahren. Durch diese Steuerung wird auch die Behandlung einer rangdefizienten Jacobimatrix möglich, die Konvergenz ist aber für lambda ungleich null immer sehr langsam.
  • Hier wird die Implementierung von Jorge J. More verwendet.
 

Die Eingaben

 
  • Einzugeben ist die Anzahl n der Koeffizienten der Funktion f. (also dim(x).) Wichtig : 1 <= n <= 10 !
  • Die Anzahl m der Datenpunkte. Wichtig : 1 <= m <=100 und n <= m !
  • Die Datenpunkte (m Einträge der Form t(i),y(i), wobei mindestens n der t(i) verschieden sein müssen.)
  • Der Shift, um den t(i) transformiert werden soll. tti = t(i) - shift. Achtung: Die Funktion hängt von tti und nicht von t(i) ab. Shift=0 muss angegeben werden.
  • Die Funktion f. Hierbei muß darauf geachtet werden, daß die Funktion von den Koeffizienten x(k), k=1,...,n, und von der transformierten Variablen tti = t(i) - shift abhängt. Es ist also die Formel von f(tti,x(1),...,x(n)) einzugeben.
  • Desweiteren die Startwerte der x(k), k=1,...,n.
  • Sie können entweder Standardabbruchkriterien wählen oder eigene Kriterien angeben. Letzteres bedeutet dann noch die Angabe von Abbruchtoleranzen bezüglich x, dem Residuum und der Änderung in der Fehlerquadratsumme.
 

Die Ausgaben

 
  • Ausgegeben wird eine Graphik, welche den dekadischen Logarithmus von ||F(xk)||-||Fmin|| darstellt. Hierbei bedeutet der Wert -99 "null".
  • Eine Graphik mit dem dekadischen Logarithmus des maximalen Winkels zwischen Residuum und Spalten der Jacobimatrix. (-20 bedeutet "null".) Dies ist der sogenannte skalierte Gradient. Außerdem ist noch der dekadische Logarithmus von deltak dargestellt.
  • Und eine dritte Graphik zeigt die dekadischen Logarithmen von rho und lambda. Auch hier bedeutet -20 "null" bzw. -unendlich.
 

Das Eingabeformular

 
 

Zurück: Unrestringierte Minimierung

 
Back to the top!

09.03.2009