我正在用scipy编写Python程序(scipy.optimize.curve\u fit曲线拟合). 我必须在一个数据集上拟合多条曲线,然后对它们求和。第一步是找到所有的最大值,这是完成。至少会有一个,但通常会更多。我想概括如下。你知道吗
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)
等等。我需要它,这样曲线拟合将认识到有(3*最大值)参数,然后它会找到他们为我。可能有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])
可以使用arbitrary argument lists创建接受任意数量参数的lambda函数。然后可以使用列表理解一次获取三个参数,对它们执行操作,然后对结果求和。你知道吗
如果我没弄错,你应该可以用一个lambda:
然后呢
如果
maxima
是(我猜是这样)。你知道吗
相关问题 更多 >
编程相关推荐