-1

I have a data set that I know fits to a curve of the form:

y = a x² 

and I want to extract the value of a.

What's the best way to go about this in Python (with scipy etc.) ?

2
  • Possible duplicate of python numpy/scipy curve fitting Commented Mar 1, 2019 at 13:48
  • There are tons of posts on SO that show how to do this. Just google for python curve_fit or python lmfit and you will find plenty of examples. If you then run into issues with the implementation, post your code and data and describe the actual problem you face. Commented Mar 1, 2019 at 15:58

1 Answer 1

0

Here is a graphical fitter example using scipy's curve_fit():

import numpy, scipy, matplotlib import matplotlib.pyplot as plt from scipy.optimize import curve_fit xData = numpy.array([1.1, 2.2, 3.3, 4.4, 5.0, 6.6, 7.7]) yData = numpy.array([1.1, 20.2, 30.3, 60.4, 50.0, 60.6, 70.7]) def func(x, a): return (a * numpy.square(x)) # same as the scipy default initialParameters = numpy.array([1.0]) # curve fit the test data fittedParameters, pcov = curve_fit(func, xData, yData, initialParameters) modelPredictions = func(xData, *fittedParameters) absError = modelPredictions - yData SE = numpy.square(absError) # squared errors MSE = numpy.mean(SE) # mean squared errors RMSE = numpy.sqrt(MSE) # Root Mean Squared Error, RMSE Rsquared = 1.0 - (numpy.var(absError) / numpy.var(yData)) print('Parameters:', fittedParameters) print('RMSE:', RMSE) print('R-squared:', Rsquared) print() ########################################################## # graphics output section def ModelAndScatterPlot(graphWidth, graphHeight): f = plt.figure(figsize=(graphWidth/100.0, graphHeight/100.0), dpi=100) axes = f.add_subplot(111) # first the raw data as a scatter plot axes.plot(xData, yData, 'D') # create data for the fitted equation plot xModel = numpy.linspace(min(xData), max(xData)) yModel = func(xModel, *fittedParameters) # now the model as a line plot axes.plot(xModel, yModel) axes.set_xlabel('X Data') # X axis data label axes.set_ylabel('Y Data') # Y axis data label plt.show() plt.close('all') # clean up after using pyplot graphWidth = 800 graphHeight = 600 ModelAndScatterPlot(graphWidth, graphHeight) 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.