matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenMatlabLR-Zerlegung
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Philosophie • Religion • Kunst • Musik • Sport • Pädagogik
Forum "Matlab" - LR-Zerlegung
LR-Zerlegung < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

LR-Zerlegung: Hilfe, Korrektur
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 17:22 Mo 29.10.2012
Autor: Mija

Aufgabe
Wir sollen die LR-Zerlegung implementieren.


Hallo,

ich habe die LR-Zerlegung bereits implementiert. Hier ist mal mein Code:

function [L,R,p] = LRZerl(A)
% Das ist die LR-Zerlegung der Matrix A.

n=size(A,1); % Anzahl Zeilen
p=[1:n]';
for j=1:n-1
     m=j;
     %Pivotisierung
     for i=j:n % i-te Zeile
          if abs(A(p(i),j)>abs(A(p(j),j)))
             m=i;
             absajj=abs(A(p(i),j));
          end
     end
     %vertausche Zeile j und Zeile m in A
     pm=p(m);
     p(m)=p(j);
     p(j)=pm;
     %Elimination
     for i=j+1:n % i-te Zeile
          aij=A(p(i),j)/A(p(j),j);
          for k=j+1:n
               A(p(i),k)=A(p(i),k)-aij*A(p(j),k);
          end
          A(p(i),j)=aij;
     end
end
R=triu(A(p,:));
L=eye(n)+tril(A(p,:),-1);
end


Nun soll ich allerdings die p's innerhalb der A's wegmachen und stattdessen Zeilenvertauschungen noch einfügen.
Ich habe schonmal die p's weggemacht, allerdings stecke ich fest, wie ich die Zeilenvertauschungen hinbekomme, so dass auch alles wieder ordentlich funktioniert.
Hier mein Code ohne p's in den A's:

function [L,R,p] = LRZerl(A)
% Das ist die LR-Zerlegung der Matrix A.

n=size(A,1); % Anzahl Zeilen
p=[1:n]';
for j=1:n-1
    m=j;
    %Pivotisierung
    for i=j:n   % i-te Zeile
        if abs(A(i,j)>max(abs(A(j,j))))
            m=i;
           absajj=abs(A(i,j));
        end
    end
    %vertausche Zeile j und Zeile m in A
    pm=p(m);
    p(m)=p(j);
    p(j)=pm;
    %Elimination
    for i=j+1:n   % i-te Zeile
        aij=A(i,j)/A(j,j);
        for k=j+1:n
            A(i,k)=A(i,k)-aij*A(j,k);
        end
    A(i,j)=aij;
    end
end
R=triu(A(p,:));
L=eye(n)+tril(A(p,:),-1);

end


Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte! :)

        
Bezug
LR-Zerlegung: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:50 Mo 29.10.2012
Autor: Mija

Ich habe es bis jetzt folgendermaßen gelöst:

function [L,R,p] = LRZerl(A)
% Das ist die LR-Zerlegung der Matrix A.

n=size(A,1); % Anzahl Zeilen
p=[1:n]';
for j=1:n-1
    m=j;
    %Pivotisierung
    for i=j:n   % i-te Zeile
        if abs(A(i,j))==max(abs(A(i,j)))
            m=i;
            %absajj=abs(A(i,j));
        end
    end
    for i=j:n
        pm=A(m,i);
        A(m,i)=A(j,i);
        A(j,i)=pm;
    end
    %vertausche Zeile j und Zeile m in A
    pm=p(m);
    p(m)=p(j);
    p(j)=pm;
    %Elimination
    for i=j+1:n   % i-te Zeile
        aij=A(i,j)/A(j,j);
        for k=j+1:n
            A(i,k)=A(i,k)-aij*A(j,k);
        end
    A(i,j)=aij;
    end
end
R=triu(A);
L=eye(n,n)+tril(A,-1);

end


Allerdings stimmt die Reihenfolge der Einträge in der ersten Spalte bei mir nicht. Ich habe folgendes Beispiel genommen:

>> A=[2 4 1; 1 2 4; 4 1 2];
>> L=LRZerl(A)

R =

    4.0000    1.0000    2.0000
         0    3.5000         0
         0         0    3.5000


L =

    1.0000         0         0
    0.2500    1.0000         0
    0.5000    0.5000    1.0000



Eigentlich müsste hier

L =

    1.0000         0         0
    0.5000    1.0000         0
    0.2500    0.5000    1.0000

rauskommen.


Wo ist mein Fehler?

Bezug
                
Bezug
LR-Zerlegung: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 10:27 Di 30.10.2012
Autor: Mija

Kann mir denn wirklich niemand weiterhelfen?

Bezug
                
Bezug
LR-Zerlegung: Antwort
Status: (Antwort) fertig Status 
Datum: 16:20 Mi 31.10.2012
Autor: wieschoo

hi,

ich zerpflück einfach mal deinen Programmcode.
Die Zeile
abs(A(i,j))==max(abs(A(i,j)))
macht nichts weiteres als, einen Wert mit sich selber vergleichen. Du pivotisierst immer die letzte Zeile nach oben.
1: for i=j:n 
2:         pm=A(m,i); 
3:         A(m,i)=A(j,i); 
4:         A(j,i)=pm; 
5:     end 

Hier kopierst du wirklich jeden Eintrag? Man kann komplette Zeilen kopieren oder gar tauschen.
Ehrlicherweise weiß ich auch nicht genau, wo in dem Teil der Elimination der Fehler steckt. Ich habe manch einmal auch große Problem die Zugriffe auf das Array nachzuvollziehen.
Zum Glück muss man nicht mit den ganzen Indizies herumhandtieren.

Ich habe deinen Code etwas abgeändert, sodass er läuft:
http://pastebin.de/30566

gruß
wieschoo

Bezug
        
Bezug
LR-Zerlegung: Antwort
Status: (Antwort) fertig Status 
Datum: 16:21 Mi 31.10.2012
Autor: wieschoo

Siehe andere Antwort
https://matheraum.de/read?i=922439

Bezug
                
Bezug
LR-Zerlegung: feste Mantissenlänge
Status: (Frage) beantwortet Status 
Datum: 15:55 Sa 23.02.2013
Autor: henrymrl

Aufgabe
Erstellen Sie eine Prozedur zur LU-Zerlegung bei fester Mantissenlänge, ohne bzw.
mit Spaltenpivotstrategie.

Hallo,
ich habe die LR-Zerlegung ebenfalls selbst programmiert und mir ein paar Ideen aus den oben beschriebenen Quelltexten geholt (da ich Matlab erst seid einer Woche benutze).
Ich habe ebenfalls ein Programm geschrieben, mit dem die Mantissenlänge einer Float-Zahl "beschnitten" werden kann.
Das Problem ist, diese beiden Programme zusammenzuführen.
Meine Vermutung ist, das Matlab die Operation zeilenweise ausführt, mein Rundungs-Programm aber nur einzelne Zahlen verarbeitet.

Das ist der Quelltext für die Rundungs-Routine:
function [y]=runden(x,t)
k=0;
while floor(x)==0
    x=x*10;
    k=k-1;
end
x=x/10;
k=k+1;

if x>0  
        while (x>1)
           x=x/10;
           k=k+1;
         end
    [mm] x=x*(10^t); [/mm]
    x=round(x);
    [mm] y=x/(10^t); [/mm]
elseif x<0
    x=x*(-1);
        while (x>1)
           x=x/10;
           k=k+1;
        end
    [mm] x=x*(10^t); [/mm]
    x=round(x);
    [mm] y=(x/(10^t))*(-1); [/mm]
end
[mm] y=y*(10^k); [/mm]
end


und so wird die Routine aufgerufen:
U(k+1:n,k)=runden((U(k+1:n,k)/U(k,k)),t);
U(k+1:n,k+1:n)=runden((U(k+1:n,k+1:n)-runden((U(k+1:n,k)*U(k,k+1:n)),t)),t);


Für jede Hilfe bedanke ich mich bereits  im Voraus.

Bezug
                        
Bezug
LR-Zerlegung: Antwort
Status: (Antwort) fertig Status 
Datum: 10:18 Mo 25.02.2013
Autor: wieschoo

Moin,

dann ändere doch deine Funktion zum Runden, indem du alles, was du bisher gemacht hast in eine Schleife

for i=1:length(x)
   % bearbeite x(i)
end

steckst und x zurück lieferst.

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]