from scipy.optimize import curve_fit
import pandas as pd
import numpy as np
from uncertainties import ufloat
from bokeh.plotting import figure, show, output_file, save
data = pd.read_csv('./data_b.txt', sep=" ", header=None)
data.columns = ['x','y']
data['weights']=data['y'].apply(lambda elem: 0.01*elem)
data.dtypes
data
def fit_data(_func,_data,p0=None,bounds=(-np.inf,np.inf)):
_x=_data['x']
_y=_data['y']
_weights=_data['weights']
popt, pcov = curve_fit(_func, _x, _y,sigma=_weights,p0=p0,bounds=bounds)
#
#lin=ufloat(popt[1],np.sqrt(pcov[1,1]))
#const=ufloat(popt[0],np.sqrt(pcov[0,0]))
#
return popt, pcov
def _func(x, N, w,e):
return np.exp(-w*(x/e + e/x))*N
popt, pcov = fit_data(_func, data,p0=[1,1,60])
x = np.linspace(5, 120, 120)
y = _func(x,popt[0],popt[1],popt[2])
y = _func(x,popt[0],popt[1],popt[2])
TOOLS = "pan,wheel_zoom,box_zoom,reset,save,box_select"
p1 = figure(title="Plot Example", tools=TOOLS)
p1.circle(data['x'], data['y'], legend="Data",color="orange")
p1.line(x, y, legend="function(x)")
output_file("legend.html", title="legend.py example")
save(p1) # open a browser
def _func2(x, N, w,e,N1, w1,e1):
return np.exp(-w*(x/e + e/x))*N + np.exp(-w1*(x/e1 + e1/x))*N1
popt, pcov = fit_data(_func2, data,p0=[1,1,40,1,1,67],bounds=(0,np.inf) )
x = np.linspace(5, 120, 120)
y = _func2(x,popt[0],popt[1],popt[2],popt[3],popt[4],popt[5])
TOOLS = "pan,wheel_zoom,box_zoom,reset,save,box_select"
p1 = figure(title="Plot Example", tools=TOOLS)
p1.circle(data['x'], data['y'], legend="Data",color="orange")
p1.line(x, y, legend="sin(x)")
output_file("legend2.html", title="legend.py example")
save(p1) # open a browser
popt
pcov