from lmfit import minimize, Minimizer, Parameters, Parameter, report_fit, Model
import numpy as np
def cde(t, Qi, at, vw, R, rhob_cb, al, d, r):
# t (time), is the independent variable
return Qi / (8 * np.pi * ((at * vw)/R) * t * rhob_cb * (np.sqrt(np.pi * ((al * vw)/R * t)))) * \
np.exp(- (R * (d - (t * vw)/ R)**2) / (4 * (al * vw) * t) - (R * r**2)/ (4 * (at * vw) * t))
model_cde = Model(cde)
# Allowed to vary
model_cde.set_param_hint('vw', value =10**-4, min=0.000001)
model_cde.set_param_hint('d', value = -0.038, min = 0.0001)
model_cde.set_param_hint('r', value = 5.637e-10)
model_cde.set_param_hint('at', value =0.1)
model_cde.set_param_hint('al', value =0.15)
# Fixed
model_cde.set_param_hint('Qi', value = 1000, vary = False)
model_cde.set_param_hint('R', value =1.7, vary = False)
model_cde.set_param_hint('rhob_cb', value =3000, vary = False)
# test data
data = [ 1.37, 1.51, 1.65, 1.79, 1.91, 2.02, 2.12, 2.2 ,
2.27, 2.32, 2.36, 2.38, 2.4 , 2.41, 2.42, 2.41, 2.4 ,
2.39, 2.37, 2.35, 2.33, 2.31, 2.29, 2.26, 2.23, 2.2 ,
2.17, 2.14, 2.11, 2.08, 2.06, 2.02, 1.99, 1.97, 1.94,
1.91, 1.88, 1.85, 1.83, 1.8 , 1.78, 1.75, 1.72, 1.7 ,
1.68, 1.65, 1.63, 1.61, 1.58]
time = list(range(5,250,5))
model_cde.fit(data, t= time)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-16-785fcc6a994b> in <module>()
----> 1 model_cde.fit(data, t= time)
/home/bprodz/.virtualenvs/phd_dev/lib/python3.5/site-packages/lmfit/model.py in fit(self, data, params, weights, method, iter_cb, scale_covar, verbose, fit_kws, **kwargs)
539 scale_covar=scale_covar, fcn_kws=kwargs,
540 **fit_kws)
--> 541 output.fit(data=data, weights=weights)
542 output.components = self.components
543 return output
/home/bprodz/.virtualenvs/phd_dev/lib/python3.5/site-packages/lmfit/model.py in fit(self, data, params, weights, method, **kwargs)
745 self.init_fit = self.model.eval(params=self.params, **self.userkws)
746
--> 747 _ret = self.minimize(method=self.method)
748
749 for attr in dir(_ret):
/home/bprodz/.virtualenvs/phd_dev/lib/python3.5/site-packages/lmfit/minimizer.py in minimize(self, method, params, **kws)
1240 val.lower().startswith(user_method)):
1241 kwargs['method'] = val
-> 1242 return function(**kwargs)
1243
1244
/home/bprodz/.virtualenvs/phd_dev/lib/python3.5/site-packages/lmfit/minimizer.py in leastsq(self, params, **kws)
1070 np.seterr(all='ignore')
1071
-> 1072 lsout = scipy_leastsq(self.__residual, vars, **lskws)
1073 _best, _cov, infodict, errmsg, ier = lsout
1074 result.aborted = self._abort
/home/bprodz/.virtualenvs/phd_dev/lib/python3.5/site-packages/scipy/optimize/minpack.py in leastsq(func, x0, args, Dfun, full_output, col_deriv, ftol, xtol, gtol, maxfev, epsfcn, factor, diag)
385 maxfev = 200*(n + 1)
386 retval = _minpack._lmdif(func, x0, args, full_output, ftol, xtol,
--> 387 gtol, maxfev, epsfcn, factor, diag)
388 else:
389 if col_deriv:
/home/bprodz/.virtualenvs/phd_dev/lib/python3.5/site-packages/lmfit/minimizer.py in __residual(self, fvars, apply_bounds_transformation)
369
370 out = self.userfcn(params, *self.userargs, **self.userkws)
--> 371 out = _nan_policy(out, nan_policy=self.nan_policy)
372
373 if callable(self.iter_cb):
/home/bprodz/.virtualenvs/phd_dev/lib/python3.5/site-packages/lmfit/minimizer.py in _nan_policy(a, nan_policy, handle_inf)
1430
1431 if contains_nan:
-> 1432 raise ValueError("The input contains nan values")
1433 return a
1434
ValueError: The input contains nan values
/home/bprodz/.virtualenvs/phd_dev/lib/python3.4/site-packages/ipykernel/__main__.py:3: RuntimeWarning: invalid value encountered in sqrt
app.launch_new_instance()
import matplotlib.pyplot as plt
import pandas as pd
from lmfit import Model
import numpy as np
def ssexp_if(x, a, b, c):
arg = (b * x) ** c
return a * np.exp(-2 * arg)
gmodel = Model(ssexp_if)
params = gmodel.make_params(a=14.5, b=-3, c=1)
datafile = pd.read_excel(r'C:\Users\Desktop\Trial10.xls')
x = datafile.iloc[ :20 , 0]
y = gmodel.eval(params, x=x, nan_policy='omit')
print(pd.isnull(x))
result = gmodel.fit(y, params, x=x)
pandas.isnull()
print(result.fit_report())
plt.plot(x, y, 'bo')
plt.plot(x, result.init_fit, 'k--')
plt.plot(x, result.best_fit, 'r-')
plt.show()
values of x from the excel:
3.750000e-08 5.000000e-08 6.250000e-08 7.500000e-08 8.750000e-08 1.000000e-07 1.125000e-07 1.250000e-07 1.375000e-07 1.500000e-07 1.625000e-07 1.750000e-07 1.875000e-07 2.000000e-07 2.250000e-07 2.500000e-07 2.750000e-07 3.000000e-07 3.250000e-07 3.500000e-07 3.500000e-07
error:
0 False Traceback (most recent call last): 1 False File "C:/Users/PycharmProjects/CurveFitting_Python/CurveFitting_Lmfit.py", line 20, in <module> 2 False result = gmodel.fit(y, params, x=x) 3 False 4 False File "C:\Users\PycharmProjects\CurveFitting_Python\venv\lib\site-packages\lmfit\model.py", line 873, in fit 5 False output.fit(data=data, weights=weights) 6 False 7 False File "C:\Users\PycharmProjects\CurveFitting_Python\venv\lib\site-packages\lmfit\model.py", line 1217, in fit 8 False _ret = self.minimize(method=self.method) 9 False File "C:\Users\PycharmProjects\CurveFitting_Python\venv\lib\site-packages\lmfit\minimizer.py", line 1811, in minimize 10 False return function(**kwargs) 11 False File "C:\Users\PycharmProjects\CurveFitting_Python\venv\lib\site-packages\lmfit\minimizer.py", line 1364, in leastsq 12 False lsout = scipy_leastsq(self.__residual, variables, **lskws) 13 False File "C:\Users\PycharmProjects\CurveFitting_Python\venv\lib\site-packages\scipy\optimize\minpack.py", line 394, in leastsq 14 False gtol, maxfev, epsfcn, factor, diag) 15 False 16 False File "C:\Users\PycharmProjects\CurveFitting_Python\venv\lib\site-packages\lmfit\minimizer.py", line 517, in __residual 17 False nan_policy=self.nan_policy) 18 False File "C:\Users\PycharmProjects\CurveFitting_Python\venv\lib\site-packages\lmfit\minimizer.py", line 2021, in _nan_policy 19 False raise ValueError("The input contains nan values") Name: 2.5e-08, dtype: bool ValueError: The input contains nan values
Hello Matt!I am facing the same issue with my model which is not much complex than the one mentioned in this post.
Would the exponent in the model cause the issue?
I have tried to find the issue in google before asking it here,but the google itself has directed me to this group.Can we do set parameter hint for an independent variable to eliminate the error?