r - How to fit a non linear function with python? -


i have following code written in r estimate 3 coefficients (a, b , c):

y <- c(120, 125, 158, 300, 350, 390, 2800, 5900, 7790) t <- 1:9 fit <-  nls(y ~ * (((b + c)^2/b) * exp(-(b + c) * t))/(1 + (c/b) *       exp(-(b + c) * t))^2, start = list(a = 17933, b = 0.01, c = 0.31)) 

and result

> summary(fit )  formula: y ~ * (((b + c)^2/b) * exp(-(b + c) * t))/(1 + (c/b) * exp(-(b +      c) * t))^2  parameters:    estimate std. error t value pr(>|t|)     2.501e+04  2.031e+03  12.312 1.75e-05 *** b 1.891e-05  1.383e-05   1.367    0.221     c 1.254e+00  1.052e-01  11.924 2.11e-05 *** --- signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1  residual standard error: 248.8 on 6 degrees of freedom  number of iterations convergence: 33  achieved convergence tolerance: 6.836e-06 

how make same thing python ?

you can use curve_fit, gives same result:

import scipy.optimize optimization import numpy np  y = np.array([120, 125, 158, 300, 350, 390, 2800, 5900, 7790]) t = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) start = np.array([17933, 0.01, 0.31])  def f(t,a,b,c):     num = a*(np.exp(-t*(b+c))*np.power(b+c, 2)/b)     denom = np.power(1+(c/b)*np.exp(-t*(b+c)), 2)     return num/denom  print(optimization.curve_fit(f, t, y, start)) #(array([  2.50111448e+04,   1.89129922e-05,   1.25426156e+00]), array([[ 4.12657233e+06,   2.58151776e-02,  -2.00881091e+02], #       [  2.58151776e-02,   1.91318685e-10,  -1.44733425e-06], #       [ -2.00881091e+02,  -1.44733425e-06,   1.10654268e-02]])) 

Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -