Programmieraufgabe 5

Wichtig: Damit alle benötigten Pakete richtig eingebunden werden, führen Sie die nächste Zelle einmal aus, sobald Sie das Notebook neu öffnen.

In [61]:
# some setup
%matplotlib inline
import numpy as np 
import numpy.linalg as linalg 
import matplotlib.pyplot as plt 

Newton-Verfahren

(a) Schreiben Sie ein Programm zur iterativen Lösung nichtlinearer Gleichungssysteme $f(x) = 0$ mit Hilfe des Newton-Verfahrens, wobei $f: \mathbb R^2 \to \mathbb R^2$ stetig differenzierbar ist.

Der Aufruf des Programms soll mit \begin{equation} \texttt{X = newton}(\texttt{f, df, x0, tol, kmax}); \end{equation} erfolgen, mit den Eingabeparametern \begin{align} \texttt{f} \qquad &\text{Funktion } f(x), \\ \texttt{df} \qquad &\text{Jacobimatrix } Df(x) \text{ der Funktion }f, \\ \texttt{x0} \qquad &\text{Startvektor } x^{(0)} \text{ der Iteration}, \\ \texttt{tol} \qquad &\text{Fehlertoleranz}, \\ \texttt{kmax} \qquad &\text{maximale Anzahl Iterationen}, \end{align} und dem Ausgabeparameter \begin{align} \texttt{X} \qquad &\text{Matrix mit den Iterationen } x^{(0)}, x^{(1)}, \ldots \text{als Spalten, d.h. mit der Approximation der Nullstelle } x^*\text{ von }f\text{ in der letzten Spalte}. \end{align}

Dabei soll die Iteration abgebrochen werden, falls die maximale Anzahl Iterationen $\texttt{kmax}$ überschritten wurde oder \begin{equation} | f(x^{(k)} ) | + | x^{(k-1)} - x^{(k)}| < \texttt{tol} \end{equation} gilt.

$\textit{Hinweis:}$ Zur Lösung des linearen Gleichungssystems in jedem Schritt können Sie die $\texttt{solve}$-Funktion der $\texttt{linalg}$-Bibliothek benutzen. Die Lösung von $Ay=b$ wird mit dem Befehl 𝚕𝚒𝚗𝚊𝚕𝚐.𝚜𝚘𝚕𝚟𝚎(𝙰,𝚋) berechnet.

In [62]:
# Fuegen Sie hier Ihre Loesung ein.

(b) Gegeben sei das nichtlineare Gleichungssystem \begin{align} x_1^2 + x_2^2 - 4 = 0\, , \quad 5x_1^2 + x_2^2 - 7 = 0\, , \quad x_1,x_2 \in \mathbb R\, . \end{align} Führen Sie das Newton-Verfahren mit $\texttt{tol} = 10^{-8}$, $\texttt{kmax} = 50$ und verschiedenen Startwerten $x^{(0)}$ aus. Plotten Sie jeweils die Trajektorie der Iterationen. Um den Verlauf besser graphisch darzustellen, sollten Sie dabei die Größe oder die Farbe der Marker in Abhängigkeit von der Zahl der Iterationsschritte variieren.

Betrachten Sie insbesondere die Startwerte $x^{(0)} = (3,3)$ und $x^{(0)} = (3,-3)$. Was fällt Ihnen auf?

In [63]:
# Fuegen Sie hier Ihre Loesung ein.

(c) Finden Sie mit Hilfe des Programms eine Nullstelle zu \begin{equation} x_1 + e^{-x_1} + x_2^3 = 0\, , \quad x_1^2 + 2x_1x_2 - x_2^2 + \tan(x_1) = 0\, , \quad x_1,x_2 \in \mathbb R\, . \end{equation} Wählen Sie $\texttt{tol} = 10^{-8}$, $\texttt{kmax} = 100$ und plotten Sie wieder die Trajektorie der Iterationen.

Probieren Sie unterschiedliche Startwerte $x^{(0)}$ aus.

In [64]:
# Fuegen Sie hier Ihre Loesung ein.