Source code for aiida_yambo.workflows.utils.fittings
import numpy as np
from scipy.optimize import curve_fit
'''
author: Andrea Ferretti
'''
[docs]def func(xv,*args):
y = 1.0
for i in range(len(xv)):
A=args[2*i]
B=args[2*i+1]
xval=xv[i]
y = y * ( A/xval + B)
return y
[docs]def fitting(func, xdata,ydata, p0=None,method=None,weights=None):
#
if (p0==None):
nvars=len(xdata)
p0=[1.0 for x in range(2*nvars)]
#
try:
params, pcov = curve_fit(func,xdata,ydata,p0=p0,method=None,sigma=weights)
except ValueError:
print("ValueError: Invalid input data")
info=-1
except RuntimeError:
print("RuntimeError: LeastSquares fitting failed")
info=-2
except:
print("Unexpected error")
info=-3
else:
info=pcov.trace()
#
val_inf = 1.0
for i in range(0,len(params),2):
val_inf=val_inf*params[i+1]
#
rms=np.mean((ydata-func(xdata, *params))**2)
#
print("Fitting PARAMS: ",params)
print("Fitting RMS : ",rms)
print("Fitting EXTRAP: ",val_inf)
return params, rms, val_inf
[docs]def load_data(filename,n_set):
import numpy as np
data=np.loadtxt(filename,comments="#")
ncol=data.shape[1]
xdata=[]
for i in range(ncol-nset):
xdata.append(data[:,i])
ydata=data[:,ncol-nset:]
#
return xdata,ydata