Аналогичная проблема с этим вопросом 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