Hi Matt,<br><br><div class="gmail_quote">On Mon, Aug 15, 2011 at 3:05 PM, Matt Newville <span dir="ltr">&lt;<a href="mailto:newville@cars.uchicago.edu">newville@cars.uchicago.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi,<br>
<br>
Having used on numpy and scipy for many years and being very pleased<br>
with them, I&#39;ve found an area which I think might benefit from a<br>
modest improvement, and have tried to implement this.<br>
<br>
The scipy.optimize routines are robust, but seem a little unfriendly<br>
to people coming from proprietary environments or Numerical<br>
Recipes-level tools.   Specifically, the Levenberg-Marquardt algorithm<br>
is used heavily in many domains (including the x-ray spectroscopy<br>
fields I am most familiar with), but the MINPACK and<br>
scipy.optimize.leastsq implementation lack convenient ways to:<br>
      -  turn on/off parameters for fitting,  that is, to &quot;fix&quot;<br>
certain parameters.<br>
      -  place simple min/max bounds on parameters<br>
      -  place simple mathematical constraints on parameters.<br>
<br>
While these limitations can be worked around, doing so requires<br>
putting many options into the function to be minimized, which is<br>
somewhat inconvenient.    On the other hand, these features do exist<br>
in less robust fitting code that is not based on directly on MINPACK<br>
or as well-supported as scipy.<br>
<br>
I&#39;ve written a module to do this so that the least-squares<br>
minimization from scipy.optimize.leastsq can take bounded and<br>
constrained parameters, and tried to make it of general use.    This<br>
code (BSD-licensed, somewhat documented) is at<br>
         <a href="http://github.com/newville/lmfit-py" target="_blank">http://github.com/newville/lmfit-py</a><br>
<br>
The constraint mechanism is a bit involved (using the ast module<br>
instead of &#39;eval&#39;), but the rest of the code is quite straightforward<br>
and simple.   Currently, this supports minimization with<br>
scipy.optimize.leastsq, scipy.optimize.fmin_l_bfgs_b, and<br>
scipy.optimize.anneal. Supporting other algorithms could be possible.<br>
<br>
If you find this interesting or useful, I&#39;d appreciate any feedback<br>
you might have.  For example, this is not currently organized as a<br>
scikit -- would that be preferable?<br>
<font color="#888888"><br></font></blockquote><div> <br></div></div>This will probably be useful to me at some point. Whether or not you organize it as a scikit, it may be good to list your package at <a href="http://scipy.org/Topical_Software">http://scipy.org/Topical_Software</a>.<br>
<br>Ralf<br><br>