2016-05-19 40 views
1

這個問題的類似問題matrix that forms an orthogonal basis with a given vector但是我在執行時遇到問題。我有一個給定的矢量,u,我想構造一個任意正交矩陣V,使得V(:,1) = u/norm(u)。我得到的問題是V'*V不是I(但是是對角線)。這裏是我的代碼:在matlab中創建一個給定向量的正交矩陣的問題

function V = rand_orth(u) 
    n = length(u); 
    V = [u/norm(u) rand(n,n-1)]; 

    for i = 1:n 
     vi = V(:,i); 
     rii = norm(vi); 
     qi = vi/rii; 
     for j = i+1:n 
      rij = dot(qi,V(:,j)); 
      V(:,j) = V(:,j) - rij*qi; 
     end 
    end 
end 

回答

1

一旦你完成了正交化,簡單地規範化V列。請注意,最初也沒有必要對u(第一列)進行歸一化,因爲我們將在最後對整個矩陣進行歸一化:

function V = rand_orth(u) 
    n = length(u); 
    V = [u, rand(n,n-1)]; 

    for i = 1:n 
     vi = V(:,i); 
     rii = norm(vi); 
     qi = vi/rii; 
     for j = i+1:n 
      rij = dot(qi,V(:,j)); 
      V(:,j) = V(:,j) - rij*qi; 
     end 
    end 

    V = bsxfun(@rdivide, V, sqrt(diag(V'*V))'); 
end