Python曲线拟合库,允许我为参数分配边界

我希望能够执行允许我将任意曲线函数拟合到数据的拟合,并允许我在参数上设置任意边界,例如我想拟合函数:

f(x) = a1(x-a2)^a3\cdot\exp(-\a4*x^a5)

并说:

> a2在以下范围内:( – 1,1)
> a3和a5是正面的

有很好的scipy curve_fit功能,但它不允许指定参数边界.还有一个很好的http://code.google.com/p/pyminuit/库可以进行泛型最小化,它允许设置参数的界限,但在我的情况下它没有覆盖.

解决方法:

注意:SciPy版本0.17中的新功能

假设您想要将模型拟合到如下所示的数据:

y=a*t**alpha+b

以及对alpha的约束

0<alpha<2

而其他参数a和b仍然是免费的.然后我们应该以下列方式使用curve_fit的bounds选项:

import numpy as np
from scipy.optimize import curve_fit
def func(t, a,alpha,b):
     return a*t**alpha+b
param_bounds=([-np.inf,0,-np.inf],[np.inf,2,np.inf])
popt, pcov = curve_fit(func, xdata, ydata,bounds=param_bounds)

来源是here.

上一篇:5.4.1. Check Constraints


下一篇:WEB入门 bugku web5