Learn R Programming

Rlinsolve (version 0.3.2)

lsolve.bicgstab: Biconjugate Gradient Stabilized Method

Description

Biconjugate Gradient Stabilized(BiCGSTAB) method is a stabilized version of Biconjugate Gradient method for nonsymmetric systems using evaluations with respect to \(A^T\) as well as \(A\) in matrix-vector multiplications. 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.bicgstab(
  A,
  B,
  xinit = NA,
  reltol = 1e-05,
  maxiter = 1000,
  preconditioner = diag(ncol(A)),
  verbose = TRUE
)

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.

Arguments

A

an \((m\times n)\) dense or sparse matrix. See also sparseMatrix.

B

a vector of length \(m\) or an \((m\times k)\) matrix (dense or sparse) for solving \(k\) systems simultaneously.

xinit

a length-\(n\) vector for initial starting point. NA to start from a random initial point near 0.

reltol

tolerance level for stopping iterations.

maxiter

maximum number of iterations allowed.

preconditioner

an \((n\times n)\) preconditioning matrix; default is an identity matrix.

verbose

a logical; TRUE to show progress of computation.

References

van_der_vorst_bi-cgstab:_1992Rlinsolve

Examples

Run this code
## Overdetermined System
set.seed(100)
A = matrix(rnorm(10*5),nrow=10)
x = rnorm(5)
b = A%*%x

out1 = lsolve.cg(A,b)
out2 = lsolve.bicg(A,b)
out3 = lsolve.bicgstab(A,b)
matout = cbind(matrix(x),out1$x, out2$x, out3$x);
colnames(matout) = c("true x","CG result", "BiCG result", "BiCGSTAB result")
print(matout)


Run the code above in your browser using DataLab