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

scipy leastsq fit - penalize certain solutions

我实现了一种能够同时拟合多个数据集的算法。它基于此解决方案:multi fit

目标函数太复杂,这里无法展示(LaFortune散点模型),所以我将使用解决方案中的目标函数进行解释:

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

如果拟合算法选择了导致 lor_func < 0.

的参数集 par,我该如何惩罚它?

从数学的角度来看,目标函数的负值是有效的。所以导致这个负目标函数的参数集par可能是误差最小的解。但我想排除这样的解决方案,因为它们在物理上也无效。

函数如:

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

不适用于 returns 错误数据,因为它也优化了 0 值。结果将与正确的结果不同。

使用 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?