我已经实现了一种能够同时适应多个数据集的算法。它基于这个解决方案: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值。结果将与正确的结果不同。
答案 0 :(得分:1)
使用scipy.optimize.least_squares的bounds
参数?
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?