2012-10-29 11 views
5

Sto provando a eseguire un adattamento esponenziale su vari punti (x, y) con la formula A * EXP (-BX), cercando di trovare A e B più adatti ai miei punti.Vestibilità esponenziale con apache commons matematica

double[] xx = curveFitter.fit(new ParametricUnivariateFunction() { 
       public double value(double v, double... doubles) { 
        return doubles[0] * Math.exp(-1 * doubles[1] * v); 
       } 

       public double[] gradient(double v, double... doubles) { 
        return new double[]{v, 1}; 
       } 
      }, new double[]{0, 0}); 

io ottenga un certo numeri, ma non si adattano i miei punti in alcun modo, non riesco a trovare alcuna documentazione su quanto sopra.

Uso commons-math3-3.0

risposta

6

Se si sta tentando di stimare questo vi suggerisco di prendere il registro di y, che vi darà un grafico

y' = log(y) = A - B * x; 

Da questo si può calcolare la pendenza e l'intercetta.

slope = sum((x - mean(x)) * (y' - mean(y'))/sum((x - mean(x))^2) // -B 

intercept = mean(y' - x * slope) // A 
+1

utilizzato la formula e quindi utilizzato un PolynomialFitter invece grazie! – Rodriguez