A Windows DLL and a .NET wrapper for LSQR.
LSQR is originally provided by the System Optimization Lab (SOL) at Stanford University. The initiators and original authors of LSQR are Chris C. Paige and Michael A. Saunders. Several people contributed: James Howse, Michael Friedlander, Eric Badel, and John Tomlin. LSqrWin is based on the C++ version provided by John Tomlin (translated from the C version provided by James W. Howse).
On the original Web site, LSQR is introduced as follows:
LSQR is an implementation of a conjugate-gradient type method for solving sparse linear equations and sparse least-squares problems:
- Solve Ax = b
- Minimize || Ax – b ||2
- Minimize || Ax – b ||2 + d2 ||x||2
The matrix A may be square or rectangular (over-determined or under-determined), and may have any rank. The scalar d is a damping parameter. If d > 0, the solution is “regularized” in the sense that a unique solution always exists, and ||x|| is bounded. The method is based on the Golub-Kahan bidiagonalization process. It is algebraically equivalent to applying the symmetric conjugate gradient (CG) method to the normal equations, (A’A + d2 I) x = A’b, but has better numerical properties, especially if A is ill-conditioned.
The solution (.sln) and project (.csproj/.vcproj) files provided in the downloadable packages were created with Visual Studio 2005. The binary files in the Bin folders were compiled with VS 2005; .NET Framework 2.0 is thus required to execute them.
Please consult ReadMe.txt (included in each downloadable package) for more information about the files in the corresponding package.
- LSqrWin 1.1: LSqrWin1.1.zip
Version 1.0 (October 2007)
The first release. Supports finding x that minimizes || Ax – b ||2. A C# usage example is included.
Version 1.1 (July 2008)
This release features a slightly different sparse matrix implementation. It is now easier to define a matrix. Furthermore, a 64-bit target platform option is available in the configuration menu. Last but not least, mutexes were replaced with critical sections for more efficient multithreading support.
The software is provided under the terms of Common Public License (CPL).