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 ?
 

Das Eingabeformular: Variante Expo-Fit

 

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:
    1. Ein Intervall [a,b] für die Variable t, in dem die Daten erzeugt werden sollen.
    2. Die Anzahl m der Datenpunkte. Wichtig: np <= m <= 200 !
    3. 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:
    1. Die Anzahl m der Datenpunkte. Wichtig: np <= m <= 200 !
    2. 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 ?
 

Das Eingabeformular: Variante User-Fit

 
 

Zurück: Nichtlineare Gleichungssysteme

 
Back to the top!

08.01.2009