:orphan:
# KSPLSQR
Implements LSQR
## Options Database Keys
- ***-ksp_lsqr_set_standard_error -*** set standard error estimates of solution, see `KSPLSQRSetComputeStandardErrorVec()` and `KSPLSQRGetStandardErrorVec()`
- ***-ksp_lsqr_exact_mat_norm -*** compute exact matrix norm instead of iteratively refined estimate, see `KSPLSQRSetExactMatNorm()`
- ***-ksp_lsqr_monitor -*** monitor residual norm, norm of residual of normal equations A'*A x = A' b, and estimate of matrix norm ||A||
## 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
[](ch_ksp), `KSPCreate()`, `KSPSetType()`, `KSPType`, `KSP`, `KSPSolve()`, `KSPLSQRConvergedDefault()`, `KSPLSQRSetComputeStandardErrorVec()`, `KSPLSQRGetStandardErrorVec()`, `KSPLSQRSetExactMatNorm()`, `KSPLSQRMonitorResidualDrawLGCreate()`, `KSPLSQRMonitorResidualDrawLG()`, `KSPLSQRMonitorResidual()`
## Level
beginner
## Location
src/ksp/ksp/impls/lsqr/lsqr.c
## Examples
src/ksp/ksp/tutorials/ex27.c
---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/ksp/ksp/impls/lsqr/lsqr.c)
[Index of all KSP routines](index.md)
[Table of Contents for all manual pages](/manualpages/index.md)
[Index of all manual pages](/manualpages/singleindex.md)