向量化for循环操作

时间:2019-11-26 04:20:38

标签: matlab for-loop iteration vectorization

我有一个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个图计算第一个值?

1 个答案:

答案 0 :(得分:1)

这非常简单,尤其是因为protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Create your application here SetContentView(Resource.Layout.ActivityA); PrepareData() toolbar = FindViewById<Toolbar>(Resource.Id.toolbar); if (toolbar != null) { SetSupportActionBar(toolbar); SupportActionBar.Title = "Activity A"; SupportActionBar.SetDisplayHomeAsUpEnabled(true); } } 仅在此处用于行索引:

j

我测试了两个版本(Octave 5.1.0),并获得相同的结果。在我的机器上,速度提高了约400倍。

一般说明:切勿将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 和/或i用作循环变量,因为它们也用作虚数单位,请参见。 ij

希望有帮助!