org.apache.commons.math.optimization.fitting
Class CurveFitter

java.lang.Object
  extended by org.apache.commons.math.optimization.fitting.CurveFitter

public class CurveFitter
extends java.lang.Object

Fitter for parametric univariate real functions y = f(x).

When a univariate real function y = f(x) does depend on some unknown parameters p0, p1 ... pn-1, this class can be used to find these parameters. It does this by fitting the curve so it remains very close to a set of observed points (x0, y0), (x1, y1) ... (xk-1, yk-1). This fitting is done by finding the parameters values that minimizes the objective function ∑(yi-f(xi))2. This is really a least squares problem.

Since:
2.0
Version:
$Revision: 790380 $ $Date: 2009-07-01 17:03:38 -0400 (Wed, 01 Jul 2009) $

Nested Class Summary
private  class CurveFitter.TheoreticalValuesFunction
          Vectorial function computing function theoretical values.
 
Field Summary
private  java.util.List<WeightedObservedPoint> observations
          Observed points.
private  DifferentiableMultivariateVectorialOptimizer optimizer
          Optimizer to use for the fitting.
 
Constructor Summary
CurveFitter(DifferentiableMultivariateVectorialOptimizer optimizer)
          Simple constructor.
 
Method Summary
 void addObservedPoint(double x, double y)
          Add an observed (x,y) point to the sample with unit weight.
 void addObservedPoint(double weight, double x, double y)
          Add an observed weighted (x,y) point to the sample.
 void addObservedPoint(WeightedObservedPoint observed)
          Add an observed weighted (x,y) point to the sample.
 double[] fit(ParametricRealFunction f, double[] initialGuess)
          Fit a curve.
 WeightedObservedPoint[] getObservations()
          Get the observed points.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

optimizer

private final DifferentiableMultivariateVectorialOptimizer optimizer
Optimizer to use for the fitting.


observations

private final java.util.List<WeightedObservedPoint> observations
Observed points.

Constructor Detail

CurveFitter

public CurveFitter(DifferentiableMultivariateVectorialOptimizer optimizer)
Simple constructor.

Parameters:
optimizer - optimizer to use for the fitting
Method Detail

addObservedPoint

public void addObservedPoint(double x,
                             double y)
Add an observed (x,y) point to the sample with unit weight.

Calling this method is equivalent to call addObservedPoint(1.0, x, y).

Parameters:
x - abscissa of the point
y - observed value of the point at x, after fitting we should have f(x) as close as possible to this value
See Also:
addObservedPoint(double, double, double), addObservedPoint(WeightedObservedPoint), getObservations()

addObservedPoint

public void addObservedPoint(double weight,
                             double x,
                             double y)
Add an observed weighted (x,y) point to the sample.

Parameters:
weight - weight of the observed point in the fit
x - abscissa of the point
y - observed value of the point at x, after fitting we should have f(x) as close as possible to this value
See Also:
addObservedPoint(double, double), addObservedPoint(WeightedObservedPoint), getObservations()

addObservedPoint

public void addObservedPoint(WeightedObservedPoint observed)
Add an observed weighted (x,y) point to the sample.

Parameters:
observed - observed point to add
See Also:
addObservedPoint(double, double), addObservedPoint(double, double, double), getObservations()

getObservations

public WeightedObservedPoint[] getObservations()
Get the observed points.

Returns:
observed points
See Also:
addObservedPoint(double, double), addObservedPoint(double, double, double), addObservedPoint(WeightedObservedPoint)

fit

public double[] fit(ParametricRealFunction f,
                    double[] initialGuess)
             throws FunctionEvaluationException,
                    OptimizationException,
                    java.lang.IllegalArgumentException
Fit a curve.

This method compute the coefficients of the curve that best fit the sample of observed points previously given through calls to the addObservedPoint method.

Parameters:
f - parametric function to fit
initialGuess - first guess of the function parameters
Returns:
fitted parameters
Throws:
FunctionEvaluationException - if the objective function throws one during the search
OptimizationException - if the algorithm failed to converge
java.lang.IllegalArgumentException - if the start point dimension is wrong


Copyright (c) 2003-2010 Apache Software Foundation