[ https://issues.apache.org/jira/browse/MATH1045?page=com.atlassian.jira.plugin.system.issuetabpanels:commenttabpanel&focusedCommentId=13809009#comment13809009
]
Sean Owen commented on MATH1045:

Yes, this is a good point. It's safest to find the largest eigenvalue (by absolute value)
with a loop I think.
The final matrix in testUnsymmetric(), which is unsymmetric, shows this.
The symmetric matrix in testSquareRootNonPositiveDefinite() also shows this  the last eigenvalue
is the most negative, but is the largest in absolute value.
> EigenDecomposition.Solver should consider tiny values 0 for purposes of determining singularity
> 
>
> Key: MATH1045
> URL: https://issues.apache.org/jira/browse/MATH1045
> Project: Commons Math
> Issue Type: Bug
> Affects Versions: 3.2
> Reporter: Sean Owen
> Priority: Minor
> Labels: eigenvalue, singular
> Fix For: 3.3
>
> Attachments: MATH1045.patch, MATH1045.patch
>
>
> EigenDecomposition.Solver tests for singularity by comparing eigenvalues to 0 for exact
equality. Elsewhere in the class and in the code, of course, very small values are considered
0. This causes the solver to consider some singular matrices as nonsingular.
> The patch here includes a test as well showing the behavior  the matrix is clearly
singular but isn't considered as such since one eigenvalue are ~1e14 rather than exactly
0.
> (What I am not sure of is whether we should really be evaluating the *norm* of the imaginary
eigenvalues rather than real/imag components separately. But the javadoc says the solver only
supports real eigenvalues anyhow, so it's kind of moot since imag=0 for all eigenvalues.)

This message was sent by Atlassian JIRA
(v6.1#6144)
