小编Jac*_*obD的帖子

加权Gram-Schmidt正交化的MATLAB优化

我在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

19
推荐指数
2
解决办法
1829
查看次数