lsolve.cg {Rlinsolve} | R Documentation |
Conjugate Gradient method
Description
Conjugate Gradient(CG) method is an iterative algorithm for solving a system of linear equations where the system
is symmetric and positive definite.
For a square matrix A
, it is required to be symmetric and positive definite.
For an overdetermined system where nrow(A)>ncol(A)
,
it is automatically transformed to the normal equation. Underdetermined system -
nrow(A)<ncol(A)
- is not supported. Preconditioning matrix M
, in theory, should be symmetric and positive definite
with fast computability for inverse, though it is not limited until the solver level.
Usage
lsolve.cg(
A,
B,
xinit = NA,
reltol = 1e-05,
maxiter = 10000,
preconditioner = diag(ncol(A)),
adjsym = TRUE,
verbose = TRUE
)
Arguments
A |
an |
B |
a vector of length |
xinit |
a length- |
reltol |
tolerance level for stopping iterations. |
maxiter |
maximum number of iterations allowed. |
preconditioner |
an |
adjsym |
a logical; |
verbose |
a logical; |
Value
a named list containing
- x
solution; a vector of length
n
or a matrix of size(n\times k)
.- iter
the number of iterations required.
- errors
a vector of errors for stopping criterion.
References
Hestenes MR, Stiefel E (1952). “Methods of conjugate gradients for solving linear systems.” Journal of Research of the National Bureau of Standards, 49(6), 409. ISSN 0091-0635.
Examples
## Overdetermined System
set.seed(100)
A = matrix(rnorm(10*5),nrow=10)
x = rnorm(5)
b = A%*%x
out1 = lsolve.sor(A,b,w=0.5)
out2 = lsolve.cg(A,b)
matout = cbind(matrix(x),out1$x, out2$x);
colnames(matout) = c("true x","SSOR result", "CG result")
print(matout)