Gleichungssystem mit Newton < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 13:25 Sa 13.01.2007 | Autor: | nina7 |
Aufgabe | Mit Hilfe des Newton-Verfahrens löse man das Gleichungssystem
[mm] x + y + z = 3 [/mm]
[mm] x^2 + y^2 + z^2 = 5 [/mm]
[mm] e^x + xy - xz = 1 [/mm]
Als Startvektor wähle man [mm] (x_0,y_0,z_0) = (0,0,0) [/mm]. Für die Lösung der linearen Gleichungssysteme verwende man entsprechende MATLAB-Befehle. In einer Tabelle gebe man zu wachsendem Iterationszähler n die Komponenten der Näherung [mm] (x_n,y_n,z_n) [/mm] an, ferner die Norm des entsprechenden Defektvektors sowie die Norm des Fehlervektors zur exakten Lösung (x*,y*,z*)=(0,1,2). Als Norm ist dabei die Euklidische Norm zu wählen. Das Newton-Verfahren soll abgebrochen werden, wenn die Norm des Fehlers kleiner als [mm] 10^{-12} [/mm] ist. |
Habe das Newton-Verfahren angewendet und die Jacobi-Matrix gebildet. Dann habe ich das Gleichungssystem [mm] J(x_n)*(\Delta x) = - f(x_n) [/mm], wobei f(x) Funktionsvektor mit f(x)=0. Dann müsste [mm] x_{n+1} = x_n - \Delta x [/mm] sein.
Jetzt sagt mit MATLAB beim Lösen des Gleichungssystems:
Warning: Matrix is singular to working precision.
Hab es auch schon mit einer LU-Zerlegung versucht, aber die U-Matrix hat in der Diagonalen (unten) eine Null. Das wird wohl das Problem sein. Nun weiß ich nicht weiter. Oder ist der Ansatz schon verkehrt?
(Habe kaum Erfahrungen mit MATLAB!)
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Hallo,
ich verstehe nicht ganz, was du zu Beginn mit "Habe das Newton-Verfahren angewendet und..." meinst. Man sollte mit der analytischen Berechnung der Jacobi-Matrix beginnen. Oder habe ich da etwas verstanden.
Es wäre am besten, wenn du deinen Matlab-Code immer mit angeben könntest (am besten di Datei anhängen). Dann könnte man das leichter nachvollziehen.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:57 So 14.01.2007 | Autor: | nina7 |
Also ich habe in der Datei "Newton Problem.m" die Vorgehensweise reingeschrieben. Wenn ich den Startvektor mit (0,1,0) oder (0,0,2) wähle funktioniert das Programm, gibt aber keine Werte, die nahe der Lösung sind.
Ich habe auch leider eine sehr alte Version von Matlab, deshalb muss ich die Jacobimatrix eingeben, das Programm kennt die Funktion "jacobian" leider noch nicht.
Ich versuche mal, die m-Datei anzuhängen.
Dateianhänge: Anhang Nr. 1 (Typ: m) [nicht öffentlich]
|
|
|
|
|
Hallo,
dein Ansatz ist ok. Nur musst du berücksichtigen, dass Matlab nur numerische Berechnungen durchführt (außer mit der Symbolic Toolbox).
Das bedeutet, dass du die Berechnung von F und dF in die for-Schleife verschieben musst, direkt an den Anfang. Dann klappt es auch! Übrigens auch mit der lu-Funktion.
Allerdings klappt es auch bei mir nicht mit [0;0;0]. Ich habe mal [-0.1;0.1;0.1] ausprobiert.
Übrigens würde ich hier eher mit einer while-Schleife arbeiten. Die ist eher dafür gedacht als eine for-Schleife.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:22 So 21.01.2007 | Autor: | nina7 |
Vielen Dank für die Tipps!!! Hab es hinbekommen. Übrigens ist in der Aufgabenstellung der Startvektor falsch. Hat mir mein Dozent jetzt gesagt. Also konnte es damit gar nicht funktionieren. Ich habe den Startvektor jetzt auf (0,0,0.1) gesetzt, dann konvergiert das Verfahren sehr schnell.
Danke nochmal!
|
|
|
|
|
@ nina:
wär es möglich, dass du mir mal deinen gesamten Quelltext zukommen lassen kannst ?!
ich habe nämlich genau die selbe aufgabenstellung bekommen. wär dir sehr dankbar!
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:52 Sa 20.12.2008 | Autor: | leduart |
Hallo
Es ist nicht Sinn des forums sich fertige Lösungen zu erbitten. (Wenn du mogeln willst, frag direkt nen Mitstudi)
Du hast ja hier schon dem m file mit Verbesserungsvorschlag.
(Wenn nina das liest die Bitte auch an sie: keine fertigen HA in diesem forum )
Gruss leduart
|
|
|
|