[SciPy-User] Least-square fitting of a 3rd degree polynomial

camille chambon camillechambon at yahoo.fr
Tue May 1 13:31:20 EDT 2012


Hello,

I would like to fit 'a' such as y = a * x**3 + b * x**2 + 
c * x + d, 
where x and y are measured data,
and b = 0.0, c = -0.00458844157413 and d = 5.8 are fixed. 

According to http://www.scipy.org/Cookbook/FittingData#head-27373a786baa162a2e8a910ee0b8a48838082262, I try to use scipy.optimize.leastsq fit routine like that: 

#### CODE ##### 

from numpy import *
from pylab import *
from scipy import optimize

# My data points
x = array([1078.0, 1117.0, 1212.1, 1368.7, 1686.8, 1880.0])
y = array([5.8, 5.6, 5.4, 4.9, 2.4, 0.0])

b, c, d =  0.0, -0.00458844157413, 5.8 # Fixed parameters

fitfunc = lambda p, x: poly1d([p[0], b, c, d])(x) # Target function
errfunc = lambda p, x, y: fitfunc(p, x) - y # Distance to the target function

p0 = [-4.0E-09] # Initial guess for the parameters
p1, success = optimize.leastsq(errfunc, p0[:], args=(x, y))

time = linspace(x.min(), x.max(), 100)
plot(x, y, "ro", time, fitfunc(p1, time), "r-") # Plot of the data and the fit

title("a fitting")
xlabel("time [day]")
ylabel("number []")
legend(('x position', 'x fit', 'y position', 'y fit'))

show()

################################

But the fit does not work (as one can see on the attached image).

Does someone have any idea of what I'm doing wrong?

Thanks in advance for your help.

Cheers,

Camille
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20120501/ba4cf775/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: a_fit.png
Type: image/png
Size: 23663 bytes
Desc: not available
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20120501/ba4cf775/attachment.png>


More information about the SciPy-User mailing list