我希望能够执行拟合,允许我将任意曲线函数拟合到数据,并允许我设置参数的任意边界,例如我想要拟合函数:
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 .
关于允许我为参数分配边界的 Python 曲线拟合库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16760788/