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