org.jscience.mathematics.analysis.fitting
Class HarmonicFitter

java.lang.Object
  extended by org.jscience.mathematics.analysis.fitting.AbstractCurveFitter
      extended by org.jscience.mathematics.analysis.fitting.HarmonicFitter
All Implemented Interfaces:
java.io.Serializable, EstimationProblem

public class HarmonicFitter
extends AbstractCurveFitter
implements EstimationProblem, java.io.Serializable

This class implements a curve fitting specialized for sinusoids.

Harmonic fitting is a very simple case of curve fitting. The estimated coefficients are the amplitude a, the pulsation omega and the phase phi: f (t) = a cos (omega t + phi). They are searched by a least square estimator initialized with a rough guess based on integrals.

This class is by no means optimized, neither versus space nor versus time performance.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class org.jscience.mathematics.analysis.fitting.AbstractCurveFitter
AbstractCurveFitter.FitMeasurement
 
Field Summary
 
Fields inherited from class org.jscience.mathematics.analysis.fitting.AbstractCurveFitter
coefficients, measurements
 
Constructor Summary
HarmonicFitter(EstimatedParameter[] coefficients, int maxIterations, double convergence, double steadyStateThreshold, double epsilon)
          Simple constructor.
HarmonicFitter(int maxIterations, double convergence, double steadyStateThreshold, double epsilon)
          Simple constructor.
 
Method Summary
 double[] fit()
          Perform the fitting.
 double getAmplitude()
          Get the current amplitude coefficient estimate.
 double getPhase()
          Get the current phase coefficient estimate.
 double getPulsation()
          Get the current pulsation coefficient estimate.
 double partial(double x, EstimatedParameter p)
          Get the derivative of the function at x with respect to parameter p.
 double valueAt(double x)
          Get the value of the function at x according to the current parameters value.
 
Methods inherited from class org.jscience.mathematics.analysis.fitting.AbstractCurveFitter
addWeightedPair, getAllParameters, getMeasurements, getUnboundParameters, sortMeasurements
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.jscience.mathematics.analysis.estimation.EstimationProblem
getAllParameters, getMeasurements, getUnboundParameters
 

Constructor Detail

HarmonicFitter

public HarmonicFitter(int maxIterations,
                      double convergence,
                      double steadyStateThreshold,
                      double epsilon)
Simple constructor.

Parameters:
maxIterations - maximum number of iterations allowed
convergence - criterion threshold below which we do not need to improve the criterion anymore
steadyStateThreshold - steady state detection threshold, the problem has reached a steady state (read converged) if Math.abs (Jn - Jn-1) < Jn * convergence, where Jn and Jn-1 are the current and preceding criterion value (square sum of the weighted residuals of considered measurements).
epsilon - threshold under which the matrix of the linearized problem is considered singular (see SquareMatrix.solve).

HarmonicFitter

public HarmonicFitter(EstimatedParameter[] coefficients,
                      int maxIterations,
                      double convergence,
                      double steadyStateThreshold,
                      double epsilon)
Simple constructor.

This constructor can be used when a first estimate of the coefficients is already known.

Parameters:
coefficients - first estimate of the coefficients. A reference to this array is hold by the newly created object. Its elements will be adjusted during the fitting process and they will be set to the adjusted coefficients at the end.
maxIterations - maximum number of iterations allowed
convergence - criterion threshold below which we do not need to improve the criterion anymore
steadyStateThreshold - steady state detection threshold, the problem has reached a steady state (read converged) if Math.abs (Jn - Jn-1) < Jn * convergence, where Jn and Jn-1 are the current and preceding criterion value (square sum of the weighted residuals of considered measurements).
epsilon - threshold under which the matrix of the linearized problem is considered singular (see SquareMatrix.solve).
Method Detail

fit

public double[] fit()
             throws EstimationException
Description copied from class: AbstractCurveFitter
Perform the fitting.

This method compute the coefficients of the curve that best fit the sample of weighted pairs previously given through calls to the addWeightedPair method.

Overrides:
fit in class AbstractCurveFitter
Returns:
coefficients of the curve
Throws:
EstimationException - if the fitting is not possible (for example if the sample has to few independant points)

getAmplitude

public double getAmplitude()
Get the current amplitude coefficient estimate. Get a, where f (t) = a cos (omega t + phi)

Returns:
current amplitude coefficient estimate

getPulsation

public double getPulsation()
Get the current pulsation coefficient estimate. Get omega, where f (t) = a cos (omega t + phi)

Returns:
current pulsation coefficient estimate

getPhase

public double getPhase()
Get the current phase coefficient estimate. Get phi, where f (t) = a cos (omega t + phi)

Returns:
current phase coefficient estimate

valueAt

public double valueAt(double x)
Get the value of the function at x according to the current parameters value.

Specified by:
valueAt in class AbstractCurveFitter
Parameters:
x - abscissa at which the theoretical value is requested
Returns:
theoretical value at x

partial

public double partial(double x,
                      EstimatedParameter p)
Get the derivative of the function at x with respect to parameter p.

Specified by:
partial in class AbstractCurveFitter
Parameters:
x - abscissa at which the partial derivative is requested
p - parameter with respect to which the derivative is requested
Returns:
partial derivative