Я пытаюсь улучшить скорость сценария, который я пытаюсь запустить.Preallocation и Vectorization Speedup
Вот код: (моя машина = 4 ядра выигрыш 7)
clear y;
n=100;
x=linspace(0,1,n);
% no y pre-allocation using zeros
start_time=tic;
for k=1:n,
y(k) = (1-(3/5)*x(k)+(3/20)*x(k)^2 -(x(k)^3/60))/(1+(2/5)*x(k)-(1/20)*x(k)^2);
end
elapsed_time1 = toc(start_time);
fprintf('Computational time for serialized solution: %f\n',elapsed_time1);
Приведенный выше код дает 0.013654 истекшее время.
С другой стороны, я попытался использовать предварительное выделение, добавив y = zeros(1,n);
в приведенном выше коде, где комментарий есть, но время работы примерно равно ~ 0,01. Любые идеи почему? Мне сказали, что это улучшится в 2 раза. Я что-то упустил?
Наконец, есть ли какой-либо тип векторизации в Matlab, который позволит мне забыть о цикле for в приведенном выше коде?
Спасибо,
Попробуйте с n = 1000000; Вы должны увидеть разницу. 100 слишком мал. – grantnz