【发布时间】:2015-10-30 18:39:49
【问题描述】:
我在 MATLAB 中有以下循环:
n = 20000
rho=0.9;
sigma=[0.1 0.2 0.3];
epsilon = normrnd(0,1, 3, n);
z = NaN(1,n);
z(1,1) = 0;
for i=2:n
z(1,i) = rho * z(1,i-1) + sigma* epsilon(:,i);
end
我尝试通过以下方式对其进行矢量化:
z(1,2:end) = rho * z(1,1:end-1) + sigma * epsilon
没有用。我知道问题在于这一点:z(1,2:end) = rho * z(1,1:end-1) 不是递归的。
我该如何解决这个问题?
【问题讨论】:
-
问题是每个元素都依赖于前一个元素,因此需要循环。也许
bsxfun可以解决它,但是对于递归函数,我总是使用循环。 -
这很难向量化,而且 for 循环非常快。在我的系统上,该示例耗时不到 0.02 秒。除非您的实际问题更大,否则我认为不值得花时间。
-
为什么要矢量化它?
-
写一个 Mex 文件。如果您不知道如何操作,那么它将是您技能的一个很好的补充。如果你知道,那么这应该不会超过半小时。
-
哇!很多答案的方式,所有这些都很有用!不确定接受哪个。 @Daniel,我的程序要大得多。
标签: matlab recursion vectorization