我有两个基质, X 和 Y ,每列代表一个随机变量的多个实现;
X = [x_11 x_21 .... x_n1
x_12 x_22 .... x_n2
. . .... .
. . .... .
x_1m x_2m .... x_nm]
其中Y是X的函数:Y = f(X)
Y = [y_11 y_21 .... y_n1
y_12 y_22 .... y_n2
. . .... .
. . .... .
y_1m y_2m .... y_nm]
我想找到变量x_n和y_n之间的协方差矩阵;
E{(X - E{Y}) * (Y - E{Y})^H}
其中()^ H表示向量的Hermitian Transpose
在matlab中,当我在matricies上运行cov(X,Y)
时,(每20次变量的1000次试验)我只得到一个2x2矩阵,这让我相信它将每个矩阵视为一个单一的“变量” “ 不知何故。如果我连接两个matricies并在结果上调用cov
:
cov( [X Y] )
我得到一个40x40矩阵,左上角是cov( X )
,右下角是cov( Y )
的结果,右上角和左下角是我想要的矩阵,但是有没有办法计算这个而不必诉诸于此?
由于
答案 0 :(得分: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)
如果您的旧版本的matlab不支持bsxfun()
,请使用repmat()
。