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