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

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

Introduction

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

Prototype

public double[] fit(int maxEval, double[] guess) 

Source Link

Document

Get the coefficients of the polynomial fitting the weighted data points.

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);/*ww  w.  jav a 2s  .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);
}