matlab矢量化并避免循环

时间:2016-07-01 11:07:15

标签: matlab vectorization

有两个矩阵X和M,我需要获得以下矩阵D

m = 20; n = 10;
X = rand(m,n);
M = rand(m,m);
M = (M + M')/2;

D = zeros(n,n);
for i = 1:n
    for j = 1:n
        D(i,j) = X(:,i)'*M*X(:,j);
    end
end

当n和m很大时,D的计算非常慢。有没有办法加快?

1 个答案:

答案 0 :(得分:0)

答案是:

D = 0.5*X.'*(M+M')*X

(这是对Divakar提供的解决方案的略微修改,以便返回正确的矩阵D)