Gram Schmidt

starbike
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 :
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
valeria.torella
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!

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

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.