WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Newton Verfahren

 

katerwolfi
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.06.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2023, 07:24     Titel: Newton Verfahren
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.06.2023, 08:05     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
katerwolfi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.06.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2023, 08:13     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.06.2023, 12:27     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.