Class RawSingularValue
- All Implemented Interfaces:
MatrixDecomposition<Double>, MatrixDecomposition.EconomySize<Double>, MatrixDecomposition.Ordered<Double>, MatrixDecomposition.RankRevealing<Double>, MatrixDecomposition.Solver<Double>, MatrixDecomposition.Values<Double>, SingularValue<Double>, Provider2D, Provider2D.Condition, Provider2D.Inverse<Optional<MatrixStore<Double>>>, Provider2D.Rank, Provider2D.Solution<Optional<MatrixStore<Double>>>, InverterTask<Double>, MatrixTask<Double>, SolverTask<Double>, InvertibleFactor<Double>, Structure1D, Structure2D
Singular Value Decomposition.
For an m-by-n matrix A with m >= n, the singular value decomposition is an m-by-n orthogonal matrix U, an n-by-n diagonal matrix S, and an n-by-n orthogonal matrix V so that A = U*S*V'.
The singular values, sigma[k] = S[k][k], are ordered so that sigma[0] >= sigma[1] >= ... >= sigma[n-1].
The singular value decompostion always exists, so the constructor will never fail. The matrix condition number and the effective numerical rank can be computed from this decomposition.
-
Nested Class Summary
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 intCalculation row and column dimensions, possibly transposed from the inputprivate MatrixStore<Double> private booleanprivate double[][]Arrays for internal storage of U and V.private double[][]private intCalculation row and column dimensions, possibly transposed from the inputprivate double[]Array for internal storage of singular values.private double[]Fields inherited from interface MatrixDecomposition
TYPICAL -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidbtran(double[] arg) voidbtran(PhysicalStore<Double> arg) Backwards-transformationprotected booleanbooleancomputeValuesOnly(Access2D.Collectable<Double, ? super TransformableRegion<Double>> matrix) intcountSignificant(double threshold) booleandecompose(Access2D.Collectable<Double, ? super TransformableRegion<Double>> matrix) (package private) booleandoDecompose(Access2D.Collectable<Double, ? super PhysicalStore<Double>> matrix, boolean factors) voidftran(double[] arg) doubleThe condition number.getD()Deprecated.doubleSometimes also called the Schatten 2-norm or Hilbert-Schmidt norm.The output must be a "right inverse" and a "generalised inverse".getInverse(PhysicalStore<Double> preallocated) Implementing this method is optional.doublegetKyFanNorm(int k) Ky Fan k-norm.doubleTwo normdoublegetS()voidgetSingularValues(double[] values) getSolution(Access2D.Collectable<Double, ? super PhysicalStore<Double>> rhs, PhysicalStore<Double> preallocated) Implementing this method is optional.doublegetU()If [A] is m-by-n and its rank is r, then: The first r columns of [U] span the column space, range or image of [A]. The last m-r columns of [U] span the left nullspace or cokernel of [A]. Calculating the QR decomposition of [A] is a faster alternative.getV()If [A] is m-by-n and its rank is r, then: The first r columns of [V] span the row space or coimage of [A]. The last n-r columns of [V] span the nullspace or kernel of [A]. Calculating the QR decomposition of [A]T is a faster alternative.invert(Access2D<?> original, PhysicalStore<Double> preallocated) Exactly how (if at all) a specific implementation makes use ofpreallocatedis not specified by this interface.booleanbooleanbooleanThis is a property of the algorithm/implementation, not the data.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.preallocate(int nbEquations, int nbVariables, int nbSolutions) voidreset()Delete computed results, and resets attributes to default valuessolve(Access2D<?> body, Access2D<?> rhs, PhysicalStore<Double> preallocated) Exactly how (if at all) a specific implementation makes use ofpreallocatedis not specified by this interface.Methods inherited from class RawDecomposition
checkSymmetry, getColDim, getInternalData, getInternalStore, getRowDim, make, newRawStore, reset, wrapMethods 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 InverterTask
invert, preallocateMethods inherited from interface MatrixDecomposition
isComputedMethods inherited from interface MatrixDecomposition.RankRevealing
getRankMethods inherited from interface MatrixDecomposition.Solver
compute, getSolution, invert, preallocate, solve, toInverseProvider, toSolutionProviderMethods inherited from interface SingularValue
ftran, reconstruct, 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
-
e
private double[] e -
m
private int mCalculation row and column dimensions, possibly transposed from the input -
n
private int nCalculation row and column dimensions, possibly transposed from the input -
myInverse
-
myTransposed
private boolean myTransposed -
myUt
private double[][] myUtArrays for internal storage of U and V. -
myVt
private double[][] myVt -
s
private double[] sArray for internal storage of singular values. -
w
private double[] w
-
-
Constructor Details
-
RawSingularValue
RawSingularValue()Not recommended to use this constructor directly. Consider using the static factory methodinstead.invalid reference
org.ojalgo.matrix.decomposition.SingularValue#make(Access2D)
-
-
Method Details
-
btran
public void btran(double[] arg) - Specified by:
btranin interfaceInvertibleFactor<Double>- 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<Double>- Parameters:
arg- [b] transformed into [x]
-
computeValuesOnly
public boolean computeValuesOnly(Access2D.Collectable<Double, ? super TransformableRegion<Double>> matrix) - Specified by:
computeValuesOnlyin interfaceMatrixDecomposition.Values<Double>- Parameters:
matrix- The matrix to decompose- Returns:
- The same as
MatrixDecomposition.Solver.compute(Collectable)orMatrixDecomposition.decompose(Collectable)if the instance does not implementMatrixDecomposition.Solver.
-
countSignificant
public int countSignificant(double threshold) - Specified by:
countSignificantin interfaceMatrixDecomposition.RankRevealing<Double>- Parameters:
threshold- Significance limit- Returns:
- The number of elements in the diagonal matrix that are greater than the threshold
-
decompose
- Specified by:
decomposein interfaceMatrixDecomposition<Double>- Parameters:
matrix- A matrix to decompose- Returns:
- true if decomposition suceeded; false if not
-
ftran
public void ftran(double[] arg) - Specified by:
ftranin interfaceInvertibleFactor<Double>- See Also:
-
getCondition
public double getCondition()Description copied from interface:SingularValueThe condition number.- Specified by:
getConditionin interfaceProvider2D.Condition- Specified by:
getConditionin interfaceSingularValue<Double>- Returns:
- The largest singular value divided by the smallest singular value.
-
getCovariance
- Specified by:
getCovariancein interfaceSingularValue<Double>- Returns:
- [[A]T[A]]-1 Where [A] is the original matrix.
-
getD
Deprecated.UsegetS()instead- Specified by:
getDin interfaceSingularValue<Double>- Returns:
- The diagonal matrix of singular values.
-
getFrobeniusNorm
public double getFrobeniusNorm()Description copied from interface:SingularValueSometimes also called the Schatten 2-norm or Hilbert-Schmidt norm.- Specified by:
getFrobeniusNormin interfaceSingularValue<Double>- 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<Double>
-
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<Double>- 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<Double>- Parameters:
k- The number of singular values to add up.- Returns:
- The sum of the k largest singular values.
-
getOperatorNorm
public double getOperatorNorm()Two norm- Specified by:
getOperatorNormin interfaceSingularValue<Double>- Returns:
- max(S)
-
getRankThreshold
public double getRankThreshold()- Specified by:
getRankThresholdin interfaceMatrixDecomposition.RankRevealing<Double>
-
getS
- Specified by:
getSin interfaceSingularValue<Double>- Returns:
- The diagonal matrix of singular values.
-
getSingularValues
- Specified by:
getSingularValuesin interfaceSingularValue<Double>- Returns:
- The singular values ordered in descending order.
-
getSingularValues
public void getSingularValues(double[] values) - Specified by:
getSingularValuesin interfaceSingularValue<Double>- Parameters:
values- An array that will receive the singular values
-
getSolution
public MatrixStore<Double> getSolution(Access2D.Collectable<Double, ? super PhysicalStore<Double>> rhs, PhysicalStore<Double> 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<Double>- 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
-
getTraceNorm
public double getTraceNorm()- Specified by:
getTraceNormin interfaceSingularValue<Double>
-
getU
Description copied from interface:SingularValueIf [A] is m-by-n and its rank is r, then:- The first r columns of [U] span the column space, range or image of [A].
- The last m-r columns of [U] span the left nullspace or cokernel of [A].
- Specified by:
getUin interfaceSingularValue<Double>
-
getV
Description copied from interface:SingularValueIf [A] is m-by-n and its rank is r, then:- The first r columns of [V] span the row space or coimage of [A].
- The last n-r columns of [V] span the nullspace or kernel of [A].
- Specified by:
getVin interfaceSingularValue<Double>
-
invert
public MatrixStore<Double> invert(Access2D<?> original, PhysicalStore<Double> 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<Double>- 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
-
isFullRank
public boolean isFullRank()- Specified by:
isFullRankin interfaceMatrixDecomposition.RankRevealing<Double>- Returns:
- true if the rank is equal to the minimum of the row and column dimensions; false if not
-
isFullSize
public boolean isFullSize()- Specified by:
isFullSizein interfaceMatrixDecomposition.EconomySize<Double>- Returns:
- True if it will generate a full sized decomposition.
-
isOrdered
public boolean isOrdered()Description copied from interface:MatrixDecomposition.OrderedThis is a property of the algorithm/implementation, not the data. Typically relevant forSingularValue,Eigenvalueor anyMatrixDecomposition.RankRevealingdecomposition.- Specified by:
isOrderedin interfaceMatrixDecomposition.Ordered<Double>- Returns:
- true if the rows/columns of the returned matrix factors are guaranteed some specific order; false if there is no such guarantee.
-
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<Double>- Overrides:
isSolvablein classAbstractDecomposition<Double, R064Store>- 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).
-
preallocate
- Specified by:
preallocatein interfaceSolverTask<Double>
-
reset
public void reset()Description copied from interface:MatrixDecompositionDelete computed results, and resets attributes to default values- Specified by:
resetin interfaceMatrixDecomposition<Double>- Overrides:
resetin classAbstractDecomposition<Double, R064Store>
-
solve
public MatrixStore<Double> solve(Access2D<?> body, Access2D<?> rhs, PhysicalStore<Double> 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<Double>- 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<Double, R064Store>
-
doDecompose
boolean doDecompose(Access2D.Collectable<Double, ? super PhysicalStore<Double>> matrix, boolean factors)
-
getS()instead