回复 第8楼 的 nan.xiao:How about this somewhat empirical cutoff (assuming positive semidefiniteness):
- Get all eigenvalues, <bblatex>\lambda_1, \dots, \lambda_n</bblatex>;
- Set the smallest <bblatex>k=1</bblatex> eigenvalue to zero;
- Recompute eigenvalues from the reconstructed matrix and get the maximum absolute cutoff <bblatex>\lambda^{(0)}</bblatex> among the last <bblatex>k</bblatex> new eigenvalues;
- Let <bblatex>k_1 = \sum_{i=1}^n I(|\lambda_i|<=\lambda^{(0)})</bblatex>;
- If <bblatex>k_1=k</bblatex>, then stop and use <bblatex>\lambda^{(0)}</bblatex> as the cutpoint;
- If <bblatex>k_1>k</bblatex>, then set the smallest <bblatex>k</bblatex> eigenvalues to zero and <bblatex>k\leftarrow k_1</bblatex> and goto step 3;
- If <bblatex>k_1<k</bblatex>, then reverse back to the previous cutoff.
The above procedure could be buggy, but the idea is to get some estimate of the size of small numerical eigenvalues when we know they should be exactly zero.