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