Как ускорить итеративный вызов функции в MatLab? - PullRequest
0 голосов
/ 27 мая 2020

В MatLab мне приходится вызывать cdf распределения t (tcdf) итеративно (поскольку следующее входное значение зависит от предыдущего выхода tcdf), что, к сожалению, замедляет мой код

tic
z = NaN(1e5,1);
z(1) = 1;
x = 2;
for ii = 2:1e5
    x = tcdf(z(ii-1),x);
    z(ii) = z(ii-1)*x;
end
toc

Elapsed time is 4.717087 seconds.

Есть ли способ как-то ускорить это?

Для сравнения:

tic
z = randn(1e5,1);
tcdf(z,5);
toc

Elapsed time is 0.091353 seconds.

1 Ответ

0 голосов
/ 27 мая 2020

Переместите генерацию случайных чисел за пределы l oop, как предложено ниже

numVal = 1e5
z = randn(numVal,1);
for ii = 2:numVal
   z(ii) = z(ii-1) + z(ii);   
end
tcdf(z,5);
...