Замена цикла for на умножение матриц

S= zeros(Sim,n+1);
S(:,1)=S_0;
for i=1:round(n)
     S(:,i+1) = S(:,i) .* cte_exp .* exp(sigma.*sqrt(dt).*normrnd(0,1,Sim,1));
end

Я пытаюсь переписать этот цикл for с матричными операциями, но проблема в том, что для каждого столбца вам нужен предыдущий столбец. Кто-нибудь знает, как это решить?


person user9609639    schedule 06.04.2018    source источник


Ответы (1)


Поскольку каждый столбец представляет собой поэлементное умножение предыдущего столбца и некоторых новых данных, вы можете заполнить матрицу только новыми данными, а затем использовать cumprod, чтобы применить умножение каждого столбца на предыдущий.

S = [ S_0 , cte_exp .* exp(sigma.*sqrt(dt).*normrnd(0,1,Sim,round(n))) ];
S = cumprod(S,2);
person Cris Luengo    schedule 06.04.2018