【问题标题】:fit function of Matlab is really slowMatlab的拟合函数真的很慢
【发布时间】:2013-07-30 20:51:29
【问题描述】:

为什么 Matlab 中的fit函数这么慢?我正在尝试使用gauss4,以便获得高斯人的手段。

这是我的阴谋,

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

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

还有其他选择吗?

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

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

    a_cm = sort(acm, 'ascend');

【问题讨论】:

标签: matlab curve-fitting


【解决方案1】:

我会应用fit 提供的一些options。这些包括通过设置SmoothingParam 进行平滑处理(您的数据非常嘈杂,应用时域过滤器的替代方案也可能有帮助*),并使用StartPoint 设置初始参数估计值。您的配合也可能不会收敛,因为您将公差(TolFunTolX)设置得太低,尽管从检查您的配合看来情况并非如此,但实际上可能相反,您可能想要增加MaxIter 和/或MaxFunEvals

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

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

【讨论】:

  • 主要问题是太慢了。
  • 嘿嘿,是啊...有多慢?应用其中一些选项可能会减少收敛所需的迭代次数,从而加快速度。
  • 唯一的选择是尝试不同的拟合算法,fit 使用 Levenberg-Marquardt 作为默认值,大多数非线性拟合例程处理此类问题也是如此。事实上,我不知道你能比 L-M 做得更好。
【解决方案2】:

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

例如,如果你有一个向量,你想通过因子 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 函数必须提供的最有效选项结合使用。

【讨论】:

    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 2023-04-04
    • 2017-11-10
    • 2010-12-28
    • 2013-01-25
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多