invers from covariance of a matrix*matrix'
조회 수: 5 (최근 30일)
이전 댓글 표시
given a is a matrix, is the matrix of covariance of (a*a') is always singular?
댓글 수: 2
the cyclist
2012년 1월 2일
Can you please clarify? Are you interested in the singularity of cov(a) for arbitrary a, or of cov(b), for b = (a*a')?
채택된 답변
Teja Muppirala
2012년 1월 4일
cov(a) is ALWAYS singular for ANY square matrix a, because you subtract off the column means. This guarantees that you reduces the rank by one (unless it is already singular) before multiplying the matrix with its transpose.
a = rand(5,5); % a is an arbitrary square matrix
rank(a) %<-- is 5
a2 = bsxfun(@minus, a, mean(a));
rank(a2) %<-- is now 4
cova = a2'*a2/4 %<-- (rank 4) x (rank 4) = rank 4
cov(a) %<-- This is the same as "cova"
rank(cova) %<-- verify this is rank 4
댓글 수: 0
추가 답변 (1개)
the cyclist
2012년 1월 2일
a = [1 0; 0 1]
is an example of a matrix for which (a*a') is not singular.
Did you mean non-singular?
댓글 수: 8
Walter Roberson
2012년 1월 3일
Just don't ask me _why_ it is singular. I didn't figure out Why, I just made sure square matrices could not get to those routines.
Walter Roberson
2012년 1월 3일
Experimentally, if you have a matrix A which is M by N, then rank(cov(A)) is min(M-1,N), and thus would be singular for a square matrix.
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!