# KSPLSQR#

Implements LSQR

## Options Database Keys#

set standard error estimates of solution, see**-ksp_lsqr_set_standard_error -**`KSPLSQRSetComputeStandardErrorVec()`

and`KSPLSQRGetStandardErrorVec()`

compute exact matrix norm instead of iteratively refined estimate, see**-ksp_lsqr_exact_mat_norm -**`KSPLSQRSetExactMatNorm()`

monitor residual norm, norm of residual of normal equations A’*A x = A’ b, and estimate of matrix norm ||A||**-ksp_lsqr_monitor -**

## Notes#

Supports non-square (rectangular) matrices.

This variant, when applied with no preconditioning is identical to the original algorithm in exact arithmetic; however, in practice, with no preconditioning
due to inexact arithmetic, it can converge differently. Hence when no preconditioner is used (`PCType`

`PCNONE`

) it automatically reverts to the original algorithm.

With the PETSc built-in preconditioners, such as `PCICC`

, one should call `KSPSetOperators`

(ksp,A,A’*A)) since the preconditioner needs to work
for the normal equations A’*A.

Supports only left preconditioning.

For least squares problems with nonzero residual A*x - b, there are additional convergence tests for the residual of the normal equations, A’*(b - Ax), see `KSPLSQRConvergedDefault()`

.

In exact arithmetic the LSQR method (with no preconditioning) is identical to the `KSPCG`

algorithm applied to the normal equations.
The preconditioned variant was implemented by Bas van’t Hof and is essentially a left preconditioning for the Normal Equations.
It appears the implementation with preconditioning tracks the true norm of the residual and uses that in the convergence test.

## Developer Note#

How is this related to the `KSPCGNE`

implementation? One difference is that `KSPCGNE`

applies
the preconditioner transpose times the preconditioner, so one does not need to pass A’*A as the third argument to `KSPSetOperators()`

.

## Reference#

**** -*** The original unpreconditioned algorithm can be found in Paige and Saunders, ACM Transactions on Mathematical Software, Vol 8, 1982.

## See Also#

KSP: Linear System Solvers, `KSPCreate()`

, `KSPSetType()`

, `KSPType`

, `KSP`

, `KSPSolve()`

, `KSPLSQRConvergedDefault()`

, `KSPLSQRSetComputeStandardErrorVec()`

, `KSPLSQRGetStandardErrorVec()`

, `KSPLSQRSetExactMatNorm()`

, `KSPLSQRMonitorResidualDrawLGCreate()`

, `KSPLSQRMonitorResidualDrawLG()`

, `KSPLSQRMonitorResidual()`

## Level#

beginner

## Location#

## Examples#

Index of all KSP routines

Table of Contents for all manual pages

Index of all manual pages