由三个随机变量组成的零均值随机向量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上开展这样一个项目,一点帮助真的会让我更好地理解这个概念。
答案 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
因此,您可以选择自己喜欢的功能并继续进行计算。