Matlab:Covariance Matrix错误的结果

时间:2014-02-13 11:44:39

标签: matlab function matrix covariance

我必须计算Covaiance Matrix才能进行PCA,但每当我将协方差矩阵结果与matlab的协方差矩阵(使用Cov函数)进行比较时,它会给出不同的结果。

所以这意味着我的程序错了。

这是我的计划:

InputMatrix=[1 2 3; 4 5 6; 9 1 2];
Average=mean(InputMatrix);
[Rows,Columns]=size(InputMatrix);

DataNumbers=Rows*Columns;

%% Substraction
for loop_row=1:Rows
    for loop_column=1:Columns
        Substract_Matrix(loop_row,loop_column)=InputMatrix(loop_row,loop_column)-Average(loop_column);
    end
 end

 %% Transpose
 for loop1=1:Rows
     for loop2=1:Columns
         Transpose_Matrix(loop2,loop1)=Substract_Matrix(loop1,loop2);
     end
 end


%% Multiply
CovarianceMatrix=(Substract_Matrix*Transpose_Matrix)*1/DataNumbers;

我的程序给出的协方差矩阵输出:

1.5926   -0.0741   -1.5185
-0.0741    1.2593   -1.1852
-1.5185   -1.1852    2.7037

Matlab Cov函数给出的协方差矩阵结果

16.3333   -3.1667   -3.1667
-3.1667    4.3333    4.3333
-3.1667    4.3333    4.3333

有人可以帮我解决这个问题, 我已经问了这个问题,但没有人接听过。T_T

1 个答案:

答案 0 :(得分:1)

你让事情变得复杂

试试这个

InputMatrix=[1 2 3; 4 5 6; 9 1 2];
ave_matrix  = repmat(mean(InputMatrix),3,1)
(InputMatrix-ave_matrix)'*(InputMatrix-ave_matrix) / 2 % sample_num -1 which is 3-1

我看到你出错的地方,DataNumbers不是Rows *列 分母应为DataNumbers -1

InputMatrix=[1 2 3; 4 5 6; 9 1 2];
Average=mean(InputMatrix);
[Rows,Columns]=size(InputMatrix);

DataNumbers=Columns;

%% Substraction
for loop_row=1:Rows
    for loop_column=1:Columns
        Substract_Matrix(loop_row,loop_column)=InputMatrix(loop_row,loop_column)-Average(loop_column);
    end
 end

 %% Transpose
 for loop1=1:Rows
     for loop2=1:Columns
         Transpose_Matrix(loop2,loop1)=Substract_Matrix(loop1,loop2);
     end
 end


%% Multiply
CovarianceMatrix=(Transpose_Matrix*Substract_Matrix)/(DataNumbers-1);