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) 
      | 
     
    
   | 
  
 
 |   
  
   |