|
jojo23 |

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 22.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.07.2010, 12:21
Titel: LR-Zerlegung
|
 |
Hallo!
Ich LR-Zerlegung mit Skalierung und Spaltenpivotisierung mit Matlab erstellen. Stehe etwas aufn Schlauch! Kann mir da jemand helfen???
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 22.07.2010, 15:05
Titel:
|
 |
Hallo jojo,
was hast Du denn bisher geschrieben? Wo treten welche Schwierigkeiten auf?
Wenn Du schon Matlab dafür verwenden möchtest, würde ich direkt den Befehl LU benutzen. Effizienter geht es kaum.
Gruss Jan
|
|
|
jojo23 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 22.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.07.2010, 19:19
Titel:
|
 |
hallo jan!
danke für deine antwort! ich muss das programm erstellen. ich bin anfänger und kenn mich mit matlab nur wenig aus. kannst du mir bitte genauer beschreiben was du meinst bzw wie es funktioniert.
vielen dank!
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 22.07.2010, 20:44
Titel:
|
 |
Hallo Jojo,
Du schreibst, dass Du das Programm schreiben musst. Dafür gibt es sicherlich einen Grund. Lernst Du gerade Matlab oder hörst Du einen Kurs über Numerik? In beiden Fällen solltest Du entweder zumindest ansatzweise ein Programm esrtellen können. Wenn nicht, wird Dein Lehrer/Professor/Assistent dafür bezahlt Dir zu helfen und würde es sicher nicht nett finden, wenn ich die Aufgaben lösen würde.
Ich erwähnt den Befehl LU. Mehr kannst Du Dir dazu mit diesen Befehlen anzeigen lassen:
help lu
doc lu
Und natürlich kannst Du auch Google danach fragen.
Wenn Du dann angefangen hast zu schreiben, bekommst Du hier bei Problemen natürlich gerne Ratschläge.
Viel Erfolg und herzlich willkommen bei Matlab, Jan
|
|
|
jojo23 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 22.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.07.2010, 11:46
Titel:
|
 |
|
 |
|
hallo jan!
natürlich habe ich bereits angefangen und schon ein programm erstellt. ich habe ein programm für die gauss-elimination und für die zerlegung, weiß aber nicht wie ich die skalierung mit spaltenpivotisierung miteinbringe. dazu wollte ich eine nachiteration hinzufügen. ich habe erst einzelne programme erstellt und will diese nun kombinieren.
hier ist die gausselimination:
function x = gaussElim(A,b)
for k = 1 : size(A,2)
for i = k+1 : size(A,1)
if A(k,k) == 0
disp('Verfahren nicht durchführbar!');
return;
end
l = A(i,k) / A(k,k);
A(i, = A(i, - l * A(k, ;
b(i) = b(i) - l * b(k);
end
end
x = rueckw_einsetzen(A,b);
function x = rueckw_einsetzen(R,c)
n = size(R,1);
x = zeros(n,1);
x(n) = c(n) / R(n,n);
for k = n-1 : -1 : 1
x(k) = (c(k) - R(k, k+1:n) * x(k+1:n)) / R(k,k);
end
und hier die lr-zerlegung
function A = lr(A)
[n,n]=size(A);
for k=1:n-1
for i=k+1:n
A(i,k) = A(i,k)/A(k,k);
end
for i=k+1:n
for j=k+1:n
A(i,j) = A(i,j) - A(i,k)*A(k,j);
end
end
end
nun hänge ich an den oben beschriebenen sachen.
mfg
|
|
|
jojo23 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 22.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.07.2010, 12:29
Titel:
|
 |
hallo jan!
so jetzt habe ich das mit der pivotisierung hinbekommen. nun fehlt mir noch die skalierung und die nachiteration, hier stehe ich wirklich aufm schlauch.
mfg
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 23.07.2010, 14:16
Titel:
|
 |
Hallo Jojo,
sehr gut, es ist immer hilfreich zu sehen, was die Fragenden bereits gelöst haben.
Zur Nach-Iteration: Wenn Du "A*x = b" gelöst hast, indem Du A in L und R zerlegt hast, ist dies leider ja wegen der Rundungsfehler nicht mathematisch perfekt. Deswegen ergibt "d = b - L*R*x" d~=0.
Da man nun A bereits zerlegt hat, läßt sich dies sehr schnell lösen:
A*k = d = b - L*R*x
Das daraus erhaltene k addiert man nun zu x:
x2 = x + k;
Wenn man das 1 bis 3 mal durchführt, verschwindet k praktisch und x3 ist eine sehr genaue Lösung.
Es gibt verschiedene Möglichkeiten das Problem zu skalieren. Es wäre schön, wenn alle Elemente von A die gleiche Größen-Ordnung hätten, weil dann die Pivotisierung stabiler ist.
Gruß, Jan
|
|
|
jojo23 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 22.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.07.2010, 14:28
Titel:
|
 |
hallo jan!
besten dank! ich werde es mal probieren und mich dann nochmal melden!
mfg
|
|
|
|
|
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 - 2025
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.
|
|