Positive Semi-definite Matrix Problem

47 次查看(过去 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