Afaik,
there was a big discussion about this a while ago, and the short answer is, currently there is no 'automatic' way to do it. However, in your case, it's pretty easy.
Simply define:
def func (x, a,b, r):
a = abs(a)
b = abs(b)
r = abs(r)
return r + a*np.power(x,-b)
And that will do the trick. If you need to more complex boundaries, you can simply use a combination of period functions with a given amplitude or what have you. Alternatively, there are *a lot* of optimization libraries available for Python that are not a part of scipy that offer the possibility to specify boundaries.
For example:
http://newville.github.com/lmfit-py/
http://ab-initio.mit.edu/wiki/index.php/NLopt_Python_Reference
Federico
Date: Wed, 16 May 2012 18:20:27 +0200
From: servant mathieu <servant.mathieu@gmail.com>
Subject: [SciPy-User] is it possible to constrain the
scipy.optimize.curve_fit function?
To: scipy-user@scipy.org
Message-ID:
<CALnu5bM+c9L7taG_CBHdJhw7xpe5amHSVBRUEX7pa7gnRN+-7Q@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
Dear scipy users,
I'm trying to fit to data a power law of the form :
def func (x, a,b, r):
return r + a*np.power(x,-b)
I would like to constrain the curve_fit routine to only allow
positive parameter values. How is it possible to do so?
Kind regards,
Mathieu