來源:http://www.cnblogs.com/cvlabs/archive/2010/05/08/1730319.html
Matlab協(xié)方差矩陣的計(jì)算原理 a = -1 1 2 -2 3 1 4 0 3 for i=1:size(a,2) for j=1:size(a,2) c(i,j)=sum((a(:,i)-mean(a(:,i))).*(a(:,j)-mean(a(:,j))))/(size(a,1)-1); end end c = 10.3333 -4.1667 3.0000 -4.1667 2.3333 -1.5000 3.0000 -1.5000 1.0000 c為求得的協(xié)方差矩陣,在matlab以矩陣a的每一列為變量,對(duì)應(yīng)的每一行為樣本。這樣在矩陣a中就有3個(gè)列變量分別為a(:,1), a(:,2), a(:,3)。 在協(xié)方差矩陣c中,每一個(gè)元素c(i,j)為對(duì)第i列與第j列的協(xié)方差,例如c(1,2) = -4.1667為第一列與第二列的協(xié)方差。
拿c(1,2)的求解過程來說 c(1,2)=sum((a(:,1)-mean(a(:,1))).*(a(:,2)-mean(a(:,2))))/(size(a,1)-1); 1. a(:,1)-mean(a(:,1)),第一列的元素減去該列的均值得到 -1.3333 -2.3333 3.6667 2, a(:,2)-mean(a(:,2)),第二列的元素減去該列的均值得到 -0.3333 1.6667 -1.3333 3, 再將第一步與第二部的結(jié)果相乘 -1.3333 -0.3333 0.4444 -2.3333 .* 1.6667 = -3.8889 3.6667 -1.3333 -4.8889
4, 再將結(jié)果求和/size(a,1)-1 得 -4.1667,該值即為c(1,2)的值。
再細(xì)看一下是不是與協(xié)方差公式:Cov(X,Y) = E{ [ (X-E(X) ] [ (Y-E(Y) ] } 過程基本一致呢,只是在第4步的時(shí)候matlab做了稍微的調(diào)整,自由度為n-1,減少了一行的樣本值個(gè)數(shù)。 |
|