import numpy as np from scipy.optimize import curve_fit func = lambda x, a, b: a*x + b #f(x) = ax + b x = np.linspace(0, 4.75, 20) #x = [0.00, 0.25, 0.50, ...] y = np.array([1.5891700001638700, 1.2046979031630900, 2.598484110379440, 2.2043375760987900, 3.002229375836470, 2.928655222350250, 3.4769844321649000, 4.007335261529810, 4.534192485682100, 5.76185759925369, 6.41954394976063, 6.023919923933230, 7.443742735575060, 7.870686775946450, 8.022587710435350, 9.395420889477870, 9.948288024421440, 9.986332770533490, 9.694674681091840, 10.519384785632700]) sig = np.array([0.5320185951347170, 0.45427229254919400, 0.5077027054798450, 0.5205826529502230, 0.4698090780151540, 0.4773624121076510, 0.5018787752525470, 0.4897362325985810, 0.49462141854510300, 0.5405394898833090, 0.4523449367708450, 0.48898047501417500, 0.5342659697011440, 0.4730380798563350, 0.4572104512757930, 0.49902577926821200, 0.530527413902035, 0.48969676619036700, 0.5443240285483060, 0.47616567472190800]) #if saved file is existed """ x, y, err = np.loadtxt('line.data', unpack = True) """ NDF = x.size - 2 # # of Degree of Freedom popt, pcov = curve_fit(func, x, y, sigma = sig, absolute_sigma = True) #popt: inferenced coefficient, pcov: covariance between coefficients perr = np.sqrt(np.diag(pcov))# diagonal elements of covariance matrix are error of each coefficient chi2 = np.sum((y - func(x,*popt))**2 / sig**2) print("y = {0}x + {1}".format(popt[0],popt[1])