Using a variable vector in a loop
조회 수: 1 (최근 30일)
이전 댓글 표시
Hello, I am trying to use a large number of vectors (up to 60) for orthogonalization. Say, we have column vectors, v1, v2, v3,..., vk. To orthogonalize them using the standard method, one can proceed with
u1=v1;
u2=v2-[dot(v2,u1)/dot(u1,u1)]*u1;
u3=v3-[dot(v3,u1)/dot(u1,u1)]*u1-[dot(v3,u2)/dot(u2,u2)]*u2;
and so on. However, I want to use the generalized formula when the number of vectors gets large.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/822935/image.png)
What would be best way to implement the above general formula rather? I was wondering if a "for" loop might work, as follows, but how to define vk? I get an error. vk undefined. Thanks.
for k=1:60;
j=1:k-1;
uk=0;
uk=GS+vk-[dot(vk,uj)/dot(uj,uj)]*uj;
end
댓글 수: 0
채택된 답변
James Tursa
2021년 12월 3일
Suppose you store the column vectors in a matrix called V. Then vk would simply be V(:,k). And if the uj are stored in a matrix U as well, then each uj would be U(:,j). So taking your code and replacing these, along with coding the inner part as a loop, would be something like:
V = your matrix of vk column vectors
[m,n] = size(V);
U = zeros(m,n);
for k=1:n
p = zeros(m,1);
for j=1:k-1
p = p + (dot(V(:,k),U(:,j))/dot(U(:,j),U(:,j))) * U(:,j);
end
U(:,k) = V(:,k) - p;
end
추가 답변 (1개)
Matt J
2021년 12월 4일
You should not use the classical Gram-Schmidt procedure, as it is numerically unstable. Use orth() instead.
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!