0

我正在尝试遍历一组似乎显示周期性变化的样本。我需要不断地应用拟合函数来获得傅立叶级数系数​​,回归必须是过去的 n 个样本(在我的例子中,大约是 30)。问题是,我的代码非常慢!对一组 50,000 个样本执行此操作大约需要 1 小时。有没有办法优化这个?我究竟做错了什么?

这是我的代码:

function[coefnames,coef] = fourier_regression(vect_waves,n)        

    j = 1;
    coef = zeros(length(vect_waves)-n,10);

    for i=n+1:length(vect_waves)

        take_fourier = vect_waves(i-n+1:i);
        x = 1:n;
        f = fit(x,take_fourier,'fourier4');
        current_coef = coeffvalues(f);
        coef(j,1:length(current_coef)) = current_coef;
        j = j + 1;



    end
    coefnames = coeffnames(f);

end

当我打电话时,[coefnames,coef] = fourier_regression(VECTOR,30);这需要永远计算。有什么办法可以解决吗?我的代码有什么问题?

注意:我有一个 intel i7 5500 U cpu,16GB RAM,并使用 Matlab 2015a。

4

1 回答 1

0

由于我不熟悉您的应用程序,我不确定是否可以对代码进行矢量化以提高性能。但是,我还有其他一些提示。

您应该考虑的一件事是预分配数组。在这种情况下,您应该至少预先分配数组coef,因为我相信您在开始循环之前确实知道它的大小。

我建议的另一件事是分析您的代码。这将提供有关代码中哪些部分最耗时的信息,帮助您将精力集中在提高这些部分的性能上。

于 2015-10-27T08:07:38.063 回答