List of usage examples for org.apache.commons.math3.fitting WeightedObservedPoint getY
public double getY()
From source file:edu.ucsf.valelab.saim.calculations.TestSaimErrorFunction.java
public void test() throws Exception { SaimData data = new SaimData(); data.wavelength_ = 488.0;/*from w ww .jav a 2 s .c om*/ data.nSample_ = 1.36; data.dOx_ = 500.0; data.A_ = 1000.0; data.B_ = 5000.0; data.heights_ = new double[] { 75.0 }; double maxError = 0.0000000001; // make a collection of "observed" points ArrayList<WeightedObservedPoint> points = new ArrayList<WeightedObservedPoint>(); for (int i = -50; i <= 50; i += 1) { double angle = Math.toRadians(i); double I = data.A_ * SaimCalc.fieldStrength(data.wavelength_, angle, data.nSample_, data.dOx_, data.heights_[0]) + data.B_; WeightedObservedPoint point = new WeightedObservedPoint(1.0, angle, I); points.add(point); } // calculate the error with these ideal points (shoudle be 0) SaimErrorFunction sef = new SaimErrorFunction(data, points); double[] parameters = { data.A_, data.B_, data.heights_[0] }; double error = sef.value(parameters); System.out.println("SaimError error: " + error); assertEquals(0.0, error, maxError); // now add 1 to all the data points. Error should be number of data points ArrayList<WeightedObservedPoint> newPoints = new ArrayList<WeightedObservedPoint>(); for (WeightedObservedPoint point : points) { newPoints.add(new WeightedObservedPoint(1.0, point.getX(), point.getY() + 1.0)); } SaimErrorFunction sef2 = new SaimErrorFunction(data, newPoints); error = sef2.value(parameters); System.out.println("SaimError error: " + error); assertEquals(points.size(), error, maxError); }
From source file:org.micromanager.asidispim.fit.GaussianWithOffsetCurveFitter.java
/** * //from www .j a v a 2s .co m * @param observations * * @return */ @Override protected LeastSquaresProblem getProblem(Collection<WeightedObservedPoint> observations) { // Prepare least-squares problem. final int len = observations.size(); final double[] target = new double[len]; final double[] weights = new double[len]; int i = 0; for (WeightedObservedPoint obs : observations) { target[i] = obs.getY(); weights[i] = obs.getWeight(); ++i; } final AbstractCurveFitter.TheoreticalValuesFunction model = new AbstractCurveFitter.TheoreticalValuesFunction( FUNCTION, observations); final double[] startPoint = initialGuess != null ? initialGuess : // Compute estimation. new ParameterGuesser(observations).guess(); // Return a new least squares problem set up to fit a Gaussian curve to the // observed points. return new LeastSquaresBuilder().maxEvaluations(Integer.MAX_VALUE).maxIterations(maxIter).start(startPoint) .target(target).weight(new DiagonalMatrix(weights)) .model(model.getModelFunction(), model.getModelFunctionJacobian()).build(); }
From source file:org.orekit.utils.SecularAndHarmonic.java
/** Fit parameters. * @see #getFittedParameters()/*from www. j a v a 2 s .c om*/ */ public void fit() { final AbstractCurveFitter fitter = new AbstractCurveFitter() { /** {@inheritDoc} */ @Override protected LeastSquaresProblem getProblem(final Collection<WeightedObservedPoint> observations) { // Prepare least-squares problem. final int len = observations.size(); final double[] target = new double[len]; final double[] weights = new double[len]; int i = 0; for (final WeightedObservedPoint obs : observations) { target[i] = obs.getY(); weights[i] = obs.getWeight(); ++i; } final AbstractCurveFitter.TheoreticalValuesFunction model = new AbstractCurveFitter.TheoreticalValuesFunction( new LocalParametricFunction(), observations); // build a new least squares problem set up to fit a secular and harmonic curve to the observed points return new LeastSquaresBuilder().maxEvaluations(Integer.MAX_VALUE).maxIterations(Integer.MAX_VALUE) .start(fitted).target(target).weight(new DiagonalMatrix(weights)) .model(model.getModelFunction(), model.getModelFunctionJacobian()).build(); } }; fitted = fitter.fit(observedPoints); }