Learn R Programming

Rlinsolve (version 0.3.3)

lsolve.ssor: Symmetric Successive Over-Relaxation method

Description

Symmetric Successive Over-Relaxation(SSOR) method is a variant of Gauss-Seidel method for solving a system of linear equations, with a decomposition \(A = D+L+U\) where \(D\) is a diagonal matrix and \(L\) and \(U\) are strictly lower/upper triangular matrix respectively. For a square matrix \(A\), it is required to be diagonally dominant or symmetric and positive definite like GS method. 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.

Usage

lsolve.ssor(
  A,
  B,
  xinit = NA,
  reltol = 1e-05,
  maxiter = 1000,
  w = 1,
  adjsym = TRUE,
  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.

w

a weight value in \((0,2).\); w=1 leads to Gauss-Seidel method.

adjsym

a logical; TRUE to symmetrize the system by transforming the system into normal equation, FALSE otherwise.

verbose

a logical; TRUE to show progress of computation.

References

demmel_applied_1997Rlinsolve

Examples

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

out1 = lsolve.ssor(A,b)
out2 = lsolve.ssor(A,b,w=0.5)
out3 = lsolve.ssor(A,b,w=1.5)
matout = cbind(matrix(x),out1$x, out2$x, out3$x);
colnames(matout) = c("true x","SSOR w=1", "SSOR w=0.5", "SSOR w=1.5")
print(matout)
# }

Run the code above in your browser using DataLab