Ich habe fast keine Ahnung von Matlab, kann mir hier jemand helfen:
Programmieraufgabe:
a) Schreiben Sie die MATLAB-Funktion NewtonV(x0,tol,maxiter)
, welche für eine fest vorgegebene Funktion \( f : \mathbb { R } ^ { n } \rightarrow \mathbb { R } ^ { n } \) ausgehend vom Startwert \( x0 \in \mathbb { R } ^ { n } \) solange Newton-Iterationen durchführt, bis das Abbruchkriterium \( \left\| x _ { k + 1 } - x _ { k } \right\| _ { 2 } \leq \text { tol } \) erreicht wurde oder eine maximale Anzahl an Iterationen maxiter
überschritten wurde. Die Funktion soll in \( z \in \mathbb { R } ^ { n } \) die letzte Newton-Iterierte, in iter
∈ ℕ die Anzahl der durchgeführten Iterationen sowie eine Variable \( b \in \{ 0,1 \} \) (die 0 ist, falls die maximale Anzahl Iterationen erreicht wurde, sonst 1) zurückgeben.
Verwenden Sie als Approximation der Jacobimatrix die zentrierten Differenzen
$$\frac { \partial f _ { i } } { \partial x _ { j } } \approx \frac { f _ { i } \left( x + e _ { j } h \right) - f _ { i } \left( x - e _ { j } h \right) } { 2 h }$$
mit h = 10^{-6}. Die Funktion f soll dabei in einer separaten MATLAB-Funktion f(x)
für Eingabewerte \( x \in \mathbb { R } ^ { n } \) und Rückgabewerte \( y = \left( f _ { 1 } ( x ) , \ldots , f _ { n } ( x ) \right) ^ { T } \in \mathbb { R } ^ { n } \) umgesetzt werden und so aufgestellt sein, dass mit obiger Funktion eine Lösung des folgenden Gleichungssystems (mit n = 2) ermittelt werden kann:
$$\begin{array} { r } { x _ { 1 } ^ { 2 } + x _ { 2 } ^ { 2 } + \frac { 3 } { 5 } x _ { 2 } = \frac { 4 } { 25 } } \\ { x _ { 1 } ^ { 2 } - x _ { 2 } ^ { 2 } + x _ { 1 } - \frac { 8 } { 5 } x _ { 2 } = \frac { 7 } { 50 } } \end{array}$$
Die MATLAB-Funktionen sollen dabei folgende Gestalt haben:
function [z,iter,b] = NewtonV(x_0,tol,maxiter)
...
end
function [y] = f(x)
...
end
b) Schreiben Sie das MATLAB-Skript main_NV.m
, welche ausgehend von den Startwerten (1,1)T und (-1,-1)T unter Verwendung der MATLAB-Funktion NewtonV
jeweils ausgibt, ob das Newton-Verfahren konvergiert ist, wie die Approximation an die Lösung lautet und wie viele Iterationen dazu benötigt wurden. Hierbei sei maxiter = 100
und tol = 10^(-5)
.
Mein Ansatz:
x = 2 % Startwert
j = 5 % Anzahl der Durchläufe
for i = 1:j % Beginn der Schleife
fx = x2 - 2; % Funktion
dx = 2*x; % Ableitung der Funktion
x = x - fx/dx % Berechnung
end
Aber man darf denk ich ja nicht die normale Iterationsformel verwenden, sondern diese Approximation oder nicht?