Class SparseCholesky
- All Implemented Interfaces:
Serializable
SparseMatrix.
Class SparseCholesky computes the Cholesky factorization of a
sparse symmetric positive definite matrix A. This factorization can
then be used to compute the solution of the linear system
\(Ax = b\).
Typically, the solution of a large sparse positive definite system \(Ax = b\) is done in 4 steps:
- In step one, an ordering algorithm is used to preserve sparsity in the Cholesky factor L of matrix A during the numerical factorization process. The new order can be described by a permutation matrix P.
- Step two consists of setting up the data structure for the Cholesky factor L, where \(PAP^T=LL^T\). This step is called the symbolic factorization phase of the computation. During symbolic factorization, only the sparsity pattern of sparse matrix A, i.e., the locations of the nonzero entries of matrix A are needed but not any of the elements themselves.
- In step 3, the numerical factorization phase, the Cholesky factorization is done numerically.
- Step 4 is the solution phase. Here, the numerical solution, x, to the original system is obtained by solving the two triangular systems \(Ly_1=Pb\), \(L^Ty_2=y_1\) and the permutation \(x=P^Ty_2\).
Class SparseCholesky realizes all four steps by algorithms
described in George and Liu (1981). Especially, step one, is a realization of
a minimum degree ordering algorithm. The numerical factorization in its
standard form is based on a sparse compressed storage scheme. Alternatively,
a multifrontal method can be used. The multifrontal method requires more
storage but will be faster than the standard method in certain cases. The
multifrontal method is based on the routines in Liu (1987). For a detailed
description of this method, see Liu (1990), also Duff and Reid(1983, 1984),
Ashcraft (1987) et al. (1987), and Liu (1986, 1989, 1992). The numerical
factorization method can be specified by using the
setNumericFactorizationMethod
The solvefactorSymbolicallyfactorNumericallysetNumericFactorsetSymbolicFactorsolve
method when different right-hand sides are to be solved.
There is a special situation where computations can be simplified.
If an application generates different sparse symmetric positive definite
coefficient matrices that all have the same sparsity pattern, then by using
methods getSymbolicFactor
setSymbolicFactor
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classThe matrix is not symmetric, positive definite.static classThe numeric Cholesky factorization of a matrix.static classThe symbolic Cholesky factorization of a matrix. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intIndicates the multifrontal method will be used for numeric factorization.static final intIndicates the method of George/Liu (1981) will be used for numeric factorization. -
Constructor Summary
ConstructorsConstructorDescriptionConstructs the matrix structure for the Cholesky factorization of a sparse symmetric positive definite matrix of typeSparseMatrix. -
Method Summary
Modifier and TypeMethodDescriptionvoidComputes the numeric factorization of a sparse real symmetric positive definite matrix.voidComputes the symbolic factorization of a sparse real symmetric positive definite matrix.doubleReturns the largest diagonal element of the Cholesky factor.longReturns the number of nonzeros in the Cholesky factor.Returns the numeric Cholesky factor.intReturns the method used in the numerical factorization of the permuted input matrix.doubleReturns the smallest diagonal element of the Cholesky factor.Returns the symbolic Cholesky factor.voidsetNumericFactor(SparseCholesky.NumericFactor numericFactor) Sets the numeric Cholesky factor to use in solving of a sparse positive definite system of linear equations \(Ax=b\).voidsetNumericFactorizationMethod(int method) Defines the method used in the numerical factorization of the permuted input matrix.voidsetSymbolicFactor(SparseCholesky.SymbolicFactor symbolicFactor) Sets the symbolic Cholesky factor to use in solving a sparse positive definite system of linear equations \(Ax=b\).double[]solve(double[] b) Computes the solution of a sparse real symmetric positive definite system of linear equations \(Ax=b\).
-
Field Details
-
STANDARD_METHOD
public static final int STANDARD_METHODIndicates the method of George/Liu (1981) will be used for numeric factorization.- See Also:
-
MULTIFRONTAL_METHOD
public static final int MULTIFRONTAL_METHODIndicates the multifrontal method will be used for numeric factorization.- See Also:
-
-
Constructor Details
-
SparseCholesky
Constructs the matrix structure for the Cholesky factorization of a sparse symmetric positive definite matrix of typeSparseMatrix.- Parameters:
A- TheSparseMatrixsymmetric positive definite matrix to be factored. Only the lower triangular part of the input matrix is used.
-
-
Method Details
-
solve
Computes the solution of a sparse real symmetric positive definite system of linear equations \(Ax=b\).This method solves the linear system \(Ax=b\), where A is symmetric positive definite. The solution is obtained in several steps:
- First, matrix A is permuted to reduce fill-in, leading to a sparse symmetric positive definite system \(PAP^T=Pb\).
- Then, matrix \(PAP^T\) is symbolically and numerically factored.
- The final solution is obtained by solving the systems \(Ly_1=Pb, L^Ty_2=y_1\) and \(x=P^Ty_2\).
By default this method implements all of the above steps. The factorizations are retained for later use by subsequent solves. By choosing appropriate methods within this class, the computation can be reduced to the solution of the system \(Ax=b\) for a given or precomputed symbolic or numeric factor.
- Parameters:
b- adoublevector of length equal to the order of matrixArepresenting the new right-hand side.- Returns:
- a
doublevector of length equal to the order of matrixArepresenting the solution to the system of linear equations \(Ax=b\). - Throws:
SparseCholesky.NotSPDException- is thrown if the input matrix is not symmetric, positive definite.
-
factorNumerically
Computes the numeric factorization of a sparse real symmetric positive definite matrix.This method numerically factors the instance of the constructed matrix A, where A is of type
SparseMatrixand is symmetric positive definite. The factorization is obtained in several steps:- First, matrix A is permuted to reduce fill-in, leading to a sparse symmetric positive definite matrix \(PAP^T\).
- Then, matrix \(PAP^T\) is symbolically and numerically factored.
Note that the symbolic factorization is not done if the symbolic factor has been supplied by the user through the
setSymbolicFactormethod.- Throws:
SparseCholesky.NotSPDException- is thrown if the input matrix is not symmetric, positive definite.
-
factorSymbolically
Computes the symbolic factorization of a sparse real symmetric positive definite matrix.This method symbolically factors the instance of the constructed matrix A, where A is of type
SparseMatrixand is symmetric positive definite. The factorization is obtained in several steps:- First, matrix A is permuted to reduce fill-in, leading to a sparse symmetric positive definite system \(PAP^T=Pb\).
- Then, matrix \(PAP^T\) is symbolically factored.
- Throws:
SparseCholesky.NotSPDException- is thrown if the input matrix is not symmetric, positive definite.
-
setSymbolicFactor
Sets the symbolic Cholesky factor to use in solving a sparse positive definite system of linear equations \(Ax=b\).- Parameters:
symbolicFactor- aSymbolicFactorcontaining the symbolic Cholesky factor. By default the symbolic factorization is computed.
-
getSymbolicFactor
Returns the symbolic Cholesky factor.- Returns:
- a
SymbolicFactorcontaining the symbolic Cholesky factor.
-
setNumericFactor
Sets the numeric Cholesky factor to use in solving of a sparse positive definite system of linear equations \(Ax=b\).- Parameters:
numericFactor- aNumericFactorobject containing the numeric Cholesky factor. By default the numeric factorization is computed.
-
getNumericFactor
Returns the numeric Cholesky factor.- Returns:
- a
NumericFactorcontaining the numeric Cholesky factor.
-
setNumericFactorizationMethod
public void setNumericFactorizationMethod(int method) Defines the method used in the numerical factorization of the permuted input matrix.- Parameters:
method- anintvalue specifying the method to choose:Method NameDescription STANDARD_METHODstandard method as described by George/Liu (1981). This is the default. MULTIFRONTAL_METHODmultifrontal method - Throws:
IllegalArgumentException- This exception is thrown when the value for method is notSTANDARD_METHODorMULTIFRONTAL_METHOD.
-
getNumericFactorizationMethod
public int getNumericFactorizationMethod()Returns the method used in the numerical factorization of the permuted input matrix.- Returns:
- an
intvalue equal to = 0 orSTANDARD_METHOD = 1 representing the method used in the numeric factorization of the permuted input matrix. SeeMULTIFRONTAL_METHOD for more details.setNumericFactorizationMethod
-
getSmallestDiagonalElement
public double getSmallestDiagonalElement()Returns the smallest diagonal element of the Cholesky factor.- Returns:
- a
doublevalue specifying the smallest diagonal element of the Cholesky factor. Use of this method is only sensible if a numeric factorization of the input matrix was done beforehand.
-
getLargestDiagonalElement
public double getLargestDiagonalElement()Returns the largest diagonal element of the Cholesky factor.- Returns:
- a
doublevalue specifying the largest diagonal element of the Cholesky factor. Use of this method is only sensible if a numeric factorization of the input matrix was done beforehand.
-
getNumberOfNonzeros
public long getNumberOfNonzeros()Returns the number of nonzeros in the Cholesky factor.- Returns:
- a
longvalue specifying the number of nonzeros (including the diagonal) of the Cholesky factor.
-