This unsupported package is about a divide and conquer algorithm to compute SVD.

The implementation follows as closely as possible the following reference paper : 
http://www.cs.yale.edu/publications/techreports/tr933.pdf

The code documentation uses the same names for variables as the reference paper. The code, deflation included, is
working  but there are a few things that could be optimised as explained in the TODOBdsvd. 

In the code comments were put at the line where would be the third step of the algorithm so one could simply add the call 
of a function doing the last part of the algorithm and that would not require any knowledge of the part we implemented.

In the TODOBdcsvd we explain what is the main difficulty of the last part and suggest a reference paper to help solve it.

The implemented has trouble with fixed size matrices. 

In the actual implementation, it returns matrices of zero when ask to do a svd on an int matrix. 


Paper for the third part:
http://www.stat.uchicago.edu/~lekheng/courses/302/classics/greengard-rokhlin.pdf

