我正在使用 scipy (scipy.optimize.curve_fit) 编写一个 Python 程序。我必须在数据集上拟合多条曲线,然后总结它们。第一步是找到所有最大值,这就完成了。至少会有一个,但通常会更多。我想概括如下。
if (len(Maxima) == 1):
f = lambda a, b, c : a * exp((b * x) + c)
else if (len(Maxima) == 2):
f = lambda a, b, c, d, e, f : (a * exp((b * x) + c)) + (d * exp((e * x) + f)
等等。我需要它,因此 curve_fit 会识别出有 (3 * Maxima) 参数,然后它会在其中为我找到它们。最多可能有 20 条左右的曲线,因此执行上述语句是不切实际的。
任何帮助,将不胜感激。
谢谢。
编辑:对不起,我错过了该函数依赖于最大值。它实际上是集中在每个最大值上的高斯分布。
即一个术语实际上是
f = (a * (Gamma ** 2) / (((E - Maxima[i])**2) + (b**2)))
而 E 是 args 必须以它开头的自变量。
例如,对于
len(Maxima) == 2
args 必须是,
E, a0, b0, Maxima[0], a1, b1, Maxima[1]
对不起,我错了。
编辑2:
我在想这样的事情:
GaussianDistribution = lambda E, E0, I0, Sigma : (I0 * np.exp(-(((E - E0) / Sigma)**2)))
args = tuple([long] * ((len(Maxima) * 3) + 1))
d1, d2 = sc.curve_fit(GaussianDistribution(*args), Data[:, 0], Data[:, 1])