SuanShu, a Java numerical and statistical library

com.numericalmethod.suanshu.matrix.doubles.matrixtype.sparse.solver.iterative.nonstationary
Class BiconjugateGradientSolver

java.lang.Object
  extended by com.numericalmethod.suanshu.matrix.doubles.matrixtype.sparse.solver.iterative.nonstationary.BiconjugateGradientSolver
All Implemented Interfaces:
IterativeSolver

public class BiconjugateGradientSolver
extends java.lang.Object
implements IterativeSolver

The Biconjugate Gradient method (BiCG) is useful for solving non-symmetric n-by-n linear systems. It generates two CG-like sequences of vectors, one based on a system with the original coefficient matrix A, and one on AT. Instead of orthogonalizing each sequence, they are made mutually orthogonal, or “bi-orthogonal”. This method, like CG, uses limited storage. It is useful when the matrix is nonsymmetric and nonsingular; however, convergence may be irregular, and there is a possibility that the method will break down. BiCG requires a multiplication with the coefficient matrix and with its transpose at each iteration.

Only left preconditioning is supported in this implementation.

See Also:
"Yousef Saad, “The Biconjugate Gradient Algorithm,” in Iterative Methods for Sparse Linear Systems, 2nd ed. 2000, ch. 7, sec. 7.3.1, p. 210-211."

Nested Class Summary
 
Nested classes/interfaces inherited from interface com.numericalmethod.suanshu.matrix.doubles.matrixtype.sparse.solver.iterative.IterativeSolver
IterativeSolver.ConvergenceFailure, IterativeSolver.Problem
 
Field Summary
static int DEFAULT_RESIDUAL_REFRESH_RATE
          The algorithm recomputes the residual as b - Axi once per this number of iterations
 
Constructor Summary
BiconjugateGradientSolver()
           
BiconjugateGradientSolver(int residualRefreshRate)
          The solver recomputes the residual as b - Axi once per this number of iterations
 
Method Summary
 Vector solve(IterativeSolver.Problem problem)
          Solve iteratively Ax = b until the solution is close enough, i.e., the norm of residual (b - Ax) is less than or equal to the specified iteration.
 Vector solve(IterativeSolver.Problem problem, IterationMonitor monitor)
          Solve iteratively Ax = b until the solution is close enough, i.e., the norm of residual (b - Ax) is less than or equal to the specified iteration.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_RESIDUAL_REFRESH_RATE

public static final int DEFAULT_RESIDUAL_REFRESH_RATE
The algorithm recomputes the residual as b - Axi once per this number of iterations

See Also:
Constant Field Values
Constructor Detail

BiconjugateGradientSolver

public BiconjugateGradientSolver()

BiconjugateGradientSolver

public BiconjugateGradientSolver(int residualRefreshRate)
The solver recomputes the residual as b - Axi once per this number of iterations

Parameters:
residualRefreshRate - the number of iterations before the next refresh
Method Detail

solve

public Vector solve(IterativeSolver.Problem problem)
             throws IterativeSolver.ConvergenceFailure
Description copied from interface: IterativeSolver
Solve iteratively
Ax = b
until the solution is close enough, i.e., the norm of residual (b - Ax) is less than or equal to the specified iteration.

Specified by:
solve in interface IterativeSolver
Parameters:
problem - the problem of solving Ax = b
Returns:
the computed solution for the problem
Throws:
IterativeSolver.ConvergenceFailure - if the algorithm fails to converge

solve

public Vector solve(IterativeSolver.Problem problem,
                    IterationMonitor monitor)
             throws IterativeSolver.ConvergenceFailure
Description copied from interface: IterativeSolver
Solve iteratively
Ax = b
until the solution is close enough, i.e., the norm of residual (b - Ax) is less than or equal to the specified iteration.

In each iteration, the newly computed iterate is added to the IterationMonitor for statistics or diagnostic purpose.

Specified by:
solve in interface IterativeSolver
Parameters:
problem - the problem of solving Ax = b
monitor - an IterationMonitor instance
Returns:
the computed solution for the problem
Throws:
IterativeSolver.ConvergenceFailure - if the algorithm fails to converge

SuanShu, a Java numerical and statistical library

Copyright © 2011 Numerical Method Inc. Ltd. All Rights Reserved.