使用gram-schmidt构造的创新表示MATLAB

时间:2018-02-04 15:18:21

标签: matlab

由三个随机变量组成的零均值随机向量y具有由R给出的3x3协方差矩阵。我需要使用克施密特构造确定y的创新表示,即y = B * E,其中E是不相关分量的向量B是下三角矩阵。

我访问了很多页面,提供了有关如何在MATLAB中执行此操作的教程,但仅当我的输入是具有独立列向量的矩阵时。在这里,我得到了协方差矩阵,我似乎无法就如何利用这个矩阵并在MATLAB上实现它建立联系。

以下是我从Reza Ahmadzadeh创建的MathWorks网站获得的代码:

function v = GramSchmidt(v)


k = size(v,2);


for ii = 1:1:k
    v(:,ii) = v(:,ii) / norm(v(:,ii));
    for jj = ii+1:1:k
        v(:,jj) = v(:,jj) - proj(v(:,ii),v(:,jj));
    end
end

    function w = proj(u,v)
        % This function projects vector v on vector u
        w = (dot(v,u) / dot(u,u)) * u;
    end

end

我没有这样的输入矩阵。或者仅仅是因为我无法理解这段代码?

任何帮助都将深表感谢。这是我第一次在MATLAB上开展这样一个项目,一点帮助真的会让我更好地理解这个概念。

1 个答案:

答案 0 :(得分:3)

我下载了您引用here的功能,我开始搞乱它。实际上,它所需的v参数只是应用Gram-Schmidt算法的随机向量,即y。证明:

% Create sample data and check it's correlation...
y = randi(10,10,3);
y = y - repmat(mean(y),10,1);
corr(y)

% Compute the Gram-Schmidt using a well known formulation...
[Q,R] = GramSchmidt_Standard(y);

% Compute the Gram-Schmidt using the Reza formulation...
UNK = GramSchmidt_Reza(y);

% Q and UNK are identical...
Q
UNK

function [Q,R] = GramSchmidt_Standard(y)
    [m,n] = size(y);
    Q = zeros(m,n);
    R = zeros(n,n);

    for j = 1:n
        v = y(:,j);

        for i = 1:j-1
            R(i,j) = Q(:,i).' * y(:,j);
            v = v - R(i,j) * Q(:,i);
        end

        R(j,j) = norm(v);
        Q(:,j) = v / R(j,j);
    end
end

function v = GramSchmidt_Reza(v)
    function w = proj(u,v)
        w = (dot(v,u) / dot(u,u)) * u;
    end

    k = size(v,2);

    for ii = 1:1:k
        v(:,ii) = v(:,ii) / norm(v(:,ii));

        for jj = ii+1:1:k
            v(:,jj) = v(:,jj) - proj(v(:,ii),v(:,jj));
        end
    end
end

因此,您可以选择自己喜欢的功能并继续进行计算。