【问题标题】:Vectorizing a for-loop operation向量化 for 循环操作
【发布时间】:2019-11-26 04:20:38
【问题描述】:

我有一个 SDE,我正在使用此代码通过数值方案进行近似:

mu = 1.5;
Sigma = 0.5;
TimeStep = 0.001;
Time = 0:TimeStep:5;
random1 = normrnd(2,0.05,[1,500]);
random2 = randn(1,length(Time));
X = zeros(500, length(Time));

for j = 1:500
   X(j,1)= random1(j);
   for i = 1:length(Time)
        X(j,i+1) = X(j,i) - mu*X(j,i)*TimeStep + Sigma*sqrt(2*mu)*sqrt(TimeStep)*random2(i);
   end
end

如何去除外部的 for 循环并进行矢量化,以便在每个时间步,为所有 500 个图计算第一个值?

【问题讨论】:

    标签: matlab for-loop iteration vectorization


    【解决方案1】:

    这很简单,尤其是j 在这里仅用于行索引:

    X(:,1)= random1;
    for i = 1:length(Time)
        X(:,i+1) = X(:,i) - mu*X(:,i)*TimeStep + Sigma*sqrt(2*mu)*sqrt(TimeStep)*random2(i);
    end
    

    我测试了两个版本(Octave 5.1.0),得到了相同的结果。在我的机器上加速大约是 400 倍。

    一般说明:切勿将i 和/或j 用作循环变量,因为它们也用作虚数单位,参见。 ij

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 2021-06-27
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多