Lösen Lgs mit LR-Zerlegung < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 22:16 Fr 03.11.2017 | Autor: | eule357 |
Hallo ich versuche folgende Aufgabe zu lösen:
a.)Erstellen Sie je eine Matlab-Funktion zur Lösung eines gestaffelten linearen Gleichungssystem mit einer unteren bzw. oberen Dreiecksmatrix.
b.)Schreiben Sie eine Matlab-Funktion, die die LR-Zerlegung einer regulären Matrix A berechnet. Gehen Sie davon aus, dass in der LR-Zerlegung keine Zeilenvertauschungen behandelt werden müssen.
c.) Erstellen Sie ein Matlab-Programm, welches mit Hilfe der LR-Zerlegung das lineare Gleichungssystem Ax=b löst. Verwenden Sie die Matlab-Funktionen aus a.) und b.). Ausgegeben werden soll A,b, die Matrizen L und R der LR-Zerlegung und der Lösungsvektor x.
d.) Teste dein Programm mit einem Beispiel.
Mir ist leider nicht klar ob meine Bearbeitung von a.) und b.) richtig sind und falls ja wie ich diese dann für c.) benutzen muss?
Hier mal was ich bisher habe:
%a.)
clear all;
A=[2,4,1;1,2,4;4,1,2];
b=[13,17,12];
funktion(x)=forwardSub(A,b);
%A ist eine untere Dreiecksmatrix
%Vorwaertssubstitution zur Lösung von Ax=b
[m,n]=size(A);
s=length(b);
if m~=n
error('A ist keine quadratische Matrix')
end
if ((s~=m) || (s~=n))
[mm] error('dim(A)\=dim(x)') [/mm]
end
x=zeros(n,1);
x(1)=b(1)/A(1,1);
for j=2:n; % j-te Zeile
summe=0;
for k=1:j-1
summe=summe+A(j,k)*x(k);
end
x(j)=(b(j)-summe)/A(j,j);
end
L=A;
save forwardSub
%end;
funktion(x)=backwardSub(A,b);
%A ist eine obere Dreiecksmatrix
%Rückwärtssubstituion zur Lösung von Ax=b
c=b;
[m,n]=size(A);
s=length(c);
if m~=n
error('A ist keine quadratische Matrix')
end
if ((s~=m) || (s~=n))
[mm] error('dim(A)\=dim(x)')
[/mm]
end
x=zeros(n,1);
x(n)=c(n)/A(n,n);
for j=n-1:-1:1 % j-te Zeile
summe=0;
for k=j+1:n
summe=summe+A(j,k)*x(k);
end
x(j)=(c(j)-summe)/A(j,j);
end
x;
A=R;
save backwardSub
%b.)
funktion(L,R)=LR(A);
%Aufgabe 2
%a.)
clear all;
funktion(x) = forwardSub(A,b);
%A ist eine untere Dreiecksmatrix
%Vorwaertssubstitution zur Lösung von Ax=b
[m,n]=size(A);
s=length(b);
if m~=n
error('A ist keine quadratische Matrix')
end
if ((s~=m) || (s~=n))
[mm] error('dim(A)\=dim(x)') [/mm]
end
x=zeros(n,1);
x(1)=b(1)/A(1,1);
for j=2:n; % j-te Zeile
summe=0;
for k=1:j-1
summe=summe+A(j,k)*x(k);
end
x(j)=(b(j)-summe)/A(j,j);
end
A=L;
save forwardSub
%end;
funktion(x)= backwardSub(A,b);
%A ist eine obere Dreiecksmatrix
%Rückwärtssubstituion zur Lösung von Ax=b
c=b;
[m,n]=size(A);
s=length(c);
if m~=n
error('A ist keine quadratische Matrix')
end
if ((s~=m) || (s~=n))
[mm] error('dim(A)\=dim(x)')
[/mm]
end
x=zeros(n,1);
x(n)=c(n)/A(n,n);
for j=n-1:-1:1 % j-te Zeile
summe=0;
for k=j+1:n
summe=summe+A(j,k)*x(k);
end
x(j)=(c(j)-summe)/A(j,j);
end
x;
R=A;
save backwardSub
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:12 Sa 04.11.2017 | Autor: | leduart |
Hallo
so ein Programm durchzusehen ist mühsam, auch wenn ich es geschrieben hätte würde ich es einfach an einem Beispiel erst mal testen, indem man ein paar print Befehle einbaut dazu sitzt man doch am Computer?
Gruß leduart
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:19 Sa 04.11.2017 | Autor: | Diophant |
Hallo leduart,
> so ein Programm durchzusehen ist mühsam, ...
nichts für ungut: aber genau dafür sind doch die hiesigen Unterforen für Mathesoftware und Programmiersprachen da?
Könntest du die Frage wenigstens wieder auf 'unbeantwortet' stellen?
Gruß, Diophant
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:27 Sa 04.11.2017 | Autor: | leduart |
Hallo Diophant
Danke, hab ich gemacht, du hattest recht, das sollte ne Mitteilung sein, keine Antwort.
Gru0 ledum
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 22:20 Mo 06.11.2017 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|