[ 
https://issues.apache.org/jira/browse/MATH-611?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13060478#comment-13060478
 ] 

Christopher Nix commented on MATH-611:
--------------------------------------

With regard to speed, I've tried it on random arrays with up to 1,000,000 
elements and it's definitely faster than the current SVD implementation.

The current SVD implementation is noticeably slowed by the implementations of 
AbstractRealMatrix and TriDiagonalTransformer that use setEntry and getEntry on 
matrices within loops.  As such, matrix indices are checked to be in bounds at 
every iteration of a loop, when what we really should do is check the max and 
min indices only, if at all. (I've a further patch yet to submit on this).

If we remove the use of getEntry and setEntry in methods called by the current 
SVD implementation, and instead use direct array access, then the speed of the 
current implementation is improved significantly, however the stability remains 
unchanged.  Even with this change, the JAMA code is about twice as fast to 
converge (according to my profiler) and it is demonstrably more accurate.

Chris.

> A fast and stable SVD implementation from JAMA
> ----------------------------------------------
>
>                 Key: MATH-611
>                 URL: https://issues.apache.org/jira/browse/MATH-611
>             Project: Commons Math
>          Issue Type: Improvement
>    Affects Versions: 3.0, Nightly Builds
>            Reporter: Christopher Nix
>              Labels: patch
>             Fix For: 3.0, Nightly Builds
>
>         Attachments: SingularValueDecompositionImpl.java
>
>
> Common numerical stability issues with the current SVD implementation, ie 
> MATH-327, MATH-383, MATH-465, MATH-583 can all be solved by co-opting JAMA 
> code that is within the public domain.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to