Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Matlab优化傅里叶级数拟合函数_Matlab_Regression_Curve Fitting_Continuous Fourier - Fatal编程技术网

基于Matlab优化傅里叶级数拟合函数

基于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

我试图遍历一组似乎显示周期性变化的样本。我需要连续应用拟合函数来获得傅里叶级数系数,回归必须是过去的n个样本(在我的例子中,大约30个)。问题是,我的代码非常慢!对一组50000个样本进行此操作大约需要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\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]之间的数字)。我在帖子上发布了更多关于我的硬件的信息。所以基本上这就是我所有的代码。