Positive Semi-definite Matrix Problem

76 vues (au cours des 30 derniers jours)
Ming
Ming le 7 Août 2013
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 commentaires
Alexander
Alexander le 31 Mar 2015
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 le 31 Mar 2015
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.

Connectez-vous pour commenter.

Réponses (2)

Richard Brown
Richard Brown le 7 Août 2013
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 le 31 Mar 2015
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!!

Catégories

En savoir plus sur Linear Algebra dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by