Code in MATLAB, written by Emmanuel Candès and Stephen Becker, is available for non-commercial use. The code relies on PROPACK, which is a package for computing the partial SVD of sparse matrices. All necessary PROPACK files are included in the SVT zip file, along with some additional compiled PROPACK binaries that are unavailable on the PROPACK website.

Code may be downloaded here. The zip file (1 MB) contains MATLAB .m files, as well as MATLAB .mex files in the private subdirectory. The .mex files have been compiled into binaries for most common architectures/OS; if your architecture/OS is not supported, please let us know.

Please note: this code is still in beta version, and is not yet well documented. Basic instructions can be obtained by typing help SVT at the MATLAB command line. The only files of importance to the user are SVT.m and Test_SVT.m; the latter file is an example of how to use the code, and also makes sure the code works.


  • May 19 2009: SVT can now handle complex numbers.
  • June 10 2009: we are aware of a bug when using complex numbers and noisy data (a nonzero value of EPS). For now, complex data numbers with noisy data are not supported.
  • Oct 2 2009: on some platforms, the PROPACK calculations lose precision, causing the algorithm to fail to converge. We have modified a parameter to force PROPACK to maintain higher accuracy.
  • Nov 24 2009: the PROPACK precision error is caused by incompatibility with 64-bit architectures, in particular in dbdsqr. This has been fixed, but the new mex files are not yet in the SVT package. You may download them separately here. Also included is bdsqr in C (before, this relied on some code in fortran), so it is much easier compile on Windows computers; additionally, there is a file XonOmegaTranspose that can be used in place of XonOmega in the unlikely event that XonOmega is a speed bottleneck. For details, email Stephen.
  • Jan 24 2010: The fixes mentioned in the Nov 24 entry are now in the main package.

Please note: other than the differences noted above in the changelog, the only differences in the different zip files are the mex files (i.e. the algorithm is unchanged). We are working to make the compiled mex files compatible with all computers; please contact us if there are problems.

  • Above:
    Pictorial representation of the nuclear ball, i.e. 2 x 2 matrices with nuclear norm at most 1.

    navigate to: