1

为什么fitmatlab的函数这么慢?我正在尝试拟合一个gauss4,这样我就可以获得高斯的手段。

这是我的情节,

在此处输入图像描述

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

我在那里拟合高斯,但这个函数真的很慢。

有替代方案吗?

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

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

    a_cm = sort(acm, 'ascend');
4

2 回答 2

2

我会应用一些可用的选项fit。这些包括通过设置进行平滑SmoothingParam(您的数据非常嘈杂,应用时域过滤器的替代方案也可能有帮助*),以及设置初始参数估计的值,使用StartPoint. 您的拟合也可能不会收敛,因为您将容差 ( TolFun, TolX) 设置得太低,尽管通过检查您的拟合似乎并非如此,但实际上可能相反,您可能想要增加MaxIter和/或MaxFunEvals

要弄清楚如何开始,您还可以尝试Spectr-O-Matic 工具箱。它需要 Matlab 7.12。它包括一个调用GaussFit.m以适应gauss4数据的脚本,但它也使用该fit例程并提供有关如何设置和获取参数的示例。

  • 请注意,平滑当然会扩大您的峰值,但您可以在事后减去贡献。相反,对平均值的影响不应该是有害的,因为您可能正在消除噪声,这应该更准确。
于 2013-07-30T21:22:45.967 回答
0

一般来说,如果将其应用于较短的系列,功能会更快。因此,如果加速真的很重要,你可以下采样。

例如,如果你有一个向量,你想通过因子 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功能必须提供的最有效的选项来完成。

于 2013-07-31T12:00:57.630 回答