我正在编写一个基于scipy的二维数据的自动曲线拟合程序优化.leatsq,而且有效。但是,当添加许多曲线时,其起始值很小,我会得到非物理结果(例如,负振幅)。在
我发现了这篇文章Scipy: bounds for fitting parameter(s) when using optimize.leastsq,并试图根据Cern的Minuit使用参数转换。在上面提到的问题中,有人提供了一些python代码的链接。在
code.google.com/p/nmrglue/source/browse/trunk/nmrglue/analysis/leastsqbound.py
我写了这个最小的工作示例(扩展代码)
^{pr2}$这是绘图输出,其中绿色为起始条件,红色为拟合结果:
这是正确的用法吗?External2internal转换只是在边界外抛出一个nan。莱斯特斯克似乎能处理好这件事?在
我上传了配件数据here。只需粘贴到名为约束.dat. 在
试试lmfit py-https://github.com/newville/lmfit-py
它还使用了Levenberg-Marquardt(LM)算法scipy.optimize.leatsq. 不确定是可以的。
它不仅允许您用边界约束拟合参数,还可以用它们之间的数学表达式约束拟合参数,而无需修改拟合函数。
忘了用那些糟糕的p[0],p[1]。。。在拟合函数中。只需通过parameters类使用拟合参数的名称。
在sega_-sai的回答之后,我使用mpfit.py在
拟合结果如下:
^{pr2}$所以结论是:两种方法都有效,都允许约束。但由于mpfit来自一个非常成熟的来源,我更相信它。如果可能的话,它也支持错误值。在
目前已有一种流行的受限Lev-Mar码
http://adsabs.harvard.edu/abs/2009ASPC..411..251M
用python实现
http://code.google.com/p/astrolibpy/source/browse/mpfit/mpfit.py
我建议不要重新发明轮子。在
相关问题 更多 >
编程相关推荐