优化傅立叶级数拟合函数Matlab

时间:2015-10-27 07:48:29

标签: matlab regression curve-fitting continuous-fourier

我正在尝试迭代一组似乎显示周期性变化的样本。我需要不断应用拟合函数来获得傅里叶级数系数​​,回归必须是过去的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。

1 个答案:

答案 0 :(得分:0)

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

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

我建议的另一件事是profile your code。这将提供有关代码的哪些部分消耗最多时间的信息,帮助您集中精力改善这些部分的性能。