List of usage examples for org.apache.commons.math3.fitting PolynomialFitter PolynomialFitter
public PolynomialFitter(MultivariateVectorOptimizer optimizer)
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; }