在线性代数中,我们可以通过取这个子空间的标准正交基b(1),b(2),b(3),... b(n)来将矢量v投影到子空间U上并计算b和v(i)的标量乘积之和乘以向量v(i),即(v,b(i))* b(i),总和为i。
假设我们已经将基础向量存储在矩阵B
中,使得它的行是向量b(1),b(2),...,b(n)。
我找到了一种用for
循环来计算它的方法:
proj = 0
for i=1:n
proj = proj + (B(i,:)*v)*(B(i,:)');
end
是否有此程序的矢量化版本?
答案 0 :(得分:1)
使用矩阵乘法:
proj = B.'*B*v(:);
这给出了与代码相同的结果,作为列向量。
如果您需要将结果作为行向量:
proj = v(:).'*B.'*B;