为什么Matlab的fit
函数这么慢?我正试图适应gauss4
所以我可以得到高斯的手段。
这是我的情节,
我想从蓝色数据和红色数据中获取手段。
我在那里装高斯,但这个功能真的很慢。
有替代方案吗?
fa = fit(fn', facm', 'gauss4');
acm = [fa.b1 fa.b2 fa.b3 fa.b4];
a_cm = sort(acm, 'ascend');
答案 0 :(得分:2)
我会应用fit
提供的部分options。这些包括通过设置SmoothingParam
进行平滑(您的数据非常嘈杂,应用时域过滤器的替代方案也可能有帮助*),并使用StartPoint
设置初始参数估算值。您的拟合可能也不会收敛,因为您将公差(TolFun
,TolX
)设置得太低,尽管通过检查您的拟合似乎并非如此,实际上情况可能相反,您可能希望增加MaxIter
和/或MaxFunEvals
。
要了解如何开始,您还可以尝试Spectr-O-Matic
toolbox。它需要Matlab 7.12。它包含一个名为GaussFit.m
的脚本以使gauss4
适合数据,但它也使用fit
例程并提供有关如何设置和获取参数的示例。
答案 1 :(得分:0)
通常,如果将其应用于较短的系列,功能会更快。因此,如果加速非常重要,您可以下采样。</ p>
例如,如果你想要一个向下采样2的向量:(你可能需要确保它首先适合)
n = 2;
x = sin(0.01:0.01:pi);
x_downsampled = x(1:n:end)+x(2:n:end);
现在您将看到x_downsampled更小(因此应该更容易处理),但仍然具有相同的形状。在你的情况下,我认为这已经足够了。 看看你得到了什么: 积(x)的
现在您只需处理x_downsampled
并映射您的解决方案,例如
f = find(x_downsampled == max(x_downsampled));
location_of_maximum = f * n;
毋庸置疑,这应该与fit
函数必须提供的最有效选项结合使用。