Wie gewährleiste ich bei einer Q-R-Zerlegung, dass Q unitär ist?

Ich habe fuer eine Matrix A mit reellen Einträgen, eine Q-R-Zerlegung mit Matlab programmiert, die eigentlich funktioniert denn QA = (R,0), wobei R eine rechte obere Dreiecksmatrix ist. (R,0) ist dann einfach dieses R mit angehänten Zeilen, die nur Nullen enthalten. Dann kann doch eigentlich nichts falsch gelaufen sein oder? Die fertige QR-Funktion von Matlab liefert ein R sich von meinem nur durch ein paar Vorzeichen unterscheidet und ein Q was einfach mein Q in transponiert ist. Da die QR-Zerlegung nicht eindeutig ist, sollte das aber nicht heissen, dass meine Zerlegung falsch ist, oder?

Beide Qs sind leider nicht unitär. Um einen Satz zu nutzen, muss dies aber gewährleistet sein. Wie kann ich meinen Code anpassen, damit das geht. Unten mein Matlab Code. Vielleicht brauchen Sie den garnicht zur Beantwortung der Frage.

----------------------------------------------------------------------------------------------------------------------

A = xlsread("An.xlsx");%Hier kann eine beliege 27x7 Matrix genommen werden

R1 = A;

dim_fix = size(A);

for j=1:dim_fix(2)%In dieser Schleife erfolgt die QR-Zerlegung, fuer quadratische

     

  l = length(A);

  dim = size(A);

    if j==1

       Z = A(1,1);

    else

       Z = R1(1,1);

    end

     

     if Z~=0

       Z = sign(Z);%sign gibt je nach Vorzeichen, 1 oder -1

    else

       Z = 1;

    end

  A1 = spaltennorm(A)Z;

  V1 = A(:,1)+(A1eye(l,1));

  Q1 = eye(l,l)- (2(V1transpose(V1)))/(transpose(V1)V1);%Q1 ist die Spiegelmatrix. eye erzeugt eine Einheitsmatrix

    if j~=1

       Q1 = unterMat(Q1,j);

       Q=Q1Q;%So wird die j-te Spalte richtig geformt, mit nur Nullen ab dem j-ten Eintrag.

    else

       Q=Q1; 

    end

   R1 = Q1R1;%So wird nach und nach das R angepasst

   A = R1(end-(dim(1)-2):end,end-(dim(2)-2):end);%Hier wird A aus R1 fuer den naechsten Durchlauf geformt.

   

end

A = xlsread("AN.xlsx");%A hat sich in der Schleife veraendert und hier wieder auf den Standard zuruck gesetzt

QA % = R1, also muss die QR-Zerlegung funktioniert haben.

---------------------------------------------------------------------------------------------------------------

%Hilfsfunktion spaltennorm

function [output] = spaltennorm(A)

l = length(A);

count = 0;

for k=1:l

    count = count+(A(k,1))^2;

  end

output = sqrt(count);

end

----------------------------------------------------------------------------------------------

%Hilfsfunktion Untermat

function [MN] = unterMat(M,n)

dim = size(M)

l1 = dim(1)

l2 = dim(2)

e = eye(l1+n-1,l2+n-1)

for i=1:l1

  for k=1:l2

    e(i+n-1,k+n-1)= M(i,k)

  end

end

MN = e

end







Computer, Schule, Mathematik, Mathe, Matlab, Numerik, optimierung
1 Antwort

Meistgelesene Fragen zum Thema Mathe