|
Gauß-Newton-Verfahren |
|
- Das Gauß-Newton-Verfahren ist eine Methode der nichtlinearen
Ausgleichsrechnung. Dabei wird, ähnlich wie in der linearen
Ausgleichsrechnung zu einem Satz von Daten
(ti,yi) eine Funktion (Fit) f(x;t) gesucht,
so daß die Summe der Fehlerquadrate S(x) =
(1/2)*||F(x)||22 minimal wird. Die Komponenten des
Vektors F(x) sind dabei die "Fehler" Fi(x) = f(x;ti) -
yi. Die Funktion f(x;t) ist nichtlinear in
x.
- Um S(x) zu minimieren muß der Gradient von S(x) verschwinden.
Mit dem Newton-Verfahren würde man dazu
die Hessematrix (Matrix der zweiten Ableitungen) von S(x) verwenden,
um ein Gleichungssystem zu lösen. Diese Hessematrix lautet
Hesse(S(x)) = JF(x)TJF(x) + SUMi
Fi(x)* Hesse(Fi(x)).
Sie könnte indefinit sein, was zum Versagen der Minimierung führt.
- Beim Gauß-Newton-Verfahren wird als Iterationsmatrix lediglich die
bei vollem Rang von J positiv definite Matrix
JF(x)TJF(x) verwendet. Die
berechnete Gauß-Newton-Richtung lautet dann
d(x) = -(JF(x)TJF(x))-1
JF(x)TF(x)
- Diese Abstiegsrichtung für S(x) kann man aus einer lokalen
linearen Ausgleichsaufgabe berechnen, nämlich
||F(x) + JF(x)*d||22= mind .
Dies geschieht hier mit Hilfe der Householder-QR-Zerlegung von J(x).
- Um die Konvergenz zu sichern (durch ''hinreichende'' Verkleinerung
von S) benötigt man zusätzlich
eine Schrittweite t. Die neue Iterierte ergibt sich dann als
xneu = xalt+t·d.
- Die Schrittweite wird hier durch systematische Verkleinerung von s und
Interpolation (an S(x+t ·d)) bestimmt.
|
|
|
Es gibt zwei verschiedene Eingabeseiten: ein vorgefertigter
Fit mit Exponentialfunktionen und einen User-definierten Fit.
|
|
|
Die Eingaben: Variante Expo-Fit |
|
- Bei dieser Variante handelt es sich bei der Fit-Funktion f(x;t) um
die Summe von Exponentialtermen.
Fi(x)=a0 +
a1*exp(b1*ti) + .... +
an*exp(bn*ti) - yi wobei
x = (a0,a1,b1, ... ,an,bn)T.
- Einzugeben ist die Anzahl der Terme n.
- 2n+1 Koeffizienten
x = (a0,a1,b1,...,an,bn)T.
- Ein Intervall [a,b] für die Variable t, in dem die
Daten erzeugt werden sollen.
- Die Anzahl m der Datenpunkte. Wichtig: 2n+1 <= m <= 200 !
- Ein Fehlerlevel level. Wichtig: 0 <= level <= 1 ! Es weden dann
m Daten (ti,yi) erzeugt und mit
level gestört.
Anschließend werden Koeffizienten zu den
gestörten Daten berechnet.
Achtung: Exponentialfits sind notorisch bösartig!
Man kann sie interpretieren als Parameteridentifikationsproblem einer
linearen Differentialgleichung mit konstanten Koeffizienten , wenn die
''Lösung'' gegeben ist in Form diskreter Daten.
|
|
|
Die Ausgaben: Variante Expo-Fit |
|
- CPU-Zeit.
- Tabelle der Original- und der berechneten Koeffizienten.
- Fehlerquadratsumme durch die Datenstörung.
- Fehlerquadratsumme nach der Berechnung.
- Eine Graphik, die die Meßdaten und den Fit wiedergibt.
|
|
|
Fragen: Variante Expo-Fit ?! |
|
- Wie reagiert das Verfahren gegenüber einer Erhöhung des
Fehlerlevels ?
- Wie empfindlich sind die berechneten Koeffizienten
gegenüber Störungen der Eingabedaten ?
- Was geschieht, wenn zwei Exponenten fast zusammenfallen oder
der exponentielle Abfall sehr gering ist ?
|
|
|
|
|
|
Die Eingaben: Variante User-Fit |
|
- Bei dieser Variante kann die Fit-Funktion f(x;t) beliebig
gewählt werden.
- Sie haben hier die Möglichkeit, eigene Daten fitten zu lassen
(in diesem Fall werden Ihre Daten als Fitdaten genommen und die Eingabe
für x als Startwert) oder sich Daten vom Programm erzeugen zu
lassen.
Im letzteren Fall wird die x-Eingabe als wahrer Parametersatz interpretiert. Es wird dann
eine äquidistante Datenliste generiert. Diese Daten werden mit Zufallszahlen
überlagert (Störniveau "level" relativ bezogen auf den
größten Funktionswert)
und die gestörten Daten werden gefitted.
- Einzugeben ist np, die Anzahl der Koeffizienten x. Wichtig:
np <= 9 !
- Die Fit-Funktion f(x;t). Die Funktion hängt ab von
x(1),...,x(np) und t. Die Funktion muß nach
den Konventionen der Programmiersprache FORTRAN
eingegeben werden.
- Startvektor x(1),...,x(np) mit np Einträgen.
- Die partiellen Ableitungen der Funktion f(x;t) nach den
Koeffizienten x(1),...,x(np). Wichtig, um JF(x)
zu bestimmen. Eingabe wieder nach FORTRAN Konvention.
- Auswahl, ob Datenpunkte äquidistant gewählt und
anschließend um einen Fehlerlevel gestört werden sollen,
oder ob die Datenpunkte direkt eingegeben und mit diesen
gerechnet werden soll.
Im Fall der äquidistanten Datenpunkte:
- Ein Intervall [a,b] für die Variable t, in dem die
Daten erzeugt werden sollen.
- Die Anzahl m der Datenpunkte. Wichtig: np <= m <= 200 !
- Ein Fehlerlevel level. Wichtig: 0 <= level <= 1 ! Es werden dann
m Daten (ti,yi) erzeugt und mit
level gestört. Anschließend werden Koeffizienten zu den
gestörten Daten berechnet.
Direkte Eingabe der Datenpunkte:
- Die Anzahl m der Datenpunkte. Wichtig: np <= m <= 200 !
- Eintrag der Datenpunkte in ein Formular immer in der Form
t(i),y(i)
also z.B. 0,0 1,1 2,1.4 usw.
|
|
|
Die Ausgaben: Variante User-Fit |
|
- CPU-Zeit.
- Tabelle der Original- und der berechneten Koeffizienten.
- Fehlerquadratsumme durch die Datenstörung.
- Fehlerquadratsumme nach der Berechnung.
- Eine Graphik, die die Meßdaten und den Fit wiedergibt.
|
|
|
Fragen: Variante User-Fit ?! |
|
- Wie reagiert das Verfahren auf eine Erhöhung des
Fehlerlevels ?
- Wie empfindlich reagieren die berechneten Koeffizienten auf die
Störungen ?
- Wie hängen diese Effekte mit dem Ansatz zusammen ?
|
|
|
|
|
|
|