Fattorizzazione QR

di il
13 risposte

Fattorizzazione QR

Salve a tutti, sono (quasi) riuscito ad implementare la fattorizzazione QR, ma ho 2 problemi:
1)matrice R dovrebbe avere degli zeri netti nel triangolo inferiore invece a me escono 0.0000... , 2) qualche segno è opposto rispetto alle componenti della la fattorizzazione qr che mi fa matlab col suo algoritmo.
Secondo me è dovuto all'errore di troncamento nel calcolo della norma del vettore. Ho provato a utilizzare un ciclo for che mi da la somma dei quadrati delle componenti del vettore per evitare di fare la radice, ma comunque sono costretto a farla per calcolare il vettore v. Mi sapreste consigliare dei metodi per eliminare l'errore??

oppure è un errore di cancellazione numerica quando mi calcolo le nuove Q e A.
Ho risolto questo problema per il calcolo di v mettendoci quel controllo di A(i,i)>=0 ma per la matrice come faccio?
function [Q,R] = fattorizzaQR ( A )
%FATTORIZZAZZIONE QR: fattorizza una matrice rettangolare m x n in modo tale che
%                              A = Q * R 
%   IMPUT:
%   A--> Matrice da fattorizzare 
%   OUTPUT:
%   Q--> Matrice m x n
%   R--> Matrice triangolare superiore m x m

[m,n] = size (A);
Y = eye(m);
Q = Y;
for i = 1:n
    z = norm (A(i:m,i),2) ;
    if A(i,i) >=0
        z = - z;
    end
    
v =  [ zeros(i-1,1) ; A(i:m,i) ] - z * Y(:,i); 

A(i:m,i:n) = A(i:m,i:n) - v(i:m) * ( (2 / (norm(v,2))^2 ) * (v(i:m)' * A(i:m,i:n))); 
Q(i:m,i:m) = Q(i:m,i:m) - v(i:m) * ( (2 / (norm(v,2))^2 ) * (v(i:m)' * Q(i:m,i:m))); 
end

Q = Q';

R = A;


end

13 Risposte

  • Re: Fattorizzazione QR

    Hai un link dov'è spiegato l'algoritmo che stai usando?
  • Re: Fattorizzazione QR

    No... lo sto facendo decifrando appunti di lezione
  • Re: Fattorizzazione QR

    Perché mi sembra che dei numeri vengano proprio diversi, non solo di segno...
  • Re: Fattorizzazione QR

    È vero non me ne ero accorto. La maggior parte però a me vengono solo con il segno sbagliato.
    Se provo a fare Q * R mi dovrebbe uscire proprio A. però ho notato che mi sbaglia la prima componente della prima colonna, la prima e la seconda componente della seconda colonna, la prima seconda e terza della terza colonna...
  • Re: Fattorizzazione QR

    Ho usato la matrice che usa matlab nell'help. Confrontando Q (con quello della funzione QR)
    Questa è la tua Q
    -0.0776 -0.3105 -0.5433 -0.7762
    -0.3105 -0.3450 -0.5521 -0.7591
    -0.5433 -0.5521 -0.6000 -0.8000
    -0.7762 -0.7591 -0.8000 0.6000

    E' uguale solo la prima colonna... il resto è tutto diverso...
  • Re: Fattorizzazione QR

    Quale matrice dici?
  • Re: Fattorizzazione QR

    Se scrivi qr nell'help, quella dell'esempio 1
    A = [ 1 2 3
    4 5 6
    7 8 9
    10 11 12 ]
  • Re: Fattorizzazione QR

    A me la Q viene

    -0.0776 -0.3105 -0.5433 -0.7762
    -0.3105 -0.4512 0.2376 0.8022
    -0.5433 -0.0694 0.0312 -0.8361
    -0.7762 0.3124 0.2492 0.4877
    quella di matlab

    0.0776 0.8331 -0.5456 0.0486
    0.3105 0.4512 0.6912 -0.4714
    0.5433 0.0694 0.2543 0.7971
    0.7762 -0.3124 -0.3999 -0.3743

    XD eppure mi pare che il codice che ho copiato nel post sia identico a quello che sto usando.
    m
    Mi sbaglia il triangolo superiore... mmm mi sa che ho ancora da parecchio da lavorare
  • Re: Fattorizzazione QR

    No... quella di matlab viene così (sta anche sull'help... è diversa da quella che viene a te...)
    -0.0776 -0.8331 0.5444 0.0605
    -0.3105 -0.4512 -0.7709 0.3251
    -0.5433 -0.0694 -0.0913 -0.8317
    -0.7762 0.3124 0.3178 0.4461
  • Re: Fattorizzazione QR

    Apposto ho risolto, invece di
    Q(i:m,i:m) = Q(i:m,i:m) - v(i:m) * ( (2 / (norm(v,2)^2) ) * (v(i:m)' * Q(i:m,i:m))); 
    dovevo scrivere
    Q(i:m,:) = Q(i:m,:) - v(i:m) * ( (2 / (norm(v,2)^2) ) * (v(i:m)' * Q(i:m,:)));
    anche se le matrici q ed r di matlab sono diverse, infatti dimenticavo che la fattorizzazione qr non è unica, l'importante è che il prodotto mi faccia A
  • Re: Fattorizzazione QR

    Giusto!
  • Re: Fattorizzazione QR

    Grazie mille per la collaborazione!!
  • Re: Fattorizzazione QR

    Figurati! non ho fatto niente!
Devi accedere o registrarti per scrivere nel forum
13 risposte