【发布时间】:2016-01-26 12:50:12
【问题描述】:
我正在尝试遍历一组似乎显示周期性变化的样本。我需要不断地应用拟合函数来获得傅立叶级数系数,回归必须是过去的 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。
【问题讨论】:
-
coeffnames来自哪里?在倒数第二行调用它之前,您没有定义它。我建议您还说明vect_waves中包含的内容,即什么样的数字,并可能发布前 10 行左右,以便我们自己尝试代码。另外请发布您使用的系统类型:CPU、RAM、OS、MATLAB 版本,这样我们可以查看它是否与硬件/软件相关。 -
Coeffnames 来自“fit”,当您使用 Fourier 调用“fit”时,Matlab 会自动给出它。 vect_waves 几乎是一个包含 500k 个样本的向量,其中包含一个信号,仅此而已([-1,1] 之间的一堆数字)。我在帖子上发布了有关我的硬件的更多信息。
-
所以基本上这就是我拥有的所有代码。
标签: matlab regression curve-fitting continuous-fourier