八度/ matlab投影的矢量化

时间:2014-03-16 19:31:41

标签: matlab octave vectorization

在线性代数中,我们可以通过取这个子空间的标准正交基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

是否有此程序的矢量化版本?

1 个答案:

答案 0 :(得分:1)

使用矩阵乘法:

proj = B.'*B*v(:);

这给出了与代码相同的结果,作为列向量。

如果您需要将结果作为行向量:

proj = v(:).'*B.'*B;