Newton-Verfahren, mehrere Unbekannte

 
  • Das Newton-Verfahren ist das bekannteste Verfahren zur Lösung nichtlinearer Gleichungssysteme f(x) = f(x1,...,xn) = 0 mit f : Rn --> Rn.
    f ist hier also eine Vektorfunktion f(1),...,f(n) .
  • Man kann das Verfahren herleiten, indem man 0 = f(x*) um die aktuelle Iterierte (x) Taylor-entwickelt, nach der ersten Ableitung abbricht und nach (x*) auflöst. Dabei ergibt sich ein lineares Gleichungssystem mit der Jacobimatrix der Vektorfunktion f(x) als Matrix, -f(x) als rechter Seite und einer Richtung d = (dx1,...,dxn) (der sog. Newton-Richtung) als Lösung. Die nächste Iterierte ergibt sich dann als (x)neu = (x)alt + s*d. Dies setzt (ausser der Differenzierbarkeit) natürlich auch voraus, daß die Jacobimatrix in einer Umgebung der (bzw. einer) Lösung invertierbar ist und daß der Startwert in dieser Umgebung liegt. Die Schrittlänge s wird so bestimmt, daß die mit der laufenden inversen Jacobimatrix gewichtete euklidische Norm von f monoton abnimmt:
    ||inverse(Jf(x))f(x+s*d)||^2<=(1-s*0.01)||inverse(Jf(x))f(x)||^2
    s wird erst in der Nähe der Lösung gleich eins.
  • Das Verfahren ist anwendbar auf beliebig viele nichtlineare Gleichungen mit gleich vielen Unbekannten.
  • Bei diesem Programm wird mit einem Gleichungslöser für vollbesetzte Matrizen gearbeitet, grosses n macht also keinen Sinn. Die Jacobi-Matrix wird mittels automatischer Differentiation (JAKEF aus NETLIB) bestimmt. Daher dürfen Sie hier keine Erweiterungen des MILSTD 1753 (do--enddo, do while -- enddo, tan, tanh ..) benutzen.
 

Die Eingaben

 
  • Bei diesem Programm können Sie die nichtlineare Gleichung selbst definieren.
    Hierzu ist die Eingabe der Dimension n (Wichtig: 1 <= n <= 50 !)
  • und die Spezifizierung der Funktionen f(1),...,f(n) mittels eines FORTRAN-Programmcode erforderlich. Hierbei werden die Variablen mit x(j), j=1,...,n bezeichnet. Außerdem können Sie Hilfsgrößen x1h,....,x9h, die bereits mit Null initialisiert sind, sowie die Konstanten pi und sqrt2 verwenden.
  • Weitere Eingaben: Startwert xstart = x(1),...,x(n),
  • gewünschte relative Genauigkeit eps in der Lösung und
  • die maximale Schrittanzahl maxstep (Wichtig: 1 <= maxstep <= 1000 !)
  • Für die Ausgabe sind noch die folgenden Informationen wichtig:
    Wie genau soll das Fehlerprotokoll ausgegeben werden? (0=Nein,...,3=ausführlich)
  • Wie umfangreich soll das Iterationsprotokoll ausgegeben werden? (0=Nein,...,4=ausführlich)
  • Wie detailliert soll die Lösung ausgegeben werden?
  • Soll die Rechenzeit ausgegeben werden?
 

Die Ausgaben

 
  • Falls erwünscht: Das Fehler- und das Iterationsprotokoll,
  • die Lösung und
  • die Rechenzeit.
 

Fragen ?!

 
  • In welchen (Start)-Punkten kann es zu Problemen kommen ?
  • Woher kommen diese Probleme rechnerisch ?
  • Worauf ist also bei der Wahl des Startpunktes unbedingt zu achten ?
  • Was geschieht, wenn die Jacobimatrix schlecht konditioniert ist?
  • Findet man immer die dem Startwert nächstgelegene Lösung ?
 

Das Eingabeformular

 
 

Zurück: Nichtlineare Gleichungssysteme

 
Back to the top!

01.12.2010