sta*_*oat 3 matlab matrix covariance
我有两个基质,X和Y,每列代表一个随机变量的多个实现;
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 )右下角的结果,以及我想要的矩阵在右上角和左下角,但有没有办法计算这个而不必诉诸于此?
谢谢
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().
| 归档时间: |
|
| 查看次数: |
7441 次 |
| 最近记录: |