[
https://issues.apache.org/jira/browse/MATH-601?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13069982#comment-13069982
]
greg sterijevski commented on MATH-601:
---------------------------------------
Axel,
You are correct, while the getRank() emthods criterion was changed to:
double tol = FastMath.max(m, n) * singularValues[0] * EPS;
there is nothing happening at line 591. The moore-penrose will still be not
consistent to the ranks calculation.
Line 591 and onwards:
if (singularValues[i] > 0) {
a = 1 / singularValues[i];
} else {
a = 0;
}
So the change of the zero criterion is good, there is one more spot to fix.
I would also put a lower bound on tol:
tol = FastMath.max(m, n) * singularValues[0] * EPS;
if( FastMath.abs(tol) < FastMath.sqrt( MathUtils.SAFE_MIN) ){
}
-Greg
> SingularValueDecompositionImpl psuedoinverse is not consistent with Rank
> calculation
> ------------------------------------------------------------------------------------
>
> Key: MATH-601
> URL: https://issues.apache.org/jira/browse/MATH-601
> Project: Commons Math
> Issue Type: Bug
> Affects Versions: 2.2, 3.0
> Environment: All
> Reporter: greg sterijevski
> Labels: Pseudoinverse
> Attachments: SingularValueDecompositionImpl.patch
>
> Original Estimate: 24h
> Remaining Estimate: 24h
>
> In the SingularValueDecompositionImpl's internal private class Solver, a
> pseudo inverse matrix is calculated:
> In lines 2600-264 we have:
> if (singularValues[i] > 0) {
> a = 1 / singularValues[i];
> } else {
> a = 0;
> }
> This is not consistent with the manner in which rank is determined (lines 225
> to 233). That is to say a matrix could potentially be rank deficient, yet the
> psuedoinverse would still include the redundant columns...
> Also, there is the problem of very small singular values which could result
> in overflow.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira