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 [2]:
# 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: R^n \to R^n$ stetig differenzierbar ist.

Der Aufruf des Programms soll mit \begin{equation} \texttt{[x,X] = newton}(\texttt{f, df, x0, tol, kmax}); \end{equation} erfolgen mit den Eingabeparametern \begin{align} \texttt{f, df} \qquad &\text{Funktion } y = f(x), \text{ bzw. Jacobimatrix } J = f'(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 der Iterationen} \end{align} und Ausgabeparameter \begin{align} \texttt{[x, X]} \qquad &\text{Approximation der Nullstelle } x^*, f(x^*) = 0, \\ &\text{und Folge der Iterierten } x^{(0)}, x^{(1)}, \ldots \text{ in den Spalten der Matrix } X. \end{align}

Dabei soll die Iteration abgebrochen werden, falls die maximale Iterationszahl $\texttt{kmax}$ überschritten wurde oder \begin{equation} \| f(x^{(k)} ) \|_2 + \| x^{(k-1)} - x^{(k)}\|_2 < \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 Hilfe der πš•πš’πš—πšŠπš•πš-Bibliothek und dem Befehl πš•πš’πš—πšŠπš•πš.πšœπš˜πš•πšŸπšŽ(𝙰,πš‹) berechnet.

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

(b) 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 R\, . \end{equation} Wählen Sie $\epsilon = 10^{-8}$, $kmax = 100$ und probieren Sie unterschiedliche Startwerte $x^{(0)}$ aus, z.B. $x^{(0)} = (-1,-1)$.

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

(c) Gegeben sei das nichtlineare Gleichungssystem \begin{align} 3x_2 = 0\, , \quad x_1^2 + \frac{2x_2}{x_2 + 5} = 0\, , \quad x_1,x_2 \in R\, , \end{align} dessen eindeutig bestimmte Lösung $(x_1,x_2) = (0,0)$ ist. Führen Sie das Newtonverfahren mit Startwert $x^{(0)} = (1,0)$ aus (z.B. mit Fehlertoleranz $\epsilon = 10^{-8}$, $kmax = 50$).

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