Class DenseCholesky<N extends Comparable<N>>
- All Implemented Interfaces:
Cholesky<N>, LDU<N>, MatrixDecomposition<N>, MatrixDecomposition.Determinant<N>, MatrixDecomposition.Hermitian<N>, MatrixDecomposition.Ordered<N>, MatrixDecomposition.RankRevealing<N>, MatrixDecomposition.Solver<N>, Provider2D, Provider2D.Determinant<N>, Provider2D.Inverse<Optional<MatrixStore<N>>>, Provider2D.Rank, Provider2D.Solution<Optional<MatrixStore<N>>>, DeterminantTask<N>, InverterTask<N>, MatrixTask<N>, SolverTask<N>, InvertibleFactor<N>, Structure1D, Structure2D
- Direct Known Subclasses:
DenseCholesky.C128, DenseCholesky.H256, DenseCholesky.Q128, DenseCholesky.R064, DenseCholesky.R128
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static final class(package private) static final class(package private) static final class(package private) static final class(package private) static final classNested classes/interfaces inherited from interface Cholesky
Cholesky.Factory<N>Nested classes/interfaces inherited from interface InvertibleFactor
InvertibleFactor.IdentityFactor<N>Nested classes/interfaces inherited from interface MatrixDecomposition
MatrixDecomposition.Determinant<N>, MatrixDecomposition.EconomySize<N>, MatrixDecomposition.Factory<D>, MatrixDecomposition.Hermitian<N>, MatrixDecomposition.Ordered<N>, MatrixDecomposition.Pivoting<N>, MatrixDecomposition.RankRevealing<N>, MatrixDecomposition.Solver<N>, MatrixDecomposition.Updatable<N>, MatrixDecomposition.Values<N>Nested classes/interfaces inherited from interface Provider2D
Provider2D.Condition, Provider2D.Determinant<N>, Provider2D.Eigenpairs, Provider2D.Hermitian, Provider2D.Inverse<M>, Provider2D.Rank, Provider2D.Solution<M>, Provider2D.Symmetric, Provider2D.Trace<N>Nested classes/interfaces inherited from interface Structure1D
Structure1D.BasicMapper<T>, Structure1D.IndexMapper<T>, Structure1D.IntIndex, Structure1D.LongIndex, Structure1D.LoopCallbackNested classes/interfaces inherited from interface Structure2D
Structure2D.IntRowColumn, Structure2D.Logical<S,B>, Structure2D.LongRowColumn, Structure2D.ReducibleTo1D<R>, Structure2D.Reshapable, Structure2D.RowColumnKey<R, C>, Structure2D.RowColumnMapper<R, C> -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleprivate doubleprivate booleanFields inherited from interface MatrixDecomposition
TYPICAL -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedDenseCholesky(PhysicalStore.Factory<N, ? extends DecompositionStore<N>> aFactory) -
Method Summary
Modifier and TypeMethodDescriptionvoidbtran(double[] arg) voidbtran(PhysicalStore<N> arg) Backwards-transformationcalculateDeterminant(Access2D<?> matrix) booleancheckAndDecompose(MatrixStore<N> matrix) Absolutely must check if the matrix is hermitian or not.protected boolean(package private) booleancompute(Access2D.Collectable<N, ? super PhysicalStore<N>> matrix, boolean checkHermitian) intcountSignificant(double threshold) booleandecompose(Access2D.Collectable<N, ? super TransformableRegion<N>> aStore) voidftran(double[] arg) voidftran(PhysicalStore<N> arg) Forward-transformationA matrix' determinant is the product of its eigenvalues.getInverse(PhysicalStore<N> preallocated) Implementing this method is optional.getL()Must implement eitherCholesky.getL()orCholesky.getR().doublegetSolution(Access2D.Collectable<N, ? super PhysicalStore<N>> rhs, PhysicalStore<N> preallocated) Solves [this][X] = [rhs] by first solvinginvert(Access2D<?> original, PhysicalStore<N> preallocated) Exactly how (if at all) a specific implementation makes use ofpreallocatedis not specified by this interface.booleanbooleanPlease note that producing a pseudoinverse and/or a least squares solution is ok! The return value, of this method, is not an indication of if the decomposed matrix is square, has full rank, is postive definite or whatever.booleanisSPD()To use the Cholesky decomposition rather than the LU decomposition the matrix must be symmetric and positive definite.preallocate(int nbEquations, int nbVariables, int nbSolutions) voidreset()Delete computed results, and resets attributes to default valuessolve(Access2D<?> body, Access2D<?> rhs, PhysicalStore<N> preallocated) Exactly how (if at all) a specific implementation makes use ofpreallocatedis not specified by this interface.Methods inherited from class InPlaceDecomposition
getColDim, getInPlace, getInverse, getRowDim, setInPlaceMethods inherited from class AbstractDecomposition
aggregator, applyPivotOrder, applyReverseOrder, collect, computed, copyColumn, copyRow, function, getDimensionalEpsilon, isAspectRatioNormal, isComputed, makeArray, makeDiagonal, makeEye, makeHouseholder, makeIdentity, makeRotation, makeRotation, makeZero, makeZero, scalar, wrapMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Cholesky
getR, reconstructMethods inherited from interface InverterTask
invert, preallocateMethods inherited from interface MatrixDecomposition
isComputedMethods inherited from interface MatrixDecomposition.Determinant
toDeterminantProviderMethods inherited from interface MatrixDecomposition.RankRevealing
getRank, isFullRankMethods inherited from interface MatrixDecomposition.Solver
compute, getInverse, getSolution, invert, preallocate, solve, toInverseProvider, toSolutionProviderMethods inherited from interface SolverTask
preallocate, solveMethods inherited from interface Structure2D
count, countColumns, countRows, firstInColumn, firstInRow, getColDim, getMaxDim, getMinDim, getRowDim, isEmpty, isFat, isScalar, isSquare, isTall, isVector, limitOfColumn, limitOfRow, size
-
Field Details
-
myMaxDiag
private double myMaxDiag -
myMinDiag
private double myMinDiag -
mySPD
private boolean mySPD
-
-
Constructor Details
-
DenseCholesky
-
-
Method Details
-
btran
public void btran(double[] arg) - Specified by:
btranin interfaceInvertibleFactor<N extends Comparable<N>>- See Also:
-
btran
Description copied from interface:InvertibleFactorBackwards-transformationSolve [x]T[A] = [b]T (equivalent to [A]T[x] = [b]) by transforming [b] into [x] in-place.
- Specified by:
btranin interfaceInvertibleFactor<N extends Comparable<N>>- Parameters:
arg- [b] transformed into [x]
-
calculateDeterminant
- Specified by:
calculateDeterminantin interfaceDeterminantTask<N extends Comparable<N>>
-
checkAndDecompose
Description copied from interface:MatrixDecomposition.HermitianAbsolutely must check if the matrix is hermitian or not. Then, depending on the result different paths can be chosen - compute or not / choose different algorithms...- Specified by:
checkAndDecomposein interfaceMatrixDecomposition.Hermitian<N extends Comparable<N>>- Parameters:
matrix- A matrix to check and then (maybe) decompose- Returns:
- true if the hermitian check passed and decomposition succeeded; false if not
-
countSignificant
public int countSignificant(double threshold) - Specified by:
countSignificantin interfaceMatrixDecomposition.RankRevealing<N extends Comparable<N>>- Parameters:
threshold- Significance limit- Returns:
- The number of elements in the diagonal matrix that are greater than the threshold
-
decompose
- Specified by:
decomposein interfaceMatrixDecomposition<N extends Comparable<N>>- Parameters:
aStore- A matrix to decompose- Returns:
- true if decomposition suceeded; false if not
-
ftran
public void ftran(double[] arg) - Specified by:
ftranin interfaceInvertibleFactor<N extends Comparable<N>>- See Also:
-
ftran
Description copied from interface:InvertibleFactorForward-transformationSolve [A][x] = [b] by transforming [b] into [x] in-place.
- Specified by:
ftranin interfaceInvertibleFactor<N extends Comparable<N>>- Parameters:
arg- [b] transformed into [x]
-
getDeterminant
Description copied from interface:MatrixDecomposition.DeterminantA matrix' determinant is the product of its eigenvalues.
- Specified by:
getDeterminantin interfaceMatrixDecomposition.Determinant<N extends Comparable<N>>- Specified by:
getDeterminantin interfaceProvider2D.Determinant<N extends Comparable<N>>- Returns:
- The matrix' determinant
-
getInverse
Description copied from interface:MatrixDecomposition.SolverImplementing this method is optional.
Exactly how a specific implementation makes use of
preallocatedis not specified by this interface. It must be documented for each implementation.Should produce the same results as calling
MatrixDecomposition.Solver.getInverse().- Specified by:
getInversein interfaceMatrixDecomposition.Solver<N extends Comparable<N>>- Overrides:
getInversein classInPlaceDecomposition<N extends Comparable<N>>- Parameters:
preallocated- Preallocated memory for the results, possibly some intermediate results. You must assume this is modified, but you cannot assume it will contain the full/final/correct solution. UseMatrixDecomposition.Solver.preallocate(int, int)orInverterTask.preallocate(Structure2D)to get a suitable instance.- Returns:
- The inverse, this is where you get the solution
-
getL
Description copied from interface:CholeskyMust implement eitherCholesky.getL()orCholesky.getR().- Specified by:
getLin interfaceCholesky<N extends Comparable<N>>
-
getRankThreshold
public double getRankThreshold()- Specified by:
getRankThresholdin interfaceMatrixDecomposition.RankRevealing<N extends Comparable<N>>
-
getSolution
public MatrixStore<N> getSolution(Access2D.Collectable<N, ? super PhysicalStore<N>> rhs, PhysicalStore<N> preallocated) Solves [this][X] = [rhs] by first solving[L][Y] = [RHS]
and then[U][X] = [Y]
.- Specified by:
getSolutionin interfaceMatrixDecomposition.Solver<N extends Comparable<N>>- Parameters:
rhs- The right hand sidepreallocated- Preallocated memory for the results, possibly some intermediate results. You must assume this is modified, but you cannot assume it will contain the full/final/correct solution. UseSolverTask.preallocate(int, int, int)orSolverTask.preallocate(Structure2D, Structure2D)to get a suitable instance.- Returns:
- [X] The solution will be written to "preallocated" and then returned.
-
invert
public MatrixStore<N> invert(Access2D<?> original, PhysicalStore<N> preallocated) throws RecoverableCondition Description copied from interface:InverterTaskExactly how (if at all) a specific implementation makes use of
preallocatedis not specified by this interface. It must be documented for each implementation.Should produce the same results as calling
InverterTask.invert(Access2D).Use
InverterTask.preallocate(Structure2D)to obtain a suitbalepreallocated.- Specified by:
invertin interfaceInverterTask<N extends Comparable<N>>- Parameters:
preallocated- Preallocated memory for the results, possibly some intermediate results. You must assume this is modified, but you cannot assume it will contain the full/final/correct solution.- Returns:
- The inverse
- Throws:
RecoverableCondition- TODO
-
isFullSize
public boolean isFullSize() -
isSolvable
public boolean isSolvable()Description copied from interface:MatrixDecomposition.SolverPlease note that producing a pseudoinverse and/or a least squares solution is ok! The return value, of this method, is not an indication of if the decomposed matrix is square, has full rank, is postive definite or whatever. It's that in combination with the specific decomposition algorithm's capabilities.- Specified by:
isSolvablein interfaceMatrixDecomposition.Solver<N extends Comparable<N>>- Overrides:
isSolvablein classAbstractDecomposition<N extends Comparable<N>, DecompositionStore<N extends Comparable<N>>>- Returns:
- true if this matrix decomposition is in a state to be able to deliver an inverse or an equation system solution (with some degree of numerical stability).
-
isSPD
public boolean isSPD()Description copied from interface:CholeskyTo use the Cholesky decomposition rather than the LU decomposition the matrix must be symmetric and positive definite. It is recommended that the decomposition algorithm checks for this during calculation. Possibly the matrix could be assumed to be symmetric (to improve performance) but tests should be made to assure the matrix is positive definite.- Specified by:
isSPDin interfaceCholesky<N extends Comparable<N>>- Returns:
- true if the tests did not fail.
-
preallocate
- Specified by:
preallocatein interfaceSolverTask<N extends Comparable<N>>
-
reset
public void reset()Description copied from interface:MatrixDecompositionDelete computed results, and resets attributes to default values- Specified by:
resetin interfaceMatrixDecomposition<N extends Comparable<N>>- Overrides:
resetin classAbstractDecomposition<N extends Comparable<N>, DecompositionStore<N extends Comparable<N>>>
-
solve
public MatrixStore<N> solve(Access2D<?> body, Access2D<?> rhs, PhysicalStore<N> preallocated) throws RecoverableCondition Description copied from interface:SolverTaskExactly how (if at all) a specific implementation makes use of
preallocatedis not specified by this interface. It must be documented for each implementation.Should produce the same results as calling
SolverTask.solve(Access2D, Access2D).Use
SolverTask.preallocate(Structure2D, Structure2D)to obtain a suitbalepreallocated.- Specified by:
solvein interfaceSolverTask<N extends Comparable<N>>- Parameters:
rhs- The Right Hand Side, wont be modfiedpreallocated- Preallocated memory for the results, possibly some intermediate results. You must assume this is modified, but you cannot assume it will contain the full/ /correct solution.- Returns:
- The solution
- Throws:
RecoverableCondition
-
checkSolvability
protected boolean checkSolvability()- Overrides:
checkSolvabilityin classAbstractDecomposition<N extends Comparable<N>, DecompositionStore<N extends Comparable<N>>>
-
compute
-