Commit 34b502c0 authored by Luc Maisonobe's avatar Luc Maisonobe

Added a position scaling factor separated from propagator accuracy.

parent 475b62b1
......@@ -499,11 +499,17 @@ public class OrbitDeterminationTest {
dP = parser.getDouble(ParameterKey.PROPAGATOR_POSITION_ERROR);
}
final double positionScale;
if (!parser.containsKey(ParameterKey.ESTIMATOR_ORBITAL_PARAMETERS_POSITION_SCALE)) {
positionScale = dP;
} else {
positionScale = parser.getDouble(ParameterKey.ESTIMATOR_ORBITAL_PARAMETERS_POSITION_SCALE);
}
final NumericalPropagatorBuilder propagatorBuilder =
new NumericalPropagatorBuilder(orbit,
new DormandPrince853IntegratorBuilder(minStep, maxStep, dP),
PositionAngle.MEAN,
dP);
positionScale);
// initial mass
final double mass;
......@@ -1096,10 +1102,10 @@ public class OrbitDeterminationTest {
final NumericalPropagatorBuilder propagatorBuilder)
throws NoSuchElementException, OrekitException {
final double initialStepBoundFactor;
if (! parser.containsKey(ParameterKey.ESTIMATOR_INITIAL_STEP_BOUND_FACTOR)) {
if (! parser.containsKey(ParameterKey.ESTIMATOR_LEVENBERG_MARQUARDT_INITIAL_STEP_BOUND_FACTOR)) {
initialStepBoundFactor = 100.0;
} else {
initialStepBoundFactor = parser.getDouble(ParameterKey.ESTIMATOR_INITIAL_STEP_BOUND_FACTOR);
initialStepBoundFactor = parser.getDouble(ParameterKey.ESTIMATOR_LEVENBERG_MARQUARDT_INITIAL_STEP_BOUND_FACTOR);
}
final double convergenceThreshold;
if (! parser.containsKey(ParameterKey.ESTIMATOR_NORMALIZED_PARAMETERS_CONVERGENCE_THRESHOLD)) {
......@@ -1846,7 +1852,8 @@ public class OrbitDeterminationTest {
PV_OUTLIER_REJECTION_STARTING_ITERATION,
MEASUREMENTS_FILES,
OUTPUT_BASE_NAME,
ESTIMATOR_INITIAL_STEP_BOUND_FACTOR,
ESTIMATOR_LEVENBERG_MARQUARDT_INITIAL_STEP_BOUND_FACTOR,
ESTIMATOR_ORBITAL_PARAMETERS_POSITION_SCALE,
ESTIMATOR_NORMALIZED_PARAMETERS_CONVERGENCE_THRESHOLD,
ESTIMATOR_MAX_ITERATIONS,
ESTIMATOR_MAX_EVALUATIONS;
......
......@@ -244,16 +244,37 @@ PV.measurements.position.sigma = 1.0
PV.measurements.velocity.sigma = 0.01
## Estimator
# normalized parameters p are computed from physical parameters x
# as p = (x - x0) / sx where x0 is the reference value for physical
# parameter x and sx is the associated scale factor
# scaling factor for orbital parameters normalization (m)
# if not specified, the value set for propagator.position.error will be copied
estimator.orbital.parameters.position.scale = 10.0
# the default initial step bound factor is 100 for Levenberg-Marquardt
# this is too small for normalized parameters when initial guess is very
# far. An order of magnitude is 100 times the distance error of the initial guess
# divided by the propagator.position.error. So if the initial guess
# is about 100km wrong and propagator.position.error is set to 10.0,
# divided by estimator.orbital.parameters.position.scale. So if the initial guess
# is about 100km wrong and estimator.orbital.parameters.position.scale is set to 10.0,
# the initial step bound factor should be of the order of magnitude of 1.0e6
estimator.initial.step.bound.factor = 1.0e6
estimator.normalized.parameters.convergence.threshold = 1.0e-2
estimator.max.iterations = 25
estimator.max.evaluations = 35
estimator.Levenberg.Marquardt.initial.step.bound.factor = 1.0e6
# convergence is reached when max|p(k+1) - p(k)| < ε for each
# normalized estimated parameters p and iterations k and k+1
# so the ε threshold (which corresponds to the key
# estimator.normalized.parameters.convergence.threshold)
# Normalized values are computed as (x - x0) / sx,
# so convergence is reached when the following condition holds for
# all estimated parameters: |x[i+1] - x[i]| <= ε * sx
# So the convergence threshold specified here can be considered as
# a multiplication factor applied to scale. Since for all parameters
# the scale is often small (typically about 1 m for orbital positions
# for example), then the threshold should not be too small. A value
# of 10⁻³ is often quite accurate.
estimator.normalized.parameters.convergence.threshold = 1.0e-3
estimator.max.iterations = 25
estimator.max.evaluations = 35
# comma-separated list of measurements files (in the same directory as this file)
measurements.files = Lageos2_test.aer
\ No newline at end of file
......@@ -302,16 +302,37 @@ PV.measurements.position.sigma = 10.0
PV.measurements.velocity.sigma = 0.01
## Estimator
# normalized parameters p are computed from physical parameters x
# as p = (x - x0) / sx where x0 is the reference value for physical
# parameter x and sx is the associated scale factor
# scaling factor for orbital parameters normalization (m)
# if not specified, the value set for propagator.position.error will be copied
estimator.orbital.parameters.position.scale = 10.0
# the default initial step bound factor is 100 for Levenberg-Marquardt
# this is too small for normalized parameters when initial guess is very
# far. An order of magnitude is 100 times the distance error of the initial guess
# divided by the propagator.position.error. So if the initial guess
# is about 100km wrong and propagator.position.error is set to 10.0,
# divided by estimator.orbital.parameters.position.scale. So if the initial guess
# is about 100km wrong and estimator.orbital.parameters.position.scale is set to 10.0,
# the initial step bound factor should be of the order of magnitude of 1.0e6
estimator.initial.step.bound.factor = 1.0e6
estimator.normalized.parameters.convergence.threshold = 1.0e-2
estimator.max.iterations = 25
estimator.max.evaluations = 30
estimator.Levenberg.Marquardt.initial.step.bound.factor = 1.0e6
# convergence is reached when max|p(k+1) - p(k)| < ε for each
# normalized estimated parameters p and iterations k and k+1
# so the ε threshold (which corresponds to the key
# estimator.normalized.parameters.convergence.threshold)
# Normalized values are computed as (x - x0) / sx,
# so convergence is reached when the following condition holds for
# all estimated parameters: |x[i+1] - x[i]| <= ε * sx
# So the convergence threshold specified here can be considered as
# a multiplication factor applied to scale. Since for all parameters
# the scale is often small (typically about 1 m for orbital positions
# for example), then the threshold should not be too small. A value
# of 10⁻³ is often quite accurate.
estimator.normalized.parameters.convergence.threshold = 1.0e-3
estimator.max.iterations = 25
estimator.max.evaluations = 30
# comma-separated list of measurements files (in the same directory as this file)
measurements.files = W3B.aer
......
......@@ -477,11 +477,17 @@ public class OrbitDetermination {
dP = parser.getDouble(ParameterKey.PROPAGATOR_POSITION_ERROR);
}
final double positionScale;
if (!parser.containsKey(ParameterKey.ESTIMATOR_ORBITAL_PARAMETERS_POSITION_SCALE)) {
positionScale = dP;
} else {
positionScale = parser.getDouble(ParameterKey.ESTIMATOR_ORBITAL_PARAMETERS_POSITION_SCALE);
}
final NumericalPropagatorBuilder propagatorBuilder =
new NumericalPropagatorBuilder(orbit,
new DormandPrince853IntegratorBuilder(minStep, maxStep, dP),
PositionAngle.MEAN,
dP);
positionScale);
// initial mass
final double mass;
......@@ -1075,10 +1081,10 @@ public class OrbitDetermination {
final NumericalPropagatorBuilder propagatorBuilder)
throws NoSuchElementException, OrekitException {
final double initialStepBoundFactor;
if (! parser.containsKey(ParameterKey.ESTIMATOR_INITIAL_STEP_BOUND_FACTOR)) {
if (! parser.containsKey(ParameterKey.ESTIMATOR_LEVENBERG_MARQUARDT_INITIAL_STEP_BOUND_FACTOR)) {
initialStepBoundFactor = 100.0;
} else {
initialStepBoundFactor = parser.getDouble(ParameterKey.ESTIMATOR_INITIAL_STEP_BOUND_FACTOR);
initialStepBoundFactor = parser.getDouble(ParameterKey.ESTIMATOR_LEVENBERG_MARQUARDT_INITIAL_STEP_BOUND_FACTOR);
}
final double convergenceThreshold;
if (! parser.containsKey(ParameterKey.ESTIMATOR_NORMALIZED_PARAMETERS_CONVERGENCE_THRESHOLD)) {
......@@ -2063,7 +2069,8 @@ public class OrbitDetermination {
PV_OUTLIER_REJECTION_STARTING_ITERATION,
MEASUREMENTS_FILES,
OUTPUT_BASE_NAME,
ESTIMATOR_INITIAL_STEP_BOUND_FACTOR,
ESTIMATOR_LEVENBERG_MARQUARDT_INITIAL_STEP_BOUND_FACTOR,
ESTIMATOR_ORBITAL_PARAMETERS_POSITION_SCALE,
ESTIMATOR_NORMALIZED_PARAMETERS_CONVERGENCE_THRESHOLD,
ESTIMATOR_MAX_ITERATIONS,
ESTIMATOR_MAX_EVALUATIONS;
......
......@@ -302,16 +302,37 @@ PV.measurements.position.sigma = 10.0
PV.measurements.velocity.sigma = 0.01
## Estimator
# normalized parameters p are computed from physical parameters x
# as p = (x - x0) / sx where x0 is the reference value for physical
# parameter x and sx is the associated scale factor
# scaling factor for orbital parameters normalization (m)
# if not specified, the value set for propagator.position.error will be copied
estimator.orbital.parameters.position.scale = 10.0
# the default initial step bound factor is 100 for Levenberg-Marquardt
# this is too small for normalized parameters when initial guess is very
# far. An order of magnitude is 100 times the distance error of the initial guess
# divided by the propagator.position.error. So if the initial guess
# is about 100km wrong and propagator.position.error is set to 10.0,
# divided by estimator.orbital.parameters.position.scale. So if the initial guess
# is about 100km wrong and estimator.orbital.parameters.position.scale is set to 10.0,
# the initial step bound factor should be of the order of magnitude of 1.0e6
estimator.initial.step.bound.factor = 1.0e6
estimator.normalized.parameters.convergence.threshold = 1.0e-2
estimator.max.iterations = 20
estimator.max.evaluations = 25
estimator.Levenberg.Marquardt.initial.step.bound.factor = 1.0e6
# convergence is reached when max|p(k+1) - p(k)| < ε for each
# normalized estimated parameters p and iterations k and k+1
# so the ε threshold (which corresponds to the key
# estimator.normalized.parameters.convergence.threshold)
# Normalized values are computed as (x - x0) / sx,
# so convergence is reached when the following condition holds for
# all estimated parameters: |x[i+1] - x[i]| <= ε * sx
# So the convergence threshold specified here can be considered as
# a multiplication factor applied to scale. Since for all parameters
# the scale is often small (typically about 1 m for orbital positions
# for example), then the threshold should not be too small. A value
# of 10⁻³ is often quite accurate.
estimator.normalized.parameters.convergence.threshold = 1.0e-3
estimator.max.iterations = 20
estimator.max.evaluations = 25
# comma-separated list of measurements files (in the same directory as this file)
measurements.files = W3B.aer
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment