[ 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