basic_JACOBI: Jacobi method

Description Usage Arguments Value References Examples

Description

Jacobi method is an iterative algorithm for solving a system of linear equations, with a decomposition A = D+R where D is a diagonal matrix. For a square matrix A, it is required to be diagonally dominant. 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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
lsolve.jacobi(
  A,
  B,
  xinit = NA,
  reltol = 1e-05,
  maxiter = 1000,
  weight = 2/3,
  adjsym = TRUE,
  verbose = TRUE
)

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.

weight

a real number in (0,1]; 1 for native Jacobi.

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.

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

\insertRef

demmel_applied_1997Rlinsolve

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
## Overdetermined System
set.seed(100)
A = matrix(rnorm(10*5),nrow=10)
x = rnorm(5)
b = A%*%x

out1 = lsolve.jacobi(A,b,weight=1,verbose=FALSE)   # unweighted
out2 = lsolve.jacobi(A,b,verbose=FALSE)            # weight of 0.66
out3 = lsolve.jacobi(A,b,weight=0.5,verbose=FALSE) # weight of 0.50
print("* lsolve.jacobi : overdetermined case example")
print(paste("*   error for unweighted    Jacobi case : ",norm(out1$x-x)))
print(paste("*   error for 0.66 weighted Jacobi case : ",norm(out2$x-x)))
print(paste("*   error for 0.50 weighted Jacobi case : ",norm(out3$x-x)))

Rlinsolve documentation built on Aug. 21, 2021, 5:09 p.m.