我在MATLAB中有一个函数,它执行Gram-Schmidt正交化,并对内积进行了非常重要的加权(我不认为MATLAB的内置函数支持这一点).据我所知,这个功能效果很好,但是在大型矩阵上它太慢了.改善这种情况的最佳方法是什么?
我已经尝试转换为MEX文件,但我失去了与我正在使用的编译器的并行化,因此它更慢.
我想在GPU上运行它,因为元素倍增是高度并行化的.(但我更喜欢实现方便携带)
任何人都可以将此代码矢量化或加快速度吗?我不确定如何优雅地做到这一点......
我知道这里的stackoverflow思想是惊人的,认为这是一个挑战:)
function [Q, R] = Gram_Schmidt(A, w)
[m, n] = size(A);
Q = complex(zeros(m, n));
R = complex(zeros(n, n));
v = zeros(n, 1);
for j = 1:n
v = A(:,j);
for i = 1:j-1
R(i,j) = sum( v .* conj( Q(:,i) ) .* w ) / ...
sum( Q(:,i) .* conj( Q(:,i) ) .* w );
v = v - R(i,j) * Q(:,i);
end
R(j,j) = norm(v);
Q(:,j) = v / R(j,j);
end …Run Code Online (Sandbox Code Playgroud) optimization performance matlab linear-algebra vectorization