Scipy:使用optimize.leastsq进行拟合参数时的限制范围

6

我正在使用optimize.leastsq来拟合数据。我想将拟合参数限制在一定的范围内。在使用optimize.leastsq时是否可以定义边界?虽然边界已经在optimize.fmin_slsqp中实现,但我更喜欢使用optimize.leastsq。

3个回答

6

我认为处理边界的标准方法是,当参数超过边界时,使要最小化的函数(残差)变得非常大。

import scipy.optimize as optimize
def residuals(p,x,y):
    if within_bounds(p):
        return y - model(p,x)
    else:
        return 1e6

p,cov,infodict,mesg,ier = optimize.leastsq(
    residuals,p_guess,args=(x,y),full_output=True,warning=True)

你的意思是,在拟合参数超出范围时,添加一个if条件语句返回一个高值,而不是实际残差吗? - gandi2223

3

转换是一个好的方法。这里有一个MATLAB文件,它已经被很好地注释了,所以(相对简单的)数学问题是清晰的。 - reve_etrange
我测试过了,如果你只给它正确类型的函数,它是可以工作的。但是它是按照scipy.optimize中leastsq的语法来设计的,所以应该没有问题。 - HansHarhoff

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接