摆脱相关矩阵生成中的for循环 - MATLAB

时间:2015-05-08 19:27:04

标签: matlab loops

我试图基于相关函数模拟非平稳,单变量空间数据的2D场,以便我可以调整各种参数并观察效果。

具体来说,我试图(快速)根据本文基于等式(9)的Matérn协方差结构生成非平稳数据:

http://arxiv.org/pdf/1411.3174.pdf

其中R是Matérn或指数协方差函数,Omega_s表示每个点s的协方差矩阵。在制作了一个2 ^ 2欧米茄矩阵OMs的n ^ 2 x n ^ 2个单元格后,它指定了模拟随机字段在给定位置的关联方式,我使用下面的函数来构建相关矩阵:

rho = zeros(n^2);

for i = 1:n^2 % Point 1
    for j = 1:n^2 % Point 2

        if i == j
            rho(i,j) = 1;  % Correlation at lag 0 = 1

        else 
            x1 = Crd(i,1); y1 = Crd(i,2); % Crd is n^2 by 2 matrix of
            x2 = Crd(j,1); y2 = Crd(j,2); % coordinates in 2D

            % Lag vector
            h = [x1-x2;y1-y2];

            % Correlaton Function:
            R = exp(-norm(h)^alpha);
            Q = h'*(((OMs{x1,y1}+OMs{x2,y2})/2) \ h);
            OMEGA1 = (det(OMs{x1,y1})^(0.25))*det(OMs{x2,y2})^(0.25);
            OMEGA2 = det((OMs{x1,y1}+OMs{x2,y2})/2)^(-0.5);

            rho(i,j) = OMEGA1*OMEGA2*R*Q^(0.5);

        end
    end
end

不幸的是,对于中等大小的领域 - 甚至40乘40 - 这需要花费很多时间。我需要为许多不同的参数运行它 - 有没有一些方法可以更快地完成,没有那些循环?

0 个答案:

没有答案