www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 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
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Uni-Numerik" - QR-Z. mit householder matlab
QR-Z. mit householder matlab < Numerik < Hochschule < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

QR-Z. mit householder matlab: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 15:45 Fr 08.06.2012
Autor: Katthi

Hallo Leute,

meine neue Aufgabe ist es, die QR Zerlegung mit Hilfe der Householder-Tranformatiin zu bestimmen.
habe auch schon einen amtlab code, aber wenn ich es mit beispielen teste, erhalte ich zwar die richtigen Dimensionen, aber nicht die richtigen Werte.
Wäre super, wenn ihr mal drüberschauen könntet.

Außerdem wird mir immernoch ein ans ausgegebn, obwohl ich überall ein Semikolon gesetzt habe. das ans gibt mir nochmal die Matrix Q aus.

function [Q,R] = qr_householder(A);

% Berechnung von Q und R

[m,n]=size(A); % Bestimmen der Größe von A, m Zeilen & n Spalten

Q = eye(m); % Q als m x m Einheitsmatrix initialisieren

    for i=1:(m-1) % Initialisierung einer Schleife mit der Zählvariablen i,
                  % die von 1 bis m-1 (Anzahl Zeilen - 1) läuft

        x = A(i:m,i); % Festlegen des jeweiligen Spaltenvektors auf den         Vektor x

        v = x; % Duplizieren von x auf v (Householder Vektor)

        v(1) = x(1) + sign(x(1)) * norm(x);
        % Bestimmen des jeweiligen Householder Vektors
    % dabei ändert sich nur das erste Element v(1) des Vektors v
    % man verwendet das signum(x1) um Auslöschung zu vermeiden,durch norm(x)
    % verwenden wir die euklidische Norm das "+ sign..." erhält man durch die
    % Konstruktion aus der Vorlesung durch sigma = - sign(x1)*norm(x)

    Q(i:m,:) = Q(i:m,:)-2/(v'*v)*(v*v')*Q(i:m,:); % Folgematrix Q aus ihrem
                                                % Vorgänger bestimmen

    A(i:m,:) = A(i:m,:)-2/(v'*v)*(v*v')*A(i:m,:); % A(neu) = Q * A(alt)

    end

Q
R = A           % die im (m-1)-ten Schritt erzeugte Matrix A ist die
                % gesuchte obere rechte Dreiecksmatrix R
end

Viele Grüße

Katthi

        
Bezug
QR-Z. mit householder matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 17:18 Fr 08.06.2012
Autor: wieschoo


> Hallo Leute,

Sind Matlab-Wochen?

>  
> meine neue Aufgabe ist es, die QR Zerlegung mit Hilfe der
> Householder-Tranformatiin zu bestimmen.
>  habe auch schon einen amtlab code, aber wenn ich es mit
> beispielen teste, erhalte ich zwar die richtigen
> Dimensionen, aber nicht die richtigen Werte.
>  Wäre super, wenn ihr mal drüberschauen könntet.
>  
> Außerdem wird mir immernoch ein ans ausgegebn, obwohl ich
> überall ein Semikolon gesetzt habe.

Vorneweg: Ich seh es ;-)
Wenn du ganz rechts im Codeeditor von Matlab über die orangfarbenen Striche die Maus setzt, so siehst du Hinweise u.a. auch über das Semikolon (setzt natürlich voraus, dass die Matlabversion nicht aus der Steinzeitnist)

> das ans gibt mir
> nochmal die Matrix Q aus.
>  
> function [Q,R] = qr_householder(A);
>  
> % Berechnung von Q und R
>  
> [m,n]=size(A); % Bestimmen der Größe von A, m Zeilen & n
> Spalten
>  
> Q = eye(m); % Q als m x m Einheitsmatrix initialisieren
>  
> for i=1:(m-1) % Initialisierung einer Schleife mit der
> Zählvariablen i,
>                    % die von 1 bis m-1 (Anzahl Zeilen - 1)
> läuft
>  
> x = A(i:m,i); % Festlegen des jeweiligen Spaltenvektors auf
> den         Vektor x
>  
> v = x; % Duplizieren von x auf v (Householder Vektor)
>  
> v(1) = x(1) + sign(x(1)) * norm(x);
> % Bestimmen des jeweiligen Householder Vektors
>      % dabei ändert sich nur das erste Element v(1) des
> Vektors v
> % man verwendet das signum(x1) um Auslöschung zu
> vermeiden,durch norm(x)
> % verwenden wir die euklidische Norm das "+ sign..."
> erhält man durch die
> % Konstruktion aus der Vorlesung durch sigma = -
> sign(x1)*norm(x)
>  
> Q(i:m,:) = Q(i:m,:)-2/(v'*v)*(v*v')*Q(i:m,:); % Folgematrix
> Q aus ihrem
> % Vorgänger bestimmen
>  
> A(i:m,:) = A(i:m,:)-2/(v'*v)*(v*v')*A(i:m,:); % A(neu) = Q
> * A(alt)
>  
> end
>  
> Q
>  R = A           % die im (m-1)-ten Schritt erzeugte Matrix
> A ist die
> % gesuchte obere rechte Dreiecksmatrix R
>  end
>  
> Viele Grüße
>  
> Katthi

Ich habe jetzt auch gesucht. Irgendwie kommt Matlab nicht mit den Multiplikationen von den Teilmatrizen A(i:m,:) klar.
Ich finde jetzt aber auch nicht konkret den Fehler. Baut man sich hingegen die ganze Houlholdermatrix, so klappt die Multiplikation. Sehr eigenartig!
Bei deiner Schreibweise oben werden irgendwie auch die Teile der Matrix mit manipuliert, die eigentlich bleiben müssten.

So klappt es:

function Q=qr_householder(A)
% Berechnung von Q und R
    [m,n] = size(A);% Bestimmen der Größe von A, m Zeilen & n Spalten
     Q = eye(m);
    for i=1:m-1 % Initialisierung einer Schleife mit der Zählvariablen i,
                  % die von 1 bis m-1 (Anzahl Zeilen - 1) läuft
        x = A(i:m,i); % Festlegen des jeweiligen Spaltenvektors auf den         Vektor x
        v=x;% Duplizieren von x auf v (Householder Vektor)
        v(1) = x(1) + sign(x(1))*norm(x);
        H = eye(m-i+1) - 2*v*v'/(v'*v);
        H = [eye(i-1) zeros(i-1,m-i+1); zeros(m-i+1,i-1) H];
        A = H*A; % A(neu) = Q * A(alt)
        Q = Q*H; % Folgematrix Q aus ihrem
                                                % Vorgänger bestimmen
    end
    R = A; % die im (m-1)-ten Schritt erzeugte Matrix A ist die
                % gesuchte obere rechte Dreiecksmatrix R
end



Bezug
                
Bezug
QR-Z. mit householder matlab: Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 17:42 Fr 08.06.2012
Autor: Katthi

haha ja so in etwa :D nee muss jede Woche diese Programmieraufgaben lösen und heute kam die für nächste Woche. wollte nur fleißig vorarbeiten ;)

Vielen Dank so klappt es =)

muss das jetzt dann wieder in die Orth_error function von gestern packen. und zwar mit den anderen Gram-Schmidt-Verfahren. dann sollte ja durch diesesn fprintf befehl diese tabellarische Form ausgegeben werden, aber im command window ist das dann irgendwie komisch und taucht bei jedem n, das ich bei der Vandermonde-Matrix eingebe immer wieder neu auf. so ganz richtig ist das doch nicht oder??

Bezug
                        
Bezug
QR-Z. mit householder matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 17:44 Fr 08.06.2012
Autor: wieschoo


> haha ja so in etwa :D nee muss jede Woche diese
> Programmieraufgaben lösen und heute kam die für nächste
> Woche. wollte nur fleißig vorarbeiten ;)
>  
> Vielen Dank so klappt es =)
>
> muss das jetzt dann wieder in die Orth_error function von
> gestern packen. und zwar mit den anderen
> Gram-Schmidt-Verfahren. dann sollte ja durch diesesn
> fprintf befehl diese tabellarische Form ausgegeben werden,
> aber im command window ist das dann irgendwie komisch und
> taucht bei jedem n, das ich bei der Vandermonde-Matrix
> eingebe immer wieder neu auf. so ganz richtig ist das doch
> nicht oder??

Was taucht auf?

Bezug
                                
Bezug
QR-Z. mit householder matlab: Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 17:51 Fr 08.06.2012
Autor: Katthi

oh :D

diese Tabelle taucht da bei jedem n auf.
das n sollte ja in 5er Abständen gehen, aber trotz der Änderung mit dem [mm] \n [/mm] zeigt der 20er Schritte an.

Vielleicht weißt du ja, woran das liegt, sonst bleibt es halt so... =)

Bezug
                                        
Bezug
QR-Z. mit householder matlab: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:08 Fr 08.06.2012
Autor: wieschoo

Kopier mal die Tabelle (und eventuell den Code), der diese erzeugt hier hinein.

Bezug
                                                
Bezug
QR-Z. mit householder matlab: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 09:08 Sa 09.06.2012
Autor: Katthi

Guten morgen =)

Also ich habe ein Skript file geschrieben, indem alle Verfahren für die verschiedenen n durchlaufen werden und jeweils dann diesen orth_error des jeweiligen Verfahrens berechnen,
aber genau dabei bin ich mir unsicher, ob das so geht. so sieht das aus:

n = [5:5:150];

for k = n

   V(k); % Matrix erstellen
  
   Q1 = qr_gram_schmidt(V(k));% erstes Verfahren drauf anwenden
   e1 = orth_error(Q1);% das orth_error berechnen
  
   Q2 = qr_gram_schmidt(V(k)); % zweites Verfahren drauf anwenden
   e2 = orth_error(Q2);% das orth_error berechnen
  
   Q3 = qr(V(k)); % drittes Verfahren drauf anwenden
   e3 = orth_error(Q3);% das orth_error berechnen

   Q4 = qr_householder(V(k)); % viertes Verfahren drauf anwenden
   e4 = orth_error(Q4); % das orth_error berechnen
  
[mm] fprintf('%d:\n [/mm] %e %e %e [mm] %e\n',n, [/mm] e1, e2, e3, e4);


end

bei dem fprintf zeigt der irgendwie nicht alles an. der erste EIntrag ist ohne Leerzeichen ' % d : \ n

Bezug
                                                        
Bezug
QR-Z. mit householder matlab: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 09:20 Mo 11.06.2012
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]