Come sempre ci riportiamo al nostro problema di partenza, dunque alla risoluzione del sistema lineare tramite fattorizzazione . Dal momento che possiamo scrivere e dunque ; il vettore è il vettore dei termini noti modificato applicando la matrice , ma questa modifica può essere fatta mentre si esegue l'algoritmo, moltiplicando anch'esso per le matrici di Householder:
function x=solveQR(A,b) %SOLVEQR Risolve il sistema lineare Ax=b fattorizzando la matrice % A come QR ed infine risolvendo il sistema % Rx=b^ % dove b^ è il vettore dei termini noti aggiornato come b^=Q^Tb % % x=SOLVEQR(A,b) % % I parametri della funzione sono: % A -> la matrice dei coefficienti del sistema lineare % b -> il vettore dei termini noti % % I valori di ritorno sono: % x -> il vettore soluzione del sistema lineare % % See Also FATTQR [m,n]=size(A); x=b; for i=1:n alpha=norm(A(i:m,i)); if alpha==0 disp('No rango MAX!!'); return end v1=A(i,i); if v1>=0 v1=v1+alpha; s=1; A(i,i)=-alpha; else v1=v1-alpha; s=-1; A(i,i)=alpha; end A(i+1:m,i)=A(i+1:m,i)/v1; vt=[1;A(i+1:m,i)]; beta=s*v1/alpha; A(i:m,i+1:n)=A(i:m,i+1:n)-(beta*[1;A(i+1:m,i)])* ([1 A(i+1:m,i)']*A(i:m,i+1:n)); b(i:n)=b(i:n)-(beta*[1 A(i+1:m,i)']*b(i:n))*[1;A(i+1:m,i)]; end x=solveUT(A,b);