Lösen Lgs mit LR-Zerlegung < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 08:02 Di 09.05.2017 | Autor: | Noya |
Aufgabe | Ziel der Aufgabe ist Gleichungssysteme zu lösen, verwenden Sie dazu die LR-Zerlegung von letzter Woche ohne Pivotisierung. Desweiteren kommen folgende Teilprogramme hinzu:
(a) Eine Vorwärtssubstitution z = forward (L,b)
(b) Eine Rückwärtssubstitution x = backward(R,z)
(c) Ein Hauptprogramm x=solveLGS(A,b), das alle obigen Programme verwendet, um das lineare Gleichungssystem Ax = b für A [mm] \in \IR^{nxn} [/mm] und b [mm] \in \IR^n [/mm] zu lösen. |
Hallo ihr Lieben,
ich bin totaler Neuling in Matlab und habe einige Schwierigkeiten meine Gedanken umzusetzen.
1. LR-Zerlegung
function [L,R]=lr(A)
%Bestimmt LR Zerlegung von A,s.d A=L*R mit L untere Dreiecksmatrix, mit 1 auf der Diagonalen und R %obere Dreiecksmatrix.
R = A;
[n,m] = size(A);
L = eye(n); %Einheitsmatrix
if n~=m
error('Die Matrix ist nicht quadratisch')
end
if R(n,n) == 0 %letzte Element muss extra geprüft werden
error ('Die Matrix ist nicht ohne Pivotisirung oder Permutation LR-zerlegber');
end
for i=1:n-1
for k=i+1:n
if R(i,i) == 0
error ('Die Matrix ist nicht ohne Pivotisirung oder Permutation LR-zerlegber');
else
L(k,i) = R(k,i) / R(i,i);
for j = i : n
R(k,j) = R(k,j) - L(k,i)*R(i,j);
end
end
end
end
das ist meine Funktion für die LR-Zerlegung. Sie funktioniert fehlerfrei.Sicherlich kann man das verschönern, aber ich verstehe das so.
2.Vorwärtselimination
function [z] = forward( L, b ) %Löse L*z=b
N=size(L); %L [mm] \in [/mm] z [mm] \in \IR^{NxN}
[/mm]
z=1:N; %soll die Dimension von z angeben z [mm] \in \IR^N
[/mm]
b=1:N; &soll die Dimension von b angeben b [mm] \in \IR^N
[/mm]
for i=1:N
z(i)=b(i);
for k=1:i-1
z(i)= z(i)-L(i,k)*z(k);
end
end
Was ist hier falsch?
ich habe mir zur hilfe einfach mal eine 3x3-matrix genommen und z berechnet. so erhalte ich, dass
[mm] z_i=b_i-\sum^{i-1}_{k=1}l_{i,k}*z_k [/mm] und [mm] z_1=b_1
[/mm]
3.Rückwärtselimination
function [x] = backward( R, z ) % Löse z=Rx
n=size(R); %dim von R
for i=n:-1:1 %von n rückwärts bis zur 1.
x(i)=z(i);
for k=i+1:n
x(i)=x(i)-R(i,k)*x(k);
end
x(i)=x(i)/R(i,i);
end
Könnt ihr mir helfen was hier falsch ist?
[mm] x_n=\bruch{z_n}{r_{i,i}} [/mm] ist und [mm] x_i=\bruch{1}{r_{i,i}}*(z_i-\sum^{n}_{k=i+1}r_{i,k}*x_k)
[/mm]
4.Gesamtes Lösungsverfahren
function x = solveLGS( A, b ) %Löse Ax=b
%A LR-zerlegbar
A=input('Eingabe von A: ');
b=input('Eingabe von b: ');
[L,R]=lr(A)
hier würde ich gerne später drüber diskutieren wenn ich 2. und 3. hinbekommen habe.
Vielen Dank und liebe Grüße
Noya
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 08:20 Fr 12.05.2017 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|