Aufgabe: Hey ich soll ein Matlab Programm zu folgender Aufgabe schreiben:
Mit Hilfe des Newton-Verfahrens bestimme man Näherungslösungen des Gleichungssystems
x+y+z = 3 x2+y2+z2 =5
ex+xy−xz = 1.
Für jede der beiden zu approximierenden exakten Lösungen (x∗,y∗,z∗) = (0,1,2) und (x∗,y∗,z∗) = (0,2,1) wähle man geeignete Startvektoren (x0,y0,z0). Man verwende entsprechende Matlab-Befehle zur Lösung der enstehenden linearen Gleichungssysteme. In einer Tabelle gebe man zu wachsendem Iterationszähler n die Komponenten der Näherung (xn, yn, zn) an, ferner die Norm des entsprechenden Defektvektors sowie die Norm des Fehlervektors zur exakten Lösung (x∗,y∗,z∗). Als Norm ist dabei die Euklidische Norm zu wählen. Das Newton-Verfahren soll abgebrochen werden, wenn die Norm des Fehlers kleiner als 10^−12 ist. Man vergleiche die Konvergenzeigenschaften der Iterationen für die beiden exakten Lösungen.
Problem/Ansatz:
Für die erste exakte Lösung habe ich folgenden Ansatz kann mir jemand sagen was dort fehlt oder falsch ist?
% Newton-Verfahren zur Lösung des Gleichungssystems
format long
% Funktionen und deren partielle Ableitungen
% Das rechnet die erste Funktion aus.
f1 = @(x, y, z) x + y + z -3;
% Diese drei stellen die Ableitungen der ersten Funktion dar
df1_dx = @(x, y, z) 1; %@ sagt ist von der Variable abhängig
df1_dy = @(x, y, z) 1;
df1_dz = @(x, y, z) 1;
f2 = @(x, y, z) x^2 + y^2 + z^2 -5;
df2_dx = @(x, y, z) 2*x;
df2_dy = @(x, y, z) 2*y;
df2_dz = @(x, y, z) 2*z;
f3 = @(x, y, z) exp(x) + x*y - x*z -1;
df3_dx = @(x, y, z) exp(x) + y - z;
df3_dy = @(x, y, z) x;
df3_dz = @(x, y, z) -x;
% Newton-Verfahren
tolerance = 1e-12; % Abbruchtoleranz
% Erste exakte Lösung (0, 1, 2)
x_ex= (0; 1; 2)'
% Startvektor (x0, y0, z0)
xold = (0.1, 1.1, 1.9)
X = [x0; y0; z0]; % Anfangswert
n = 0; % Iterationszähler
disp('Erste exakte Lösung (0, 1, 2):')
disp(' n x y z ||F(X)|| ||X - X*||')
while true
% Auslesen aus xold
x= xold(1);
y= xold(2);
z= xold(3);
%1. Newton Schritt
F = [f1( x,y,z); f2( x,y,z); f3(x,y,z)];
J = [df1_dx(x,y,z); df1_dy(x,y,z); df1_dz(x,y,z);
df2_dx(x,y,z); df2_dy(x,y,z); df2_dz(x,y,z);
df3_dx(x,y,z); df3_dy(x,y,z); df3_dz(x,y,z)];
v = J\ F; % Löse das lineare Gleichungssystem J * v = F(X)
xnew = xold - v;
error_norm = norm(F);
solution_error_norm = norm(x - [0; 1; 2]);
fprintf('%2d %10.12f %10.12f %10.12f %10.12f %10.12f\n', n, X, error_norm, solution_error_norm);
xold = xnew %Vorbereitung nächster Itertionsschritt
if error_norm < tolerance
break;
end
n = n + 1;
end
iterations_solution1 = n + 1; % Anzahl der Iterationen für die erste Lösung
error_solution1 = solution_error_norm; % Fehler der ersten Lösung