|
katerwolfi |
Forum-Newbie
|
|
Beiträge: 2
|
|
|
|
Anmeldedatum: 26.06.23
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2023, 07:24
Titel: Newton Verfahren
|
|
|
|
|
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) x2 + y2 + z2 -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
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.06.2023, 08:05
Titel:
|
|
Hallo,
du hattest ja schon eine sehr ähnliche Frage gestellt. Das ist aber halt recht vage.
Zitat: |
kann mir jemand sagen was dort fehlt oder falsch ist? |
Woraus schließt du denn, dass etwas fehlt oder falsch ist?
Im MATLAB Editor ist der Code Analyzer integriert, der über orange oder rote Markierungen Probleme mitteilt. Hier: zum Erstellen von Vektoren wie x_ex und xold müssen [ ] statt ( ) verwendet werden. Ich würde zudem konsequent Zeilen- oder Spaltenvektoren verwenden.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
katerwolfi |
Themenstarter
Forum-Newbie
|
|
Beiträge: 2
|
|
|
|
Anmeldedatum: 26.06.23
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2023, 08:13
Titel:
|
|
weil er mir nur leere Tabellen darauf hin zeigt. Ich bin ehrlich ich habe wirklich kaum Kenntnisse in MATLAB und habe versucht mit dem was ich gefunden habe bzw in den Vorlesungen hatte die Aufgabe zu lösen, aber weiß nicht wirklich wie es geht.
Der Dozent meinte wir sollen es mit einer Vorschleife versuchen hat uns aber nicht gezeigt wie ich diese anwende bzw. programmiere
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.06.2023, 12:27
Titel:
|
|
Hallo,
mich wundert, dass dir überhaupt Tabellen angezeigt werden.
Bei mir kommt direkt die Fehlermeldung
File: <...> Line: 26 Column: 9
Invalid expression. When calling a function or indexing a
variable, use parentheses. Otherwise, check for mismatched
delimiters.
Wie man das vermeidet, habe ich dir ja geschrieben.
Für Anfänger finde ich das MATLAB Onramp hilfreich.
https://matlabacademy.mathworks.com.....lab-onramp/gettingstarted
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|