Class AbstractLambdaMethod
- java.lang.Object
-
- org.orekit.estimation.measurements.gnss.AbstractLambdaMethod
-
- All Implemented Interfaces:
IntegerLeastSquareSolver
- Direct Known Subclasses:
LambdaMethod
,ModifiedLambdaMethod
public abstract class AbstractLambdaMethod extends Object implements IntegerLeastSquareSolver
Base class for decorrelation/reduction engine for LAMBDA type methods.This class is based on both the 1996 paper The LAMBDA method for integer ambiguity estimation: implementation aspects by Paul de Jonge and Christian Tiberius and on the 2005 paper A modified LAMBDA method for integer least-squares estimation by X.-W Chang, X. Yang and T. Zhou, Journal of Geodesy 79(9):552-565, DOI: 10.1007/s00190-005-0004-x
- Since:
- 10.0
- Author:
- Luc Maisonobe
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractLambdaMethod()
Constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
addSolution(long[] fixed, double squaredNorm)
Add a new solution.protected abstract void
discreteSearch()
Find the best solutions to the Integer Least Square problem.protected double[]
getDecorrelatedReference()
Get the reference decorrelated ambiguities.protected double[]
getDiagReference()
Get a reference to the diagonal matrix of the decomposition.protected double[]
getLowReference()
Get a reference to the lower triangular matrix of the decomposition.protected double
getMaxDistance()
Get the maximum of distance among the solutions found.protected int
getMaxSolution()
Get the maximum number of solutions seeked.protected int
getSize()
Get the size of the problem.protected int
getSolutionsSize()
Get the number of solutions found.protected int[]
getZInverseTransformationReference()
Get a reference to the Z inverse transformation matrix.protected void
integerGaussTransformation(int row, int col)
Perform one integer Gauss transformation.protected abstract void
inverseDecomposition()
Inverse the decomposition.protected int
lIndex(int row, int col)
Get the index of an entry in the lower triangular matrix.protected abstract void
ltdlDecomposition()
Perform Lᵀ.D.L = Q decomposition of the covariance matrix.protected void
permutation(int k0, double delta)
Perform one symmetric permutation involving rows/columnsk0
andk0+1
.protected IntegerLeastSquareSolution[]
recoverAmbiguities()
Recover ambiguities prior to the Z-transformation.protected abstract void
reduction()
Perform LAMBDA reduction.protected void
removeSolution()
Remove spurious solution.void
setComparator(Comparator<IntegerLeastSquareSolution> newCompartor)
Set a custom comparator for integer least square solutions comparison.IntegerLeastSquareSolution[]
solveILS(int nbSol, double[] floatAmbiguities, int[] indirection, RealMatrix covariance)
Find the best solutions to an Integer Least Square problem.protected int
zIndex(int row, int col)
Get the index of an entry in the Z transformation matrix.
-
-
-
Constructor Detail
-
AbstractLambdaMethod
protected AbstractLambdaMethod()
Constructor.By default a
IntegerLeastSquareComparator
is used to compare integer least square solutions
-
-
Method Detail
-
solveILS
public IntegerLeastSquareSolution[] solveILS(int nbSol, double[] floatAmbiguities, int[] indirection, RealMatrix covariance)
Find the best solutions to an Integer Least Square problem.- Specified by:
solveILS
in interfaceIntegerLeastSquareSolver
- Parameters:
nbSol
- number of solutions to search forfloatAmbiguities
- float estimates of ambiguitiesindirection
- indirection array to extract ambiguity covariances from global covariance matrixcovariance
- global covariance matrix (includes ambiguities among other parameters)- Returns:
- at most
nbSol
solutions a to the Integer Least Square problem, in increasing squared distance order
-
setComparator
public void setComparator(Comparator<IntegerLeastSquareSolution> newCompartor)
Set a custom comparator for integer least square solutions comparison.Calling this method overrides any comparator that could have been set beforehand. It also overrides the default
IntegerLeastSquareComparator
.- Parameters:
newCompartor
- new comparator to use- Since:
- 11.0
-
getDiagReference
protected double[] getDiagReference()
Get a reference to the diagonal matrix of the decomposition.BEWARE: the returned value is a reference to an internal array, it is only intended for subclasses use (hence the method is protected and not public).
- Returns:
- reference to the diagonal matrix of the decomposition
-
getLowReference
protected double[] getLowReference()
Get a reference to the lower triangular matrix of the decomposition.BEWARE: the returned value is a reference to an internal array, it is only intended for subclasses use (hence the method is protected and not public).
- Returns:
- reference to the lower triangular matrix of the decomposition
-
getDecorrelatedReference
protected double[] getDecorrelatedReference()
Get the reference decorrelated ambiguities.- Returns:
- reference to the decorrelated ambiguities.
-
getMaxSolution
protected int getMaxSolution()
Get the maximum number of solutions seeked.- Returns:
- the maximum number of solutions seeked
-
addSolution
protected void addSolution(long[] fixed, double squaredNorm)
Add a new solution.- Parameters:
fixed
- solution arraysquaredNorm
- squared distance to the corresponding float solution
-
removeSolution
protected void removeSolution()
Remove spurious solution.
-
getSolutionsSize
protected int getSolutionsSize()
Get the number of solutions found.- Returns:
- the number of solutions found
-
getMaxDistance
protected double getMaxDistance()
Get the maximum of distance among the solutions found. getting last of solutions as they are sorted in SortesSet- Returns:
- greatest distance of the solutions
- Since:
- 10.2
-
getZInverseTransformationReference
protected int[] getZInverseTransformationReference()
Get a reference to the Z inverse transformation matrix.BEWARE: the returned value is a reference to an internal array, it is only intended for subclasses use (hence the method is protected and not public). BEWARE: for the MODIFIED LAMBDA METHOD, the returned matrix Z is such that Q = Z'L'DLZ where Q is the covariance matrix and ' refers to the transposition operation
- Returns:
- array of integer corresponding to Z matrix
- Since:
- 10.2
-
getSize
protected int getSize()
Get the size of the problem. In the ILS problem, the integer returned is the size of the covariance matrix.- Returns:
- the size of the ILS problem
- Since:
- 10.2
-
ltdlDecomposition
protected abstract void ltdlDecomposition()
Perform Lᵀ.D.L = Q decomposition of the covariance matrix.
-
reduction
protected abstract void reduction()
Perform LAMBDA reduction.
-
discreteSearch
protected abstract void discreteSearch()
Find the best solutions to the Integer Least Square problem.
-
inverseDecomposition
protected abstract void inverseDecomposition()
Inverse the decomposition.This method transforms the Lᵀ.D.L = Q decomposition of covariance into the L⁻¹.D⁻¹.L⁻ᵀ = Q⁻¹ decomposition of the inverse of covariance.
-
integerGaussTransformation
protected void integerGaussTransformation(int row, int col)
Perform one integer Gauss transformation.This method corresponds to algorithm 2.1 in X.-W Chang, X. Yang and T. Zhou paper.
- Parameters:
row
- row index (counting from 0)col
- column index (counting from 0)
-
permutation
protected void permutation(int k0, double delta)
Perform one symmetric permutation involving rows/columnsk0
andk0+1
.This method corresponds to algorithm 2.2 in X.-W Chang, X. Yang and T. Zhou paper.
- Parameters:
k0
- diagonal index (counting from 0)delta
- new value for diag[k0+1]
-
recoverAmbiguities
protected IntegerLeastSquareSolution[] recoverAmbiguities()
Recover ambiguities prior to the Z-transformation.- Returns:
- recovered ambiguities
-
lIndex
protected int lIndex(int row, int col)
Get the index of an entry in the lower triangular matrix.- Parameters:
row
- row index (counting from 0)col
- column index (counting from 0)- Returns:
- index in the single dimension array
-
zIndex
protected int zIndex(int row, int col)
Get the index of an entry in the Z transformation matrix.- Parameters:
row
- row index (counting from 0)col
- column index (counting from 0)- Returns:
- index in the single dimension array
-
-