scipy leastsq fit - 惩罚某些解决方案

时间:2017-03-02 18:17:02

标签: python scipy constraints least-squares

我已经实现了一种能够同时适应多个数据集的算法。它基于这个解决方案:multi fit

目标函数太复杂而无法在此显示(LaFortune散点模型),因此我将使用解决方案中的目标函数进行解释:

def lor_func(x,c,par):
    a,b,d=par
    return a/((x-c)**2+b**2)

如果选择导致par的参数集lor_func < 0,我该如何惩罚拟合算法。

从数学的角度来看,目标函数的负值是有效的。因此,导致此负目标函数的参数集par可能是具有最小错误的解决方案。但我想排除这些解决方案,因为它们既不是物理上有效的。

类似的功能:

def lor_func(x,c,par):
    a,b,d=par
    value = a/((x-c)**2+b**
    return max(0, value)

不起作用,因为拟合返回错误数据,因为它也优化了0值。结果将与正确的结果不同。

1 个答案:

答案 0 :(得分:1)

使用scipy.optimize.least_squaresbounds参数?

res = least_squares(func, x_guess, args=(Gd, K),
                    bounds=([0.0, -100, 0, 0],
                            [1.0, 0.0, 10, 1]),
                             max_nfev=100000, verbose=1)
像我在这里做的那样: Suggestions for fitting noisy exponentials with scipy curve_fit?