Matlab中cov函数的算法

来源:互联网 发布:哈尔斯保温杯价格 知乎 编辑:程序博客网 时间:2024/05/18 01:45

      前几日一MM问我matlab中的cov函数是如何实现的,笔算的结果和电脑算的结果怎么不一样……于是两个人一起算了下,确实结果不太一样(其实差好远)……于是决定花时间研究了一下……于是花了不少时间才研究出来。这里把这个问题总结一下,以给后人前车之鉴。

      算法实现

      如何理解

      matlab在计算相关矩阵时,把每一列的数作为一个随机变量的样本,每一行作为一个这几个随机变量的联合样本,即第i个随机变量取第k行的样本值时,第j个随机变量也取第k行的样本值。利用这个性质,我们就可以用协方差的公式代入来计算协方差矩阵了。

      然而,由于矩阵中给出只是这些随机变量的样本,根据概率论的知识我们知道,由于我们不知道这些随机变量的概率分布(或联合概率分布),我们是不可能计算出这些随机变量的期望、方差或是协方差的,而只能计算出它们的一个无偏估计,即样本均值、样本方差与样本协方差。其计算公式如下所示:

      matlab中的解释

      cov(x), if X is a vector, returns the variance. For matrices, where each row is an observation, and each column is a variable,cov(X) is the covariance matrix.diag(cov(X)) is a vector of variances for each column, andsqrt(diag(cov(X))) is a vector of standard deviations.cov(X,Y), whereX and Y are matrices with the same number of elements, is equivalent tocov([X(:) Y(:)]).

      cov(x) or cov(x,y) normalizes by N-1, if N>1, where N is the number of observations. This makescov(X) the best unbiased estimate of the covariance matrix if the observations are from a normal distribution. ForN=1,cov normalizes byN.

原创粉丝点击