我有这样的基本代码:
parfor i=1:8
[t,y]=ode15s(@rate,tspan,cin,options,i); % the option i is evaluated in the rate function
figure(1)
subplot(3,3,i+1)
plot(t,y)
hold on
end
y
是否会因为变量名在所有迭代中都相同而产生任何冲突?
不,每个工人都有其独特的命名空间。
但是,工作人员无法打开显示在客户端上的图形(感谢@Edric 的提醒),因此调用后的所有内容ode15s
都不会产生任何有用的结果。
要将绘图移到parfor
循环之外,您可以执行以下操作(有更有效的解决方案,这个肯定会起作用):
tCell = cell(8,1);
yCell = cell(8,1);
parfor i=1:8
[tCell{i},yCell{i}]=ode15s(@rate,tspan,cin,options,i); % the option i is evaluated in the rate function
end
figure(1)
for i=1:8
subplot(3,3,i+1)
plot(tCell{i},yCell{i})
hold on
end
继@Jonas 的回答之后,请注意,如果您使用的是 R2013b 或更高版本,并且希望在等待并行计算完成时显示图形,则可以使用PARFEVAL,就像在这个例子中一样:http ://www.mathworks.co.uk/help/distcomp/examples/parfeval-blackjack.html。