Я пытаюсь перебрать набор образцов, которые, кажется, показывают периодические изменения. Мне нужно постоянно применять функцию подгонки, чтобы получить коэффициенты ряда Фурье, регрессия должна состоять из n выборок в прошлом (в моем случае около 30). Проблема в том, что мой код очень медленный! Это займет около 1 часа для набора из 50 000 образцов. Есть ли способ оптимизировать это? Что я делаю неправильно?
Вот мой код:
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, 16 ГБ ОЗУ и я использую Matlab 2015a.
coeffnames
? Вы не определяете его до того, как назовете его в предпоследней строке. Я предлагаю вам также указать, что содержится вvect_waves
, то есть какие числа и, возможно, опубликовать первые 10 или около того строк, чтобы мы могли сами попробовать код. Также, пожалуйста, напишите, какая у вас система: ЦП, ОЗУ, ОС, версия MATLAB, чтобы мы могли видеть, связано ли это с аппаратным/программным обеспечением. - person Adriaan   schedule 27.10.2015