这里的解决方案是编写一个包装函数,它接受参数列表并将其转换为 fit 函数可以理解的变量。这实际上只是必要的,因为我正在使用其他人的代码,在更直接的应用程序中,这将在没有包装层的情况下工作。基本上
def wrapper_fit_func(x, N, *args):
a, b, c = list(args[0][:N]), list(args[0][N:2*N]), list(args[0][2*N:3*N])
return fit_func(x, a, b, c, N)
要修复 N,您必须在 curve_fit 中调用它,如下所示:
popt, pcov = curve_fit(lambda x, *params_0: wrapper_fit_func(x, N, params_0), x, y, p0=params_0)
where
params_0 = [a_1, ..., a_N, b_1, ..., b_N, c_1, ..., c_N]