diff options
author | Picca Frédéric-Emmanuel <picca@debian.org> | 2014-08-31 10:37:02 +0200 |
---|---|---|
committer | Picca Frédéric-Emmanuel <picca@debian.org> | 2014-08-31 10:37:02 +0200 |
commit | ea3665143e82ab188e13521d2ad4686c80a1c0f2 (patch) | |
tree | 42e1dc486ef91edb1f1b94c74a31f63824e86475 /tests/test_bounds.py | |
parent | 76c78491f97de86e35a910990fc979356b5febc4 (diff) |
Imported Upstream version 0.8.0~rc2+dfsg.1
Diffstat (limited to 'tests/test_bounds.py')
-rw-r--r-- | tests/test_bounds.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/test_bounds.py b/tests/test_bounds.py new file mode 100644 index 0000000..0ae9417 --- /dev/null +++ b/tests/test_bounds.py @@ -0,0 +1,54 @@ +from lmfit import Parameters, minimize, fit_report +from lmfit_testutils import assert_paramval, assert_paramattr + +from numpy import linspace, zeros, sin, exp, random, pi, sign + +def test_bounds(): + p_true = Parameters() + p_true.add('amp', value=14.0) + p_true.add('period', value=5.4321) + p_true.add('shift', value=0.12345) + p_true.add('decay', value=0.01000) + + def residual(pars, x, data=None): + amp = pars['amp'].value + per = pars['period'].value + shift = pars['shift'].value + decay = pars['decay'].value + + if abs(shift) > pi/2: + shift = shift - sign(shift)*pi + + model = amp*sin(shift + x/per) * exp(-x*x*decay*decay) + if data is None: + return model + return (model - data) + + n = 1500 + xmin = 0. + xmax = 250.0 + random.seed(0) + noise = random.normal(scale=2.80, size=n) + x = linspace(xmin, xmax, n) + data = residual(p_true, x) + noise + + fit_params = Parameters() + fit_params.add('amp', value=13.0, max=20, min=0.0) + fit_params.add('period', value=2, max=10) + fit_params.add('shift', value=0.0, max=pi/2., min=-pi/2.) + fit_params.add('decay', value=0.02, max=0.10, min=0.00) + + out = minimize(residual, fit_params, args=(x,), kws={'data':data}) + + fit = residual(fit_params, x) + + assert(out.nfev > 10) + assert(out.nfree > 50) + assert(out.chisqr > 1.0) + + print(fit_report(out, show_correl=True, modelpars=p_true)) + assert_paramval(fit_params['decay'], 0.01, tol=1.e-2) + assert_paramval(fit_params['shift'], 0.123, tol=1.e-2) + +if __name__ == '__main__': + test_bounds() |