Example usage for org.apache.commons.math3.fitting PolynomialFitter PolynomialFitter

List of usage examples for org.apache.commons.math3.fitting PolynomialFitter PolynomialFitter

Introduction

In this page you can find the example usage for org.apache.commons.math3.fitting PolynomialFitter PolynomialFitter.

Prototype

public PolynomialFitter(MultivariateVectorOptimizer optimizer) 

Source Link

Document

Simple constructor.

Usage

From source file:javatranslation.matlab.dfa.java

public static void dfafunction(double[] tau, double MinBox, double MaxBox, int DFAorder) {

    double[] incoef = null;
    double[] l = null;
    l = new double[50];
    incoef = new double[50];
    for (int i = 0; i < 50; i++) {
        l = logspace(MinBox, MaxBox);//from  w  ww.j  a  v  a2s. c o  m
        //System.out.println(l[i]);
        incoef[i] = Math.round(l[i]);
    }
    double xx = mean(tau);
    for (int i = 0; i < tau.length; i++) {
        tau[i] = tau[i] - xx;
    }
    double[] Y = cumsum(tau, dfa.mean(tau));
    double maxnumseg = incoef.length;
    double[] winlen = null;
    winlen = new double[50];
    for (int truta = 0; truta < 50; truta++) {
        winlen[truta] = incoef[truta];
    }
    Arrays.sort(winlen);
    ArrayUtils.reverse(winlen);

    double Ylength = Y.length;
    double F[][] = new double[(int) maxnumseg][1];
    for (int k = 0; k < maxnumseg; k++) {
        F[k][0] = 0;
    }
    double[] timevec = new double[50];
    for (int kk = 0; kk < maxnumseg; kk++) {
        timevec[kk] = winlen[kk];
        double numsegm = Math.floor(Ylength / winlen[kk]);
        double tempY[][] = new double[1][(int) numsegm];
        for (int k = 0; k < numsegm; k++) {
            tempY[0][k] = 0;
        }
        for (int zz = 0; zz < numsegm; zz++) {
            double overflowtest = zz * winlen[kk];
            if (overflowtest <= Ylength) {
                double[] tempvec = null;
                int ko = 0;
                for (double p = ((zz - 1) * winlen[kk] + 1); p <= (zz
                        * winlen[kk]); p = ((zz - 1) * winlen[kk] + 1) + 1) { // there are some errors in this loop
                    tempvec[ko] = Y[(int) p];
                    System.out.println(tempvec[(int) p]);
                    ko++;
                }
                //double temppol = polyfit(timevec,tempvec,DFAorder);
                MultivariateVectorOptimizer optimizer;
                optimizer = null;
                PolynomialFitter x = new PolynomialFitter(optimizer); // error here too
                double[] temppol = x.fit(DFAorder, timevec);

                double[] temppol2 = x.fit(DFAorder, tempvec);
                double[] arrayOfCoefficients = new double[temppol2.length];
                arrayOfCoefficients = temppol2;
                int len = arrayOfCoefficients.length;
                double retAnswer = 0;
                double ret = 0;
                for (int i = 0; i < len; i++) {
                    retAnswer = retAnswer + Math.pow(arrayOfCoefficients[i], i);
                }
                for (int i = 0; i < tempvec.length; i++) {
                    ret = tempvec[i] - (Math.pow(retAnswer, 2));
                }
                tempY[0][zz] = ((ret) / winlen[kk]);
            }
        }
        int k;
        double[] kopp = new double[(int) maxnumseg];
        for (k = 0; k < maxnumseg; k++) {
            kopp[k] = tempY[0][k];
        }
        double nonzerotempY = dfa.sum2(kopp);
        F[kk][0] = Math.sqrt(dfa.sum(kopp) / nonzerotempY);

    }
    double[] LF;
    LF = new double[(int) maxnumseg];
    double[] LN;
    LN = new double[(int) maxnumseg];
    for (int i = 0; i < maxnumseg; i++) {
        LF[i] = Math.log10(F[i][0]);
        LN[i] = Math.log10(winlen[i]);
    }
    double[][] XLN = new double[LN.length][LN.length];
    for (int i = 0; i < LN.length; i++) {
        XLN[i][0] = 1;
        XLN[i][1] = LN[i];
    }
    SimpleRegression x;
    x = new SimpleRegression();
    x.addObservations(XLN, LF); // and probably error in this one too
    RegressionResults b = x.regress();
    // System.out.println(b.getParameterEstimates());

    //double LF=Math.log10(F); % log fluctuations
    //double LN=Math.log10(winlen);
}

From source file:edu.uchc.octane.CalibrationDialogAstigmatism.java

double[] parabolicFit(double[] sigma) {

    PolynomialFitter fitter = new PolynomialFitter(new LevenbergMarquardtOptimizer());

    for (int i = 0; i < sigma.length; i++) {

        fitter.addObservedPoint((i - sigma.length / 2) * sliceSpacing_, sigma[i]);

    }//  w  ww  . j a v a 2s . c om

    double[] guess = new double[3];
    guess[0] = sigma[(int) (sigma.length / 2)];
    guess[2] = (sigma[0] - guess[0]) / (sliceSpacing_ * sliceSpacing_ * sigma.length * sigma.length / 4);

    double[] results = fitter.fit(guess);

    return results;
}

From source file:uk.ac.diamond.scisoft.analysis.optimize.ApachePolynomial.java

/**
 * Fit a polynomial to given x and y data
 * @param x/* w  w  w  . j  a v  a2s.  c  o m*/
 * @param y
 * @param guess initial values for coefficients (given in increasing degree of the terms)
 * @return coefficients of fitted polynomial
 */
public static double[] polynomialFit(Dataset x, Dataset y, double... guess) {
    PolynomialFitter fitter = new PolynomialFitter(new LevenbergMarquardtOptimizer());

    for (int i = 0; i < y.getSize(); i++) {
        fitter.addObservedPoint(1, x.getDouble(i), y.getDouble(i));
    }

    return fitter.fit(guess);
}

From source file:uk.ac.diamond.scisoft.analysis.optimize.ApachePolynomial.java

/**
 * Calculate a polynomial filtered dataset using a specified window size and polynomial order.
 * /* w  ww  .ja  v a  2s.  com*/
 * @param x The abscissa (generally energy/wavelength etc)
 * @param y The ordinate to be smoothed
 * @param windowSize The size of window used in the smoothing
 * @param polyOrder The order of the polynomial fitted to the window
 * @return result The smoothed data set
 * @throws Exception 
 */
public static Dataset getPolynomialSmoothed(final Dataset x, final Dataset y, int windowSize, int polyOrder)
        throws Exception {
    // Could probably do with more sanity check on relative size of
    // window vs polynomial but doesn't seem to trip up
    // So we'll see how it goes...

    // integer divide window size so window is symmetric around point
    int window = windowSize / 2;

    PolynomialFitter fitter = new PolynomialFitter(new LevenbergMarquardtOptimizer());
    double dx = x.getDouble(1) - x.getDouble(0); // change in x for edge extrapolation
    int xs = x.getSize();
    Dataset result = DatasetFactory.zeros(y);
    double[] guess = new double[polyOrder + 1];

    for (int idx = 0; idx < xs; idx++) {
        fitter.clearObservations();

        // Deal with edge cases:
        // In both cases extend x edge by dx required for window size
        // Pad y with first or last value
        for (int idw = -window; idw < window + 1; idw++) {
            if (idx + idw < 0) {
                fitter.addObservedPoint(1, x.getDouble(0) + (dx * (idx + idw)), y.getDouble(0));
            } else if ((idx + idw) > (xs - 1)) {
                fitter.addObservedPoint(1, x.getDouble(xs - 1) + dx * (idx + idw - (xs - 1)),
                        y.getDouble(xs - 1));
            } else {
                fitter.addObservedPoint(1, x.getDouble(idx + idw), y.getDouble(idx + idw));
            }
        }

        PolynomialFunction fitted = new PolynomialFunction(fitter.fit(guess));
        result.set(fitted.value(x.getDouble(idx)), idx);
    }

    return result;
}