|
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.
|
|
|
|
|
|
|