我知道似乎直截了当的答案是否定的。然而,我想知道是否没有办法让它工作。
基本上,我想从分布中随机抽取,只保留那些尊重特定条件并填充预先确定的存储矩阵并在矩阵已满时停止。
由于这些是绘图,我想我可以利用 Matlab 的并行功能,但是由于存储矩阵的完成取决于绘图的顺序,我觉得那里有问题。
或者,有没有办法对手头的问题进行时间检查。例如,我会使用一个 parfor,其限制非常大,但包含一种方法来频繁检查存储矩阵的大小。
在伪代码中,它会给出:
- 创建存储矩阵的大小:
A=zeros(100,1); Naccepted=0;Ntried=0;
- 启动for循环:
parfor i=1:100000000000
- 做循环:
x(i)=randn(1,1)
- 检查它是否遵守条件:
if x(i)>0, Naccepted=Naccepted+1; Ntried=Ntried+1; A(j,1)=x(i), else Ntried=Ntried+1
- 每 5 分钟检查一次计时器(我不知道在 Matlab 中实现它)是否
A
达到 100。如果是这样,则停止并进行前 100 次接受的抽奖。如果没有,请继续。
我意识到我的问题非常混乱,但我无法正确看到哪个部分可以并行工作。
好的,想通了:
matlabpool open 8
tic
clear;
j=1;
Naccepted=0;
A=[];
workers=8;
while size(A,1)<=100
spmd(workers)
x=zeros(10,1);
for i=1:10
x(i)=randn(1,1);
end
end
for k=1:workers
Z(:,k)=x(1,k);
end
for k=1:workers
V(1+(k-1)*10:10+(k-1)*10,1)=cell2mat(Z(1,k));
end
V=V(V>0);
A=[A;V];
Naccepted(j,1)=size(V,1);
j=j+1;
end
Ntried=j*workers*10;
rejection=1-sum(Naccepted)/Ntried;
A=A(1:100,1);
toc
matlabpool close