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

camille chambon camillechambon at yahoo.fr
Wed May 2 03:51:21 EDT 2012


I tried to set a polynomial with a NA coefficient:
from numpy.polynomial import Polynomial as P
import numpy
x = numpy.array([1078.0, 1117.0, 1212.1, 1368.7, 1686.8, 1880.0])
y = numpy.array([5.8, 5.6, 5.4, 4.9, 2.4, 0.0])

b, c, d =  0.0, -0.00458844157413, 5.8

my_poly = P([d, c, b, numpy.nan], [x.min(), x.max()])
print my_poly # print "poly([  5.80000000e+00  -4.58844157e-03   0.00000000e+00              nan], [ 1078.  1880.])"
p = my_poly.fit(x,y,3)
print p # print "poly([ 4.20020036 -2.66837734 -1.33882427 -0.20317739], [ 1078.  1880.])"


but new coefficients are calculated. Does that mean it doesn't work?

Cheers,

Camille



________________________________
 De : Charles R Harris <charlesr.harris at gmail.com>
À : SciPy Users List <scipy-user at scipy.org> 
Envoyé le : Mardi 1 mai 2012 19h47
Objet : Re: [SciPy-User] Least-square fitting of a 3rd degree polynomial
 




On Tue, May 1, 2012 at 11:44 AM, <josef.pktd at gmail.com> wrote:

On Tue, May 1, 2012 at 1:31 PM, camille chambon <camillechambon at yahoo.fr> wrote:
>> 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.
>
>my guess would be that the scale is awful, the x are very large
>
>if you only need the to estimate "a", then it's just a very simple
>linear regression problem dot(x,x)/dot(x,y) or something like this.
>
>as aside numpy.polynomial works very well for fitting a polynomial,
>but doesn't allow for missing terms
>
>

It does recognize NA in devel, but we will see where that goes ;)

Chuck 


_______________________________________________
SciPy-User mailing list
SciPy-User at scipy.org
http://mail.scipy.org/mailman/listinfo/scipy-user
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20120502/a5a252b8/attachment.html>


More information about the SciPy-User mailing list