用矩阵乘法代替for循环

Replacing for loop by matrix multiplication

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

因为每一列都是前一列和一些新数据的element-wise乘积,你可以只用新数据填充一个矩阵,然后使用cumprod应用每列的乘积与之前的

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