【发布时间】:2022-11-14 04:03:26
【问题描述】:
我在尝试找到高斯曲线拟合的参数时遇到了麻烦。
网站https://mycurvefit.com/ 很快就提供了一个很好的答案。但是,我使用来自 scipy.optimize 库的 python 的 curve_fit() 实现并没有提供好的结果(即使在输入答案时)。
例如,我试图拟合的方程如下:
def gauss_func(x, a, b, c):
return a * np.exp(-(x-b)**2/(2*c**2))
带输入点:
x_main = np.array([19.748, 39.611, 59.465])
y_main = np.array([0.438160379, 0.008706677, 0.000160106])
我想在哪里找到参数一个,b和C. 从 mycurvefit 网站,我得到了答案:
一个 = 4821416
b = -154.0293
c = 30.51661
这很适合给定的点。但是当我尝试使用 curve_fit() 运行时:
poptMain, pcovMain = curve_fit(gauss_func, x_main, y_main, p0=(1, -1, 1),sigma=np.array([1,1,1]))
我得到“RuntimeError:未找到最佳参数:函数调用次数已达到 maxfev = 800。”错误。
我尝试了什么:
- 将 maxfev 更改为其他值,例如 5000、10000、100000(无效)。
- 将初始猜测 p0 替换为更接近 mycurvefit 答案的值(无效)和常见值,例如 [1, 1, 1]、[1, 0, 1] 等(无效)。
即使输入答案,它仍然找不到参数!我之前曾在其他类似案例中使用过相同的代码,并且效果很好。但这一次它根本没有收敛。我能做些什么来解决这个问题?
【问题讨论】:
-
考虑使用不同的优化器(例如 Nelder Meade vs Levenberg Marquardt)