LR zerlegung mit Tridiagonalma < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 21:47 Mi 20.05.2009 | Autor: | tony1v |
Aufgabe | Lineare Gleichungssysteme mit Tridiagonalmatrix
a) LR-Zerlegung, Vorw¨arts- und R¨uckw¨artssubstitution
Betrachtet werden lineare Gleichungssysteme Ax = b mit einer regulären Tridiagonalmatrix.
Um Speicherplatz zu sparen, werden die drei besetzten Diagonalen in einer (3 × n)-Matrix
abgelegt.
Leiten Sie den Algorithmus der LR-Zerlegung einer Tridiagonalmatrix ohne Pivotsuche her,
d.h. f¨ur Matrizen, die keine Elemente gleich null auf der Hauptdiagonalen verursachen. Es
gilt dann A = LR mit unterer normierter Dreiecksmatrix L und oberer Dreiecksmatrix R.
Schreiben Sie eine Funktion in MATLAB, welche diese LR-Zerlegung einer Tridiagonalmatrix
ausf¨uhrt. Die LR-Zerlegung kann dabei in der gleichen (3×n)-Matrix abgespeichert werden,
in der urspr¨unglich A vorliegt. Man beachte, dass die Matrix L nur Einsen auf der Diagonale
besitzt, die daher nicht abgespeichert werden m¨ussen.
Die Funktion soll folgende Form besitzen:
function A = tridi_lr(A)
% LR-Zerlegung einer Tridiagonalmatrix
% Eingabeparameter:
% A n*n-Tridiagonalmatrix in 3*n-Matrix gespeichert
% Ausgabeparameter:
% A LR-Zerlegung von A in gleicher 3*n-Matrix gespeichert
Die Ordnung n des Gleichungssystems kann innerhalb der Funktion mit dem Befehl size aus
dem Eingangsparameter ermittelt werden.
Die Funktion soll mit einer Fehlermeldung (Befehl disp) abbrechen, falls ein Pivotelement
(d.h. ein Element auf der Hauptdiagonalen) null wird.
Formulieren Sie desweiteren eine Funktion, die aus der LR-Zerlegung von A und der rechten
Seite b mittels Vorw¨arts- und R¨uckw¨artssubstitution die L¨osung x berechnet.
Die Funktion soll dabei den folgengen Aufruf enthalten:
function x = tridi_vwrw(Z,b)
% Vorwaerts- und Rueckwaertssubstitution mit LR-Zerlegung
% einer Tridiagonalmatrix
% Eingabeparameter:
% Z LR-Zerlegung von n*n-Tridiagonalmatrix in 3*n-Matrix gespeichert
% b rechte Seite des linearen Gleichungssystems
% Ausgabeparameter:
% x Loesung des linearen Gleichungssystems
|
Für die speicherung der n*n matrix habe ich das programm geschrieben aber der tut gar nicht
function T = TR(A)
[n,n] = size(A);
B=zeros(3,n);
for i=1:n-1
for j=2:n
B(1,j) =A(i,j) ;
end
end
return;
und für die zerlegung klapt schon mit diesem Program
function [L,R] = LR(A)
%------------------------------------------------------------------
% Berechnet eine LR-Zerlegung (Gauss-Elimination).
% Eingabe: A nxn-regulaere Matrix.
% Ausgabe: L nxn-untere Dreiecksmatrix, R nxn-obere Dreiecksmatrix.
%------------------------------------------------------------------
[n,n] = size(A);
for k=1:n-1
A(k+1:n,k) = A(k+1:n,k)/A(k,k);
A(k+1:n,k+1:n) = A(k+1:n,k+1:n)-A(k+1:n,k)*A(k,k+1:n);
end
R = triu(A);
L = eye(n,n) + tril(A,-1);
aber mit die speicherung auf 3*n matrix klapt leider nicht?
wie kann ich aus die beide program ein program machen vielen Dank
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 22:20 Mi 27.05.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|