MATLAB中两个矩阵之间的协方差

sta*_*oat 3 matlab matrix covariance

我有两个基质,XY,每列代表一个随机变量的多个实现;

X = [x_11  x_21  .... x_n1
     x_12  x_22  .... x_n2
      .     .    ....  .
      .     .    ....  .
     x_1m  x_2m  .... x_nm]
Run Code Online (Sandbox Code Playgroud)

并且其中Y是X的函数:Y = f(X)

Y = [y_11  y_21  .... y_n1
     y_12  y_22  .... y_n2
      .     .    ....  .
      .     .    ....  .
     y_1m  y_2m  .... y_nm]
Run Code Online (Sandbox Code Playgroud)

我想找到变量x_n和y_n之间的协方差矩阵;

E{(X - E{Y}) * (Y - E{Y})^H}
Run Code Online (Sandbox Code Playgroud)

其中()^ H表示向量的厄米特转

在matlab中,当我运行cov(X,Y)matricies时,(每20次变量的1000次试验)我只得到一个2x2矩阵,这让我相信它正在以某种方式将每个矩阵视为单个"变量".如果我连接两个matricies并调用cov结果:

cov( [X Y] )
Run Code Online (Sandbox Code Playgroud)

我得到一个40x40矩阵,结果cov( X )在左上角,cov( Y )右下角的结果,以及我想要的矩阵在右上角和左下角,但有没有办法计算这个而不必诉诸于此?

谢谢

Yan*_*Cao 5

cov(X,Y)相当于cov([x(:) y(:)]).但是[x(:) y(:)]对于你来说是20000乘2,并将cov()行视为观察,将列视为维度,因此你得到一个2乘2的协方差矩阵.

我只想按照定义自己实现它:

bsxfun(@minus,x,mean(x))'*bsxfun(@minus,y,mean(y))/(size(x,1)-1)
Run Code Online (Sandbox Code Playgroud)

如果您的旧版本的matlab不支持bsxfun(),请使用repmat().