输入:随机向量X=xi,i=1..n。
X=meanxi,i=1..n的均值向量
输出:协方差矩阵Sigma (n*n)。
计算:
( 1)查找所有cov(xi,xj)= 1/n * (xi-meanxi) *(xj-m i),i,j=1..n
2) Sigma(i,j)=cov(xi,xj),对称矩阵。
这个算法正确吗?没有副作用吗?
发布于 2010-07-22 09:23:26
每个xi应该是一个向量(随机变量),具有它自己的方差和均值。
协方差矩阵是对称的,所以您只需要计算其中的一半(并复制其余的),并且主对角线上有xi的方差。
S = ...// your symmetric matrix n*n
for(int i=0; i<n;i++)
S(i,i) = var(xi);
for(j = i+1; j<n; j++)
S(i,j) = cov(xi, xj);
S(j,i) = S(i,j);
end
end其中十一的方差(var):
v = 0;
for(int i = 0; i<xi.Count; i++)
v += (xi(i) - mean(xi))^2;
end
v = v / xi.Count;和协方差(cov)
cov(xi, xj) = r(xi,xj) * sqrt(var(xi)) * sqrt(var(xj))其中r(xi, xj)是皮尔逊乘积-矩相关系数
编辑
或,由于cov(X,Y) = E(X*Y) - E(X)*E(Y)
cov(xi, xj) = mean(xi.*xj) - mean(xi)*mean(xj);其中.*是类似Matlab的元素方向乘法.
因此,如果x = [x1, x2],y = [y1, y2],那么z = x.*y = [x1*y1, x2*y2];
https://stackoverflow.com/questions/3307082
复制相似问题