# python3 compatibility in pyhton 2
from __future__ import division
from __future__ import absolute_import
from __future__ import print_function
from __future__ import unicode_literals
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
# --------------------------------------------------------------------------------
def poly2(x, a=1.0, b=0.0, c=0.0):
return a * x**2 + b * x + c
def chi2_fit():
# set data
xm = np.array([.05,0.36,0.68,0.80,1.09,1.46,1.71,1.83,2.44,2.09,3.72,4.36,4.60])
ym = np.array([0.35,0.26,0.52,0.44,0.48,0.55,0.66,0.48,0.75,0.70,0.75,0.80,0.90])
ye = np.array([0.06,0.07,0.05,0.05,0.07,0.07,0.09,0.1,0.11,0.1,0.11,0.12,0.1])
# linear least squares with scipy.optimize.curve_fit
par, cov = curve_fit( poly2, xm, ym, sigma=ye, absolute_sigma=True )
print("Fit parameters:\n", par)
print("Covariance matrix:\n", cov)
# plot fit result
xp = np.linspace( 0., 5., 100 )
ffit = poly2( xp, par[0], par[1], par[2] )
plt.errorbar( xm, ym, yerr=ye, fmt='o' )
plt.plot( xp, ffit, '-' )
plt.xlim( 0, 5 )
plt.ylim( 0, 1 )
plt.show()
if __name__ == '__main__': # - execution starts here -
chi2_fit()