Welcome to visit Teddy's homepage !


 
   
Software

 
         

 
 

SOFTWARE

Teddy is loving to transform his research into meaningful and efficient software. These software can be used not only for experts to improve research productivity, but also for ordinary users to make full use of them to their problems with ease.

  1. PRIMME MEX: A MATLAB interface for state-of-the-art eigensolver PRIMME

PRIMME MEX is a MATLAB interface for free software PRIMME (PReconditioned Iterative MultiMethod Eigensolver) which finds a number of eigenvalues and their corresponding eigenvectors of a real symmetric, or complex hermitian matrix A. It is a useful tool for both non-experts and experts to easily call PRIMME. Largest, smallest and interior eigenvalues are supported. Preconditioning can be used to accelerate convergence.

Our interface function PRIMME_EIGS is as easy as MATLAB internal function EIGS but provides more than 30 parameters to be tuned by the experts for optimal performance.

% Input: [A, numEvals, target, opts, eigsMethod, P]
% Output: [evals, evecs, norms, primmeout]

primme_eigs(A)
primme_eigs(A, numEvals)
primme_eigs(A, numEvals, target)
primme_eigs(A, numEvals, target, opts)
primme_eigs(A, numEvals, target, opts, eigsMethod)
primme_eigs(A, numEvals, target, opts, eigsMethod, P)
primme_eigs(A, numEvals, target, opts, eigsMethod, P1,P2)
primme_eigs(A, numEvals, target, opts, eigsMethod, Pfun)
primme_eigs(Afun, dim,...)

Please check out PRIMME in GitHub. Let us know if you find any bugs or problems. 


  1. PRIMME_SVDS: A state-of-the-art preconditioned SVD solver for large matrix

Teddy is working on developing PRIMME_SVDS, a full functionality preconditioned SVD solver for computing accurately singular triplets of large sparse matrices based on the PRIMME eigensolver. Currently, the function PRIMME_SVDS is like MATLAB internal function SVDS, which is very easy to be called in MATLAB through our PRIMME MEX. PRIMME_SVDS can compute not only largest singular triplets but also smallest singular singular triplets, a computational task challenging all existing SVD methods and SVD softwares. Instead of leveraging a widely accepted approach - Lanczos bidiagonalization, we demonstrate theoretically and experimentally that a well-tuned eigensolver solver with necessary enhancements can beat all existing SVD methods when seeking a few of smallest singular triplets, let alone taking advantage of preconditioner to accelerate convergence. PRIMME_SVDS can efficiently compute extreme singular triplets, with or without a preconditioner, or leveraging shift and invert operator. The key enhancements have been added into the PRIMME software and its MATLAB version is available. [Download PRIMME_SVDS with its Matlab Interface]. Note that this version is based on old-version of PRIMME but sufficiently for experimental investigations in MATLAB.

primme_svds is an interface between user function call and PRIMME_mex function. The primme_svds function requires at least one input (input matrix A) and output at least singular values of A. Like SVDS() function in the MATLAB, we provide different level function calls to satisfy users' demands:

%  Input: [A, numSvds, target, opts, eigsMethod, svdsMethod, P]
%  Output: [PRIMME_U, PRIMME_S, PRIMME_V , norms, primmeout]

primme_svds(A)
primme_svds(A, numSvds)
primme_svds(A, numSvds, target)
primme_svds(A, numSvds, target, opts)
primme_svds(A, numSvds, target, opts, eigsMethod)
primme_svds(A, numSvds, target, opts, eigsMethod, svdsMethod)
primme_svds(A, numSvds, target, opts, eigsMethod, svdsMethod, P)
primme_svds(A, numSvds, target, opts, eigsMethod, svdsMethod, P1,P2)
primme_svds(A, numSvds, target, opts, eigsMethod, svdsMethod, Pfun)      
primme_svds(Afun, M, N,...)

The new PRIMME_SVDS in PRIMME as well as its parallel implementation has been completed and now in its beta version. Please go to our PRIMME GitHub page to download and test it. [Download PRIMME_SVDS with its C Interface and parallel implementation]. Let us know if you find any bugs or problems.