我正在尝试迭代一组似乎显示周期性变化的样本。我需要不断应用拟合函数来获得傅里叶级数系数,回归必须是过去的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。
答案 0 :(得分:0)
由于我不熟悉您的应用程序,我不确定是否可以对代码进行矢量化以提高性能。但是,我还有其他一些提示。
您应该考虑的一件事是preallocation of arrays。在这种情况下,您应该至少预先分配数组coef
,因为我相信您在开始循环之前知道它的大小。
我建议的另一件事是profile your code。这将提供有关代码的哪些部分消耗最多时间的信息,帮助您集中精力改善这些部分的性能。