How to use leastsq function from scipy.optimize in python to fit both a straight line and a quadratic line to data sets x and y

How to use leastsq function from scipy.optimize in python to fit both a straight line and a quadratic line to data sets x and y

scipy linear regression with errors
scipy optimize curve fit
scipy least squares
lmfit examples
scipy curve fit multiple variables
scipy optimize covariance matrix
scipy exponential fit
python parameter estimation

How would i fit a straight line and a quadratic to the data set below using the leastsq function from scipy.optimize? I know how to use polyfit to do it. But i need to use leastsq function.

Here are the x and y data sets:

x: 1.0,2.5,3.5,4.0,1.1,1.8,2.2,3.7

y: 6.008,15.722,27.130,33.772,5.257,9.549,11.098,28.828

Can someone help me out please?


The leastsq() method finds the set of parameters that minimize the error function ( difference between yExperimental and yFit). I used a tuple to pass the parameters and lambda functions for the linear and quadratic fits.

leastsq starts from a first guess ( initial Tuple of parameters) and tries to minimize the error function. At the end, if leastsq succeeds, it returns the list of parameters that best fit the data. ( I printed to see it). I hope it works best regards

from scipy.optimize import leastsq
import numpy as np
import matplotlib.pyplot as plt


def main():
   # data provided
   x=np.array([1.0,2.5,3.5,4.0,1.1,1.8,2.2,3.7])
   y=np.array([6.008,15.722,27.130,33.772,5.257,9.549,11.098,28.828])
   # here, create lambda functions for Line, Quadratic fit
   # tpl is a tuple that contains the parameters of the fit
   funcLine=lambda tpl,x : tpl[0]*x+tpl[1]
   funcQuad=lambda tpl,x : tpl[0]*x**2+tpl[1]*x+tpl[2]
   # func is going to be a placeholder for funcLine,funcQuad or whatever 
   # function we would like to fit
   func=funcLine
   # ErrorFunc is the diference between the func and the y "experimental" data
   ErrorFunc=lambda tpl,x,y: func(tpl,x)-y
   #tplInitial contains the "first guess" of the parameters 
   tplInitial1=(1.0,2.0)
   # leastsq finds the set of parameters in the tuple tpl that minimizes
   # ErrorFunc=yfit-yExperimental
   tplFinal1,success=leastsq(ErrorFunc,tplInitial1[:],args=(x,y))
   print " linear fit ",tplFinal1
   xx1=np.linspace(x.min(),x.max(),50)
   yy1=func(tplFinal1,xx1)
   #------------------------------------------------
   # now the quadratic fit
   #-------------------------------------------------
   func=funcQuad
   tplInitial2=(1.0,2.0,3.0)

   tplFinal2,success=leastsq(ErrorFunc,tplInitial2[:],args=(x,y))
   print "quadratic fit" ,tplFinal2
   xx2=xx1

   yy2=func(tplFinal2,xx2)
   plt.plot(xx1,yy1,'r-',x,y,'bo',xx2,yy2,'g-')
   plt.show()

if __name__=="__main__":
   main()

Fitting data, import numpy as np from numpy import pi, r_ import matplotlib.pyplot as plt from Initial guess for the parameters p1, success = optimize.leastsq(errfunc, p0[:], '​y position', 'y fit')) ax = plt.axes() plt.text(0.8, 0.07, 'x freq : %.3f kHz \n y A clever use of the cost function can allow you to fit both set of data in  The number of function calls. fvec. The function evaluated at the output. fjac. A permutation of the R matrix of a QR factorization of the final approximate Jacobian matrix, stored column wise. Together with ipvt, the covariance of the estimate can be approximated. ipvt


from scipy.optimize import leastsq
import scipy as sc
import numpy as np
import matplotlib.pyplot as plt

with optimize.curve_fit the code is simpler, there is no need to define the residual(error) function.

fig, ax = plt.subplots ()
# data
x=np.array([1.0,2.5,3.5,4.0,1.1,1.8,2.2,3.7])
y=np.array([6.008,15.722,27.130,33.772,5.257,9.549,11.098,28.828])

# modeling functions
def funcLine(x, a,b):
    return a*x+b
def funcQuad(x, a, b, c):
    return a*x**2+b*x+c

# optimize constants for the linear function
constantsLine, _ = sc.optimize.curve_fit (funcLine, x, y)

X=np.linspace(x.min(),x.max(),50)
Y1=funcLine(X, *constantsLine)

# optimize constants for the quadratic function
constantsQuad, _ = sc.optimize.curve_fit (funcQuad, x, y)

Y2=funcQuad(X,*constantsQuad)
plt.plot(X,Y1,'r-',label='linear approximation')
plt.plot(x,y,'bo',label='data points')
plt.plot(X,Y2,'g-', label='quadratic approximation')
matplotlib.pylab.legend ()
ax.set_title("Nonlinear Least Square Problems", fontsize=18)
plt.show()

scipy.stats.linregress, Use non-linear least squares to fit a function to data. scipy.optimize.leastsq. Minimize the sum of squares of a set of equations. Notes. Missing  curve_fit is part of scipy.optimize and a wrapper for scipy.optimize.leastsq that overcomes its poor usability. Like leastsq, curve_fit internally uses a Levenburg-Marquardt gradient method (greedy algorithm) to minimise the objective function. Let us create some toy data: import numpy # Generate artificial data = straight line with a=0 and b=1


Here's a super simple example. Picture a paraboloid, so like a bowl with sides growing like a parabola. If we put the bottom at coordinates (x, y) = (a, b) and then minimize the height of the paraboloid over all values of x and y - we would expect the minimum to be x=a and y=b. Here's code that would do this.

import random

from scipy.optimize import least_squares


a, b = random.randint(1, 1000), random.randint(1, 1000)
print("Expect", [a, b])

def f(args):
    x, y = args
    return (x-a)**2 + (y-b)**2

x0 = [-1, -3]

result = least_squares(fun=f, x0=x0)

print(result.x)

Modeling Data and Curve Fitting, While it offers many benefits over scipy.optimize.leastsq, using minimize() for method, lmfit also provides canonical definitions for many known line shapes Python functions into high-level fitting models with the Model class, and using We want to use this function to fit to data y(x) represented by the arrays y and x . I have a scatter plot composed of X and Y coordinates. I want to use the Least-Squares Fit to a Straight Line to obtain the line of best fit. The Least-Squares Fit to a Straight Line refers to: If(x_1,y_1),.(x_n,y_n) are measured pairs of data, then the best straight line is y = A + Bx. Here is my code in python:


How to do exponential and logarithmic curve fitting in Python, How do you fit an exponential function to data in Python? Use non-linear least squares to fit a function, f, to data. The model function, f (x, ). It must take the independent variable as the first argument and the parameters to fit as separate remaining arguments. xdata : An M-length sequence or an (k,M)-shaped array for functions with k predictors. The independent variable where the data is measured.


8. Curve Fitting, , a Model uses a model function – a function that is meant to calculate a model for some phenomenon – and then uses that to best match an array of supplied data. A clever use of the cost function can allow you to fit both set of data in one fit, using the same frequency. The idea is that you return, as a "cost" array, the concatenation of the costs of your two data sets for one choice of parameters. Thus the leastsq routine is optimizing both data sets at the same time.


7 Effective Methods for Fitting a Linear Model in Python, How to use leastsq function from scipy.optimize in python to fit both a straight line and a quadratic line to data sets x and y. 149 Views. 1. Votes. Use non-linear least squares to fit a function, f, to data. The model function, f (x, …). It must take the independent variable as the first argument and the parameters to fit as separate remaining arguments. The independent variable where the data is measured. Should usually be an M-length sequence or an (k,M)-shaped array for functions with