用给定的概率在MATLAB中计算协方差矩阵

时间:2010-11-28 10:43:29

标签: algorithm matlab matrix covariance

在我的MATLAB程序中,我在矩阵中给出了m维变量X的出现

X = [x_11 x_12 ... x_1m; 
     x_21 x_22 ... x_2m;
     .
     .
     .
     x_n1 x_n2 ... x_nm;]

其中每个都是X的案例。

每个案件的概率由下式给出:

pX = [p_x1 p_x2 ... p_xn];

我正在寻找一种简单的方法来计算X的协方差矩阵(一个显示X的维度如何相互关联的矩阵)。

我希望有一种简单的方法可以在MATLAB中计算它,就像X的预期值一样,计算方法如下:

EX = pX * X;

修改

X是随机变量,具有由X矩阵指定的离散出现。 pX显示每次出现的概率。

1 个答案:

答案 0 :(得分:2)

EX = px*X;
nmeas = size(X,1);
XB = X - repmat(EX,nmeas,1);

PD = zeros(nmeas, nmeas);
PD(logical(eye(size(PD)))) = px; % thanks http://stackoverflow.com/questions/3963565/matlab-how-to-assign-values-on-the-diagonal

CX = XB'*PD*XB;

PDij是获得测量xi和xj的联合概率,如果j = i,则为pXj,否则为0。

所以

  

CX1,1 = pX1 * xB11 ^ 2 + px2 * XB21 ^ 2 + ...

     

CX2,1 = CX1,2 = px1 * xB11 * xB12 + px2 * XB21 * XB22 + ...

这是协方差的定义。