用矩阵乘法代替循环

时间:2018-04-06 21:44:46

标签: matlab for-loop matrix-multiplication montecarlo

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循环,但问题是每个列都需要前一列。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

因为每列是前一列和一些新数据的逐元素乘法,所以您只能使用新数据填充矩阵,然后使用cumprod将每列的乘法与前一列相乘。

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