Matlab的拟合函数真的很慢

时间:2013-07-30 20:51:29

标签: matlab curve-fitting

为什么Matlab的fit函数这么慢?我正试图适应gauss4所以我可以得到高斯的手段。

这是我的情节,

enter image description here

我想从蓝色数据和红色数据中获取手段。

我在那里装高斯,但这个功能真的很慢。

有替代方案吗?

    fa = fit(fn', facm', 'gauss4');

    acm = [fa.b1 fa.b2 fa.b3 fa.b4];

    a_cm = sort(acm, 'ascend');

2 个答案:

答案 0 :(得分:2)

我会应用fit提供的部分options。这些包括通过设置SmoothingParam进行平滑(您的数据非常嘈杂,应用时域过滤器的替代方案也可能有帮助*),并使用StartPoint设置初始参数估算值。您的拟合可能也不会收敛,因为您将公差(TolFunTolX)设置得太低,尽管通过检查您的拟合似乎并非如此,实际上情况可能相反,您可能希望增加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函数必须提供的最有效选项结合使用。