: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)