Class HermitianEvD<N extends Comparable<N>>
- All Implemented Interfaces:
Eigenvalue<N>, Eigenvalue.Spectral<N>, MatrixDecomposition<N>, MatrixDecomposition.Determinant<N>, MatrixDecomposition.EconomySize<N>, MatrixDecomposition.Hermitian<N>, MatrixDecomposition.Ordered<N>, MatrixDecomposition.RankRevealing<N>, MatrixDecomposition.Solver<N>, MatrixDecomposition.Values<N>, SingularValue<N>, Provider2D, Provider2D.Condition, Provider2D.Determinant<N>, Provider2D.Eigenpairs, 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:
HermitianEvD.C128, HermitianEvD.H256, HermitianEvD.Q128, HermitianEvD.R064, HermitianEvD.R128
If A is symmetric, then A = V*D*V' where the eigenvalue matrix D is diagonal and the eigenvector matrix V is orthogonal. I.e. A = V.times(D.times(V.transpose())) and V.times(V.transpose()) equals the identity matrix.
If A is not symmetric, then the eigenvalue matrix D is block diagonal with the real eigenvalues in 1-by-1 blocks and any complex eigenvalues, lambda + i*mu, in 2-by-2 blocks, [lambda, mu; -mu, lambda]. The columns of V represent the eigenvectors in the sense that A*V = V*D, i.e. A.times(V) equals V.times(D). The matrix V may be badly conditioned, or even singular, so the validity of the equation A = V*D*inverse(V) depends upon V.cond().
-
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 Eigenvalue
Eigenvalue.Eigenpair, Eigenvalue.Factory<N>, Eigenvalue.Generalisation, Eigenvalue.Generalised<N>, Eigenvalue.Spectral<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 SingularValue
SingularValue.Factory<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 double[]private double[]private MatrixStore<N> private MatrixStore<N> private final DenseTridiagonal<N> private MatrixStore<N> Fields inherited from interface Eigenvalue
C128, DESCENDING_NORM, H256, Q128, R064, R128Fields inherited from interface MatrixDecomposition
TYPICAL -
Constructor Summary
ConstructorsModifierConstructorDescriptionprivateHermitianEvD(PhysicalStore.Factory<N, ? extends DecompositionStore<N>> factory) protectedHermitianEvD(PhysicalStore.Factory<N, ? extends DecompositionStore<N>> factory, DenseTridiagonal<N> tridiagonal) -
Method Summary
Modifier and TypeMethodDescriptionvoidbtran(double[] arg) final voidbtran(PhysicalStore<N> arg) Backwards-transformationbooleancheckAndDecompose(MatrixStore<N> matrix) Absolutely must check if the matrix is hermitian or not.protected booleanintcountSignificant(double threshold) protected booleandoDecompose(Access2D.Collectable<N, ? super TransformableRegion<N>> matrix, boolean valuesOnly) voidftran(double[] arg) voidftran(PhysicalStore<N> arg) Forward-transformationdoubleThe condition number.A matrix' determinant is the product of its eigenvalues.voidgetEigenvalues(double[] realParts, Optional<double[]> imaginaryParts) doubleSometimes also called the Schatten 2-norm or Hilbert-Schmidt norm.The output must be a "right inverse" and a "generalised inverse".getInverse(PhysicalStore<N> preallocated) Implementing this method is optional.doublegetKyFanNorm(int k) Ky Fan k-norm.doubledoublegetS()If there are no negative eigenvalues this method will simply reuse the eigenvalue diagonal (D)getSolution(Access2D.Collectable<N, ? super PhysicalStore<N>> rhs, PhysicalStore<N> preallocated) Implementing this method is optional.getTrace()A matrix' trace is the sum of the diagonal elements.doublegetU()For SPD matrices U == V; for indefinite we must absorb eigenvalue sign into UThe output must be a "right inverse" and a "generalised inverse".invert(Access2D<?> original, PhysicalStore<N> preallocated) Exactly how (if at all) a specific implementation makes use ofpreallocatedis not specified by this interface.booleanbooleanIf [A] is hermitian then [V][D][V]-1 becomes [Q][D][Q]H...booleanThe eigenvalues in D (and the eigenvectors in V) are not necessarily ordered.booleanPlease 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()A symmetric (Hermitian) matrix is positive definite if all its eigenvalues are positive.protected MatrixStore<N> makeD()protected Array1D<ComplexNumber> protected MatrixStore<N> makeV()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.(package private) static voidtql2(double[] d, double[] e, RotateRight mtrxV) Methods inherited from class DenseEigenvalue
calculateDeterminant, computeValuesOnly, decompose, getColDim, getD, getEigenvalues, getMaxDim, getMinDim, getRowDim, getV, isValuesOnly, setD, setEigenvalues, setVMethods 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 DeterminantTask
calculateDeterminantMethods inherited from interface Eigenvalue
getD, getEigenpair, getEigenpairs, getEigenvalues, getEigenvectors, getVMethods inherited from interface InverterTask
preallocateMethods inherited from interface MatrixDecomposition
decompose, isComputedMethods inherited from interface MatrixDecomposition.Determinant
toDeterminantProviderMethods inherited from interface MatrixDecomposition.RankRevealing
getRank, isFullRankMethods inherited from interface MatrixDecomposition.Solver
compute, getSolution, invert, preallocate, solve, toInverseProvider, toSolutionProviderMethods inherited from interface MatrixDecomposition.Values
computeValuesOnlyMethods inherited from interface SingularValue
getD, getSingularValues, getV, reconstructMethods 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
-
d
private double[] d -
e
private double[] e -
myInverse
-
myS
-
mySingularValues
-
myTridiagonal
-
myU
-
-
Constructor Details
-
HermitianEvD
-
HermitianEvD
protected HermitianEvD(PhysicalStore.Factory<N, ? extends DecompositionStore<N>> factory, DenseTridiagonal<N> tridiagonal)
-
-
Method Details
-
tql2
-
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]
-
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
-
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>>- Specified by:
ftranin interfaceSingularValue<N extends Comparable<N>>- Parameters:
arg- [b] transformed into [x]
-
getCondition
public double getCondition()Description copied from interface:SingularValueThe condition number.- Specified by:
getConditionin interfaceProvider2D.Condition- Specified by:
getConditionin interfaceSingularValue<N extends Comparable<N>>- Returns:
- The largest singular value divided by the smallest singular value.
-
getCovariance
- Specified by:
getCovariancein interfaceSingularValue<N extends Comparable<N>>- Returns:
- [[A]T[A]]-1 Where [A] is the original matrix.
-
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
-
getEigenvalues
- Specified by:
getEigenvaluesin interfaceEigenvalue<N extends Comparable<N>>- Parameters:
realParts- An array that will receive the real parts of the eigenvaluesimaginaryParts- An optional array that, if present, will receive the imaginary parts of the eigenvalues
-
getFrobeniusNorm
public double getFrobeniusNorm()Description copied from interface:SingularValueSometimes also called the Schatten 2-norm or Hilbert-Schmidt norm.- Specified by:
getFrobeniusNormin interfaceSingularValue<N extends Comparable<N>>- Returns:
- The square root of the sum of squares of the singular values.
-
getInverse
Description copied from interface:MatrixDecomposition.SolverThe output must be a "right inverse" and a "generalised inverse".- Specified by:
getInversein interfaceMatrixDecomposition.Solver<N extends Comparable<N>>
-
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>>- 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
-
getKyFanNorm
public double getKyFanNorm(int k) Description copied from interface:SingularValueKy Fan k-norm.
The first Ky Fan k-norm is the operator norm (the largest singular value), and the last is called the trace norm (the sum of all singular values).
- Specified by:
getKyFanNormin interfaceSingularValue<N extends Comparable<N>>- Parameters:
k- The number of singular values to add up.- Returns:
- The sum of the k largest singular values.
-
getOperatorNorm
public double getOperatorNorm()- Specified by:
getOperatorNormin interfaceSingularValue<N extends Comparable<N>>- Returns:
- 2-norm
-
getRankThreshold
public double getRankThreshold()- Specified by:
getRankThresholdin interfaceMatrixDecomposition.RankRevealing<N extends Comparable<N>>
-
getS
If there are no negative eigenvalues this method will simply reuse the eigenvalue diagonal (D)- Specified by:
getSin interfaceSingularValue<N extends Comparable<N>>- Returns:
- The diagonal matrix of singular values.
-
getSingularValues
- Specified by:
getSingularValuesin interfaceSingularValue<N extends Comparable<N>>- Returns:
- The singular values ordered in descending order.
-
getSolution
public MatrixStore<N> getSolution(Access2D.Collectable<N, ? super PhysicalStore<N>> rhs, PhysicalStore<N> preallocated) 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.getSolution(Collectable).- Specified by:
getSolutionin interfaceMatrixDecomposition.Solver<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/final/correct solution. UseSolverTask.preallocate(int, int, int)orSolverTask.preallocate(Structure2D, Structure2D)to get a suitable instance.- Returns:
- The solution
-
getTrace
Description copied from interface:EigenvalueA matrix' trace is the sum of the diagonal elements. It is also the sum of the eigenvalues. This method should return the sum of the eigenvalues.- Specified by:
getTracein interfaceEigenvalue<N extends Comparable<N>>- Returns:
- The matrix' trace
-
getTraceNorm
public double getTraceNorm()- Specified by:
getTraceNormin interfaceSingularValue<N extends Comparable<N>>
-
getU
For SPD matrices U == V; for indefinite we must absorb eigenvalue sign into U- Specified by:
getUin interfaceSingularValue<N extends Comparable<N>>
-
invert
Description copied from interface:InverterTaskThe output must be a "right inverse" and a "generalised inverse".- Specified by:
invertin interfaceInverterTask<N extends Comparable<N>>- Throws:
RecoverableCondition
-
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()- Specified by:
isFullSizein interfaceMatrixDecomposition.EconomySize<N extends Comparable<N>>- Returns:
- True if it will generate a full sized decomposition.
-
isHermitian
public boolean isHermitian()Description copied from interface:EigenvalueIf [A] is hermitian then [V][D][V]-1 becomes [Q][D][Q]H...- Specified by:
isHermitianin interfaceEigenvalue<N extends Comparable<N>>
-
isOrdered
public boolean isOrdered()Description copied from interface:EigenvalueThe eigenvalues in D (and the eigenvectors in V) are not necessarily ordered. This is a property of the algorithm/implementation, not the data.- Specified by:
isOrderedin interfaceEigenvalue<N extends Comparable<N>>- Specified by:
isOrderedin interfaceMatrixDecomposition.Ordered<N extends Comparable<N>>- Returns:
- true if they are ordered
-
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:Eigenvalue.SpectralA symmetric (Hermitian) matrix is positive definite if all its eigenvalues are positive.- Specified by:
isSPDin interfaceEigenvalue.Spectral<N extends Comparable<N>>
-
preallocate
- Specified by:
preallocatein interfaceSolverTask<N extends Comparable<N>>
-
reconstruct
- Specified by:
reconstructin interfaceEigenvalue<N extends Comparable<N>>- Specified by:
reconstructin interfaceEigenvalue.Spectral<N extends Comparable<N>>- Specified by:
reconstructin interfaceMatrixDecomposition<N extends Comparable<N>>- Specified by:
reconstructin interfaceSingularValue<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 classDenseEigenvalue<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>>>
-
doDecompose
protected boolean doDecompose(Access2D.Collectable<N, ? super TransformableRegion<N>> matrix, boolean valuesOnly) - Specified by:
doDecomposein classDenseEigenvalue<N extends Comparable<N>>
-
makeD
- Specified by:
makeDin classDenseEigenvalue<N extends Comparable<N>>
-
makeEigenvalues
- Specified by:
makeEigenvaluesin classDenseEigenvalue<N extends Comparable<N>>
-
makeV
- Specified by:
makeVin classDenseEigenvalue<N extends Comparable<N>>
-