maspack.solvers
Class ProjectedCGSolver

java.lang.Object
  extended by maspack.solvers.ProjectedCGSolver

public class ProjectedCGSolver
extends java.lang.Object

Solves linear systems using the conjugate gradient algorithm


Field Summary
 boolean debug
           
 
Constructor Summary
ProjectedCGSolver()
           
 
Method Summary
 int getMaxIterations()
           
 int getNumIterations()
          Returns the number of iterations associated with the last call to solve.
 double getRelativeResidual()
          Returns the relative residual ||A x - b||/||b|| at the end of the last call to solve.
 double getTolerance()
           
 IterativeSolver.ToleranceType getToleranceType()
           
 boolean isCompatible(int matrixType)
           
 void setMaxIterations(int max)
           
 void setTolerance(double tol)
           
 void setToleranceType(IterativeSolver.ToleranceType type)
           
 boolean solve(VectorNd x, VectorNd lam, LinearTransformNd A, SparseMatrixCRS G, VectorNd b, VectorNd g)
          Solves a linear system A x = b using the projected conjugate gradient method.
 boolean solve(VectorNd x, VectorNd lam, LinearTransformNd A, SparseMatrixCRS G, VectorNd b, VectorNd g, double tol, int maxIter)
          Solves a linear system A x = b using the projected conjugate gradient method.
 boolean solve(VectorNd x, VectorNd lam, LinearTransformNd A, SparseMatrixCRS G, VectorNd b, VectorNd g, double tol, int maxIter, LinearTransformNd P)
          Solves a linear system A x = b using the projected conjugate gradient method with a preconditioner.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

debug

public boolean debug
Constructor Detail

ProjectedCGSolver

public ProjectedCGSolver()
Method Detail

getTolerance

public double getTolerance()

setTolerance

public void setTolerance(double tol)

getToleranceType

public IterativeSolver.ToleranceType getToleranceType()

setToleranceType

public void setToleranceType(IterativeSolver.ToleranceType type)

getMaxIterations

public int getMaxIterations()

setMaxIterations

public void setMaxIterations(int max)

solve

public boolean solve(VectorNd x,
                     VectorNd lam,
                     LinearTransformNd A,
                     SparseMatrixCRS G,
                     VectorNd b,
                     VectorNd g)
Solves a linear system A x = b using the projected conjugate gradient method. The matrix associated with the linear system is represented implicitly by a LinearTransformNd. The method will iterate while relative residual ||A x - b||/||b|| is greater than a supplied tolerance and the number of iterations is less than a specified maximum.

Parameters:
x - result vector, as well as initial guess of the solution
A - linear transform for the system to be solved
G - constraint matrix
b - input vector
g - input vector for G
Returns:
true if a solution was found within the specified tolerance

solve

public boolean solve(VectorNd x,
                     VectorNd lam,
                     LinearTransformNd A,
                     SparseMatrixCRS G,
                     VectorNd b,
                     VectorNd g,
                     double tol,
                     int maxIter)
Solves a linear system A x = b using the projected conjugate gradient method. The matrix associated with the linear system is represented implicitly by a LinearTransformNd. The method will iterate while relative residual ||A x - b||/||b|| is greater than a supplied tolerance and the number of iterations is less than a specified maximum.

Parameters:
x - result vector, as well as initial guess of the solution
lam - result lambda, as well as initial guess of the solution
A - linear transform for the system to be solved
G - constraint matrix
b - input vector
g - input vector for G
tol - solution tolerance
maxIter - maximum number of iferations
Returns:
true if a solution was found within the specified tolerance

solve

public boolean solve(VectorNd x,
                     VectorNd lam,
                     LinearTransformNd A,
                     SparseMatrixCRS G,
                     VectorNd b,
                     VectorNd g,
                     double tol,
                     int maxIter,
                     LinearTransformNd P)
Solves a linear system A x = b using the projected conjugate gradient method with a preconditioner. The matrix associated with the linear system and the preconditioner are each represented implicitly by a LinearTransformNd. The mul method of the preconditioner should implement the transformation y = inv(M) x, where M is a a preconditioning matrix that approximates A. The method will iterate while relative residual ||A x - b||/||b|| is greater than a supplied tolerance and the number of iterations is less than a specified maximum.

Parameters:
x - result vector, as well as initial guess of the solution
lam - result lambda, as well as initial guess of the solution
A - linear transform for the system to be solved
G - constraint matrix
b - input vector
g - input vector for G
tol - solution tolerance
maxIter - maximum number of iferations
P - preconditioner (optional, may be specified as null)
Returns:
true if a solution was found within the specified tolerance

getNumIterations

public int getNumIterations()
Returns the number of iterations associated with the last call to solve.

Returns:
number of iterations

getRelativeResidual

public double getRelativeResidual()
Returns the relative residual ||A x - b||/||b|| at the end of the last call to solve.

Returns:
last relative residual

isCompatible

public boolean isCompatible(int matrixType)