import numpy as np
from scipy.optimize import curve_fit
from scipy.stats.distributions import t as t_distribution
def fun_fit(fun, xdata, ydata):
'''
import numpy as np
from scipy.optimize import curve_fit
from scipy.stats.distributions import t as t_distribution
'''
pars, pcov = curve_fit(fun,xdata,ydata)
n = len(ydata)
p = len(pars)
alpha = 0.05
dof = n - p
tval = t_distribution.ppf(1.-alpha/2.,dof)
sigma = np.sqrt(np.diag(pcov))
for i in range(p):#fun()里的参数顺序,95%置信区间
print('p{0}: {1:5.3f} [{2:5.3f} {3:5.3f}]'\
.format(i,pars[i],
pars[i]-sigma[i]*tval,
pars[i]+sigma[i]*tval))
def fun(x,A,b):
return A*x+b
x = [1 ,2, 3 ]
y = [2 ,4, 6 ]
fun_fit(fun,x,y)
p0: 2.000 [2.000 2.000]
p1: -0.000 [-0.000 -0.000]