Gram Schmidt
Salve a tutti,
devo fare in matlab un programma che effettua la fattorizzazione QR di una matrice utilizzando il metodo di GramSchmidt.Questo è il codice :
il mio dubbio nasce su : CHe controlli devo fare?
Devo per caso controllare che le colonne di A siano linearmente indipendenti?? o devo fare un controllo sulla tolleranza?
Grazie
devo fare in matlab un programma che effettua la fattorizzazione QR di una matrice utilizzando il metodo di GramSchmidt.Questo è il codice :
function A = cgrscho(A) [m n]=size(A); for j= 1:n R(1:j-1,j)=A(:,1:j-1)'*A(:,j); A(:,j)=A(:,j)-A(:,1:j-1)*R(1:j-1,j); R(j,j)=norm(A(:,j)); A(:,j)=A(:,j)/R(j,j); end return,
il mio dubbio nasce su : CHe controlli devo fare?
Devo per caso controllare che le colonne di A siano linearmente indipendenti?? o devo fare un controllo sulla tolleranza?
Grazie
Risposte
Anch'io ho lo stesso esercizio, questa è la traccia:
Scrivere un sottoprogramma Matlab per la fattorizzazione QR di una matrice A appartenente a R^nxn
, usando l'algoritmo di Gram-Schmidt classico (CGS).
Io l'ho fatto così, ma non l'ho ancora consegnato. Qualcuno sa dirmi se va bene? Devo fare anch'io qualche altro controllo? Grazie!
Scrivere un sottoprogramma Matlab per la fattorizzazione QR di una matrice A appartenente a R^nxn
, usando l'algoritmo di Gram-Schmidt classico (CGS).
Io l'ho fatto così, ma non l'ho ancora consegnato. Qualcuno sa dirmi se va bene? Devo fare anch'io qualche altro controllo? Grazie!
function [Q,R] = cgschmidt(A) n = size(A); flag = rank(A); if flag ~= n %controllo che l'input inserito sia corretto fprintf('I vettori immessi non sono linearmente indipendenti'); Q = zeros(n); R = zeros(n); else Q = A; R = zeros(n); for k = 1:n R(1:k-1,k) = Q(:,1:k-1)'*A(:,k); %ortogonalizzazione Q(:,k) = A(:,k)-Q(:,1:k-1)*R(1:k-1,k); R(k,k) = norm(Q(:,k)); Q(:,k) = Q(:,k)/R(k,k); end end