[Ifeffit] Larch: Fitting error of the objective/model function
Matt Newville
newville at cars.uchicago.edu
Wed Sep 14 13:28:38 CDT 2022
Hi Fan,
Sorry for the trouble. That seems like a strange error to me - I don't see
why changing those expressions for E0s (even if they are "slightly
complicated"!) should generate NaNs or Infinities. I don't think I've seen
that happen with "feffit" fittings. Can you send me a Larch Session File
with this fit in it?
One suggestion is to place bounds (say +/- 20 eV) on those Parameters, say
pars.del_e0_11=param(expr='0.5*del_e0_O+0.5*del_e0_Sr', min=-20, max=20)
But I'm not certain whether that would solve this problem.
On Wed, Sep 14, 2022 at 7:53 AM <dxfan at post.kek.jp> wrote:
> Dear All
>
>
>
> I am doing Temperature-dependent EXAFS experiment with a lot of data.
>
>
>
> Usually, we do these kinds of data fitting by several steps, like below:
>
> First, put every parameter free, and obtain the averaged value of amp.
>
> Second, set the amp to the averaged value, put other parameters free, and
> then obtain the averaged value of del_e0.
>
> Third, set the amp and del_e0 to the averaged value, and fit again.
>
>
>
> In my case, my sample is perovskite structure (Ti K-edge of SrTiO3).
>
> To increase the fitting accuracy, I use three del_e0 for O, Ti, Sr as
> suggested in paper: Haskel, D., et al. Physica B: Condensed Matter 208
> (1995): 151-153.
>
> The fitting parameters of Cubic model is this:
>
> setattr(pars, f'alpha', param(0, vary=True))
>
> setattr(pars, f'amp', param(0, vary=True))
>
> setattr(pars, f'del_e0_O', param(0, vary=True))
>
> setattr(pars, f'del_e0_Sr', param(0, vary=True))
>
> setattr(pars, f'del_e0_Ti', param(0, vary=True))
>
> setattr(pars, f'sig2_O', param(.002, vary=True))
>
> setattr(pars, f'sig2_Sr', param(.002, vary=True))
>
> setattr(pars, f'sig2_Ti', param(.002, vary=True))
>
> setattr(pars, f'sig2_Tr1', param(.002, vary=True))
>
> setattr(pars, f'sig2_p', param(.002, vary=True))
>
> setattr(pars, f'sig2_Tr2', param(.002, vary=True))
>
>
>
> #del_e0 for each path
>
> pars.del_e0_1=param(expr='del_e0_O')
>
> pars.del_e0_2=param(expr='del_e0_O')
>
> pars.del_e0_3=param(expr='del_e0_Sr')
>
> pars.del_e0_4=param(expr='del_e0_Ti')
>
> pars.del_e0_5=param(expr='del_e0_O')
>
> pars.del_e0_6=param(expr='0.5*del_e0_O+0.5*del_e0_Ti')
>
> pars.del_e0_7=param(expr='(2*del_e0_O+del_e0_Ti)/3')
>
> pars.del_e0_8=param(expr='(2*del_e0_O+del_e0_Ti)/3')
>
> pars.del_e0_9=param(expr='(2*del_e0_O+del_e0_Ti)/3')
>
> pars.del_e0_10=param(expr='(2*del_e0_O+del_e0_Ti)/3')
>
> pars.del_e0_11=param(expr='0.5*del_e0_O+0.5*del_e0_Sr')
>
>
>
> In the first step, the fitting is fine, I obtained the averaged amp.
>
> However, in the second step, when I set amp to the averaged value, Error
> happens for “some” of the data.
>
> When I use different averaged amp value, the data that happens error is
> different.
>
> The error is:
>
> Traceback (most recent call last):
>
> File "STO16_C_2.py", line 250, in <module>
>
> out = feffit(pars, dset)
>
> File
> "D:\anaconda3\envs\xraylarch\lib\site-packages\larch\xafs\feffit.py", line
> 557, in feffit
>
> result = fit.leastsq()
>
> File "D:\anaconda3\envs\xraylarch\lib\site-packages\lmfit\minimizer.py",
> line 1689, in leastsq
>
> lsout = scipy_leastsq(self.__residual, variables, **lskws)
>
> File
> "D:\anaconda3\envs\xraylarch\lib\site-packages\scipy\optimize\minpack.py",
> line 423, in leastsq
>
> retval = _minpack._lmdif(func, x0, args, full_output, ftol, xtol,
>
> File "D:\anaconda3\envs\xraylarch\lib\site-packages\lmfit\minimizer.py",
> line 601, in __residual
>
> return _nan_policy(np.asarray(out).ravel(),
>
> File "D:\anaconda3\envs\xraylarch\lib\site-packages\lmfit\minimizer.py",
> line 2436, in _nan_policy
>
> raise ValueError(msg)
>
> ValueError: NaN values detected in your input data or the output of your
> objective/model function - fitting algorithms cannot handle this! Please
> read
> https://lmfit.github.io/lmfit-py/faq.html#i-get-errors-from-nan-in-my-fit-what-can-i-do
> for more information.
>
>
>
> I don’t know what happened, can somebody help me figure this out?
>
>
>
> PS: when I use only one del_e0 for every path, no such error happens.
>
>
>
> Best regards
>
> Fan
> _______________________________________________
> Ifeffit mailing list
> Ifeffit at millenia.cars.aps.anl.gov
> http://millenia.cars.aps.anl.gov/mailman/listinfo/ifeffit
> Unsubscribe: http://millenia.cars.aps.anl.gov/mailman/options/ifeffit
>
--
--Matt Newville <newville at cars.uchicago.edu> 630-327-7411
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://millenia.cars.aps.anl.gov/pipermail/ifeffit/attachments/20220914/9e661cf6/attachment.htm>
More information about the Ifeffit
mailing list