基于Matlab优化傅里叶级数拟合函数
我试图遍历一组似乎显示周期性变化的样本。我需要连续应用拟合函数来获得傅里叶级数系数,回归必须是过去的n个样本(在我的例子中,大约30个)。问题是,我的代码非常慢!对一组50000个样本进行此操作大约需要1小时。有没有办法优化这个?我做错了什么 这是我的密码:基于Matlab优化傅里叶级数拟合函数,matlab,regression,curve-fitting,continuous-fourier,Matlab,Regression,Curve Fitting,Continuous Fourier,我试图遍历一组似乎显示周期性变化的样本。我需要连续应用拟合函数来获得傅里叶级数系数,回归必须是过去的n个样本(在我的例子中,大约30个)。问题是,我的代码非常慢!对一组50000个样本进行此操作大约需要1小时。有没有办法优化这个?我做错了什么 这是我的密码: function[coefnames,coef] = fourier_regression(vect_waves,n) j = 1; coef = zeros(length(vect_waves)-n,10
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\u回归(向量,30)代码>这需要永远的计算时间。有没有办法解决这个问题?我的代码怎么了
注意:我有一个intel i7 5500 U cpu,16GB RAM,并使用Matlab 2015a 由于我不熟悉您的应用程序,我不确定是否可以对代码进行矢量化以提高性能。不过,我还有一些其他的建议
你应该考虑的一件事是。在这种情况下,您应该至少预先分配数组coef
,因为我相信在开始循环之前您确实知道它的大小
我建议的另一件事是。这将提供有关代码中哪些部分花费的时间最多的信息,帮助您将精力集中在提高这些部分的性能上。我已经尝试过预分配阵列,但在这种情况下,它毫无帮助。我不确定是否可以对代码进行矢量化,因为我需要使用fit函数N次,而不仅仅是一次。我猜想“FIT”函数只是慢的,所以我可能会考虑编写我自己的函数来获得傅立叶级数系数,但只是想确定是否还有别的什么我可以做的……<代码> CoffNords<代码>是从哪里来的?在倒数第二行中调用它之前,没有定义它。我建议您也说明vect\u waves
中包含的内容,即什么类型的数字,并可能发布前10行左右的内容,以便我们自己尝试代码。另外,请张贴您所使用的系统类型:CPU、RAM、OS、MATLAB版本,这样我们就可以看到它是否与硬件/软件相关。系数名称来自“fit”,当您使用傅立叶调用“fit”时,MATLAB会自动给出。vect_波几乎是一个包含500k个样本的向量,其中包含一个信号,仅此而已(一组介于[-1,1]之间的数字)。我在帖子上发布了更多关于我的硬件的信息。所以基本上这就是我所有的代码。