2010-07-22 305 views
8

输入:随机向量X = xi,i = 1..n。
X = meanxi,i = 1..n的均值向量输出:协方差矩阵Sigma(n * n)。
输出:协方差矩阵。 (i,j)= 1/n *(xi-meanxi)*(xj-meanxj),i,j = 1..n
2)Sigma(i,j) = cov(xi,xj),对称矩阵。
该算法是否正确,没有副作用?
协方差矩阵计算

+0

问题陈述不是很清楚。你真的有一个单一的向量作为输入? xi都有同样的意思吗?在计算平均值时,为什么要用(n-1)除? – Henrik 2010-07-22 08:54:02

+0

理论上我有很多(X实际上是一个过程X(t)),其中t是[0..k],但是在建模期间,我只对k = kmax的情况感兴趣,这就是为什么我得到单向量X(kmax)= X由r个数组成。 n-1是更正,不会有太大影响。关于手段 - 他们是不同的,因为我现在看到。 – Singularity 2010-07-22 11:05:28

+1

我投票结束这个问题,因为这是一个数学验证问题,而不是[帮助]范围内的编程问题。 – TylerH 2017-09-07 16:03:06

回答

4

每个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 

其中xi的方差(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)Pearson product-moment correlation coefficient

EDIT
或,由于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];

+1

对角线包含方差。 – Henrik 2010-07-22 09:34:30

+0

是的,你是对的。更正 – Gacek 2010-07-22 09:36:42

+0

为什么您要根据相关性定义协方差?通常这是相反的。 – Henrik 2010-07-22 09:52:33