9. Nichtlineare Gleichungen

In diesem Kapitel soll es um das Lösen nichtlinearer Gleichungen gehen.

Bisektionsverfahren

Als einfachstes Verfahren zur Lösung skalarer nichtlinearer Gleichungen wollen wir das Bisektionsverfahren (vgl. Vorlesung) zunächst auf ein Polynom, dessen Nullstellen wir auch analytisch bestimmen können anwenden.

Finden sie die Nullstellen des Polynoms x^2 - 1=0

Nun wollen wir alle Lösungen der Gleichung 4*cos(x)=ln(x) finden. Dazu plotten Sie zunächst die beiden Funktionen um geeignete Intervallgrenzen für die Bisektion zu finden.

Newtonverfahren

Skalare Gleichungen

Wenden Sie das Newton-Verfahren mit verschiedenen Startwerten auf die skalaren Gleichungen an. Wie schnell konvergiert das Verfahren? Was beobachten Sie ?

Nichlineare Systeme

Zunächst wollen wir an dem simplen System für 2 Unbekannte x_1 und x_2 das Newtonverfahren testen. Stellen Sie dazu die Jacobimatrix auf und implementieren Sie das Verfahren. Wählen Sie als Startwert einen Punkt in der Nähe von (1,1)..

Als nächstes wollen wir das Verfahren an einen System mit zwei Lösungen testen, nämlich das System

Untersuchen Sie für verschiedene Startwerte gegen welche der beiden Lösungen das Newtonverfahren konvergiert.

Matlabs fsolve-Funktion

Nun wollen wir den nichlinearen Solver fsolve von Matlab kennenlernen.

Lesen sie zunächst die Doku https://de.mathworks.com/help/optim/ug/fsolve.html und setzen Sie dann obige Beispiele damit um.

Nichlineare Regression

Wie schon bei der Linearen Regression haben wir eine Punktwolke, die durch eine Funktion mit (noch) unbekannten Parametern gefittet werden soll. Diesmal sind die Parameter aber nichtlinear verbunden, wir verwenden als Beispiel die Funktion

y=a_1*sin(a_2*x)+a_3*cos(a_4*x) für n Punkte (x_1,y_1) ... (x_n,y_n).

Dazu wieder die Punktwolke: nonlin1.txt und das Bild

Kann man mit fsolve dieses Problem lösen ?

Da die Punkte verrauscht sind, werden wir das Nullstellenproblem nicht exakt lösen können.

Aber wir können versuchen den Fehler ( f(x_1)-y_1 )^2 + ... + ( f(x_n)-y_n )^2 zu minimieren, dazu gibt es Matlabs lsqnonlin-Funktion:
https://de.mathworks.com/help/optim/ug/lsqnonlin.html

Machen Sie sich mit dieser Funktion vertraut und lösen Sie das Regressionsproblem.

Plotten Sie Punktwolke und Regressionsfunktion in einen Plot.