Positive Semi-definite Matrix Problem

조회 수: 77 (최근 30일)
Ming
Ming 2013년 8월 7일
답변: Adam Wyatt 2015년 3월 31일
Suppose I have a large M by N dense matrix C, which is not full rank, when I do the calculation A=C'*C, matrix A should be a positive semi-definite matrix, but when I check the eigenvalues of matrix A, lots of them are negative values and very close to 0 (which should be exactly equal to zero due to rank).
I think this may due to numerical issue, is there any other way I could make matrix A positive semi-definite?
I tried to do this: [V,D]=eig(A); A=V*abs(D)*V'
it didn't work
Thanks
  댓글 수: 2
Alexander
Alexander 2015년 3월 31일
I have not an answer rather another related question: is there more or less stable way to check if the given matrix is positive semidefinite? Shall I check for non-negativity of all eigenvalues of the Hermitian part?
Torsten
Torsten 2015년 3월 31일
A is always positive semidefinite:
x'*A*x=(C*x)'*(C*x) >=0
for all vectors x.
Or did you mean something else ?
Best wishes
Torsten.

댓글을 달려면 로그인하십시오.

답변 (2개)

Richard Brown
Richard Brown 2013년 8월 7일
You're just going to have to live with it. Your matrix is PSD to double precision. If you look at the magnitude of the "zero" eigenvalues, they're probably all around 1e-14 or 1e-15. If your code relies on them being positive, you should amend this to test for eigenvalues near zero that may be negative.

Adam Wyatt
Adam Wyatt 2015년 3월 31일
FYI: C' is conjugate transpose - you should use C.' if you don't want the complex conjugate.
If it is indeed due to a numerical issue, then you can look at using an SVD, which can be useful for eliminating the near-singular values. Numerical Recipes has a good description of how one might achieve what you want: http://apps.nrbook.com/c/index.html - chapter 2.6
Using the SVD, you may be able to approximate your matrix by zeroing those vectors with near singular values. You might think approximating your matrix is bad, but do bear in mind that all numerics are approximations and linear algebra with large matrices can easily rack up quite large truncation errors!
Alternatively switch to arbitrary precision arithmetic. Matlab (via symbolic math toolbox), Maple and Mathematica all support this. However, speed will significantly decrease!!

카테고리

Help CenterFile Exchange에서 Linear Algebra에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by