Positive Semi-definite Matrix Problem

24 ビュー (過去 30 日間)
Ming 2013 年 8 月 7 日

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 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 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 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.
0 件のコメント-2 件の古いコメントを表示-2 件の古いコメントを非表示

サインインしてコメントする。

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 Center および File ExchangeLinear Algebra についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by