The estimation problems considered here are parametric problems where a user model depends on initially unknown scalar parameters and several measurements made on values that depend on the model are available. As an example, one can consider the flow rate of a river given rain data on its vicinity, or the center and radius of a circle given points on a ring.
One important class of estimation problems is weighted least squares problems. They basically consist in finding the values for some parameters pk such that a cost function J = sum(wi ri2) is minimized. The various ri terms represent the deviation ri = mesi - modi between the measurements and the parameterized models. The wi factors are the measurements weights, they are often chosen either all equal to 1.0 or proportional to the inverse of the variance of the measurement type. The solver adjusts the values of the estimated parameters pk which are not bound. It does not touch the parameters which have been put in a bound state by the user.
This package provides the {@link org.spaceroots.mantissa.estimation.EstimatedParameter EstimatedParameter} class to represent each estimated parameter, and the {@link org.spaceroots.mantissa.estimation.WeightedMeasurement WeightedMeasurement} abstract class the user can extend to define its measurements. All parameters and measurements are then provided to some {@link org.spaceroots.mantissa.estimation.Estimator Estimator} packed together in an {@link org.spaceroots.mantissa.estimation.EstimationProblem EstimationProblem} instance which acts only as a container. The package provides two common estimators for weighted least squares problems, one based on the {@link org.spaceroots.mantissa.estimation.GaussNewtonEstimator Gauss-Newton} method and the other one based on the {@link org.spaceroots.mantissa.estimation.LevenbergMarquardtEstimator Levenberg-Marquardt} method.
The class diagram for the public classes of this package is displayed below. The
orange boxes UserProblem, UserFirstMeasurementType and
UserSecondMeasurementType are exemple of what the user should create to
use this package: implement his own problem and measurement types using the {@link
org.spaceroots.mantissa.estimation.EstimationProblem} interface and {@link
org.spaceroots.mantissa.estimation.WeightedMeasurement} abstract class, and then use
one of the provided estimators (for example {@link
org.spaceroots.mantissa.estimation.GaussNewtonEstimator} or {@link
org.spaceroots.mantissa.estimation.LevenbergMarquardtEstimator}) to solve it. The
white boxes are the interfaces and classes already provided by the library.
@author L. Maisonobe