平行循环。
您好,我无法弄清楚我应该为我的代码部分使用什么类型的循环。 我的问题是我想运行具有多个初始条件的程序。例如,假设我有一个矩阵q,其尺寸是4乘2. q(:,1)是第一组初始条件和q(: ,2)是第二组初始条件。 我想要的是递归for循环(第11-22行)以获取独立的初始条件q(:,1)和q(:,2)并同时独立地通过for循环运行它们。 这是一些模拟代码(遗憾的是,由于NDA,我无法使用实际代码):
1 p=ones(3,2); %initial condition
2 q=2.*ones(4,2); %initial condition
3 r=3.*ones(3,2); %initial condition
4 k=1; %here i want it to iterate for k=1:2 in parallel (i think)
5 pp=p(:,k);
6 qq=q(:,k);
7 rr=r(:,k);
8 p=p(:,k);
9 q=q(:,k);
10 r=r(:,k); %for loop below requires vector form.
11 for t=0:.5:60
12 v=[p;q;r]; %initial conditions for ode45
13 tspan=[t,t+.25,t+.5];
14 [T,Y]=ode45('somefunc',tspan,v,...);
15 v=Y(3,:);
16 p=v(1:3);
17 q=v(4:7);
18 r=v(8:10);
%building up a matrix with all the data from the iterated/recursive ode45
19 pp=cat(2,pp,p);
20 qq=cat(2,qq,q);
21 rr=cat(2,rr,r);
22 end
上面的代码仅评估k = 1或k = 2。它不迭代k = 1:2。 我想要的是最终得到pp,qq和rr的多维数组,用于两个(在某一点n)可能的初始条件。即pp(:,:,1)将是具有第一个初始条件的矩阵,而pp(:,:,2)将是第二个初始条件。同样适用于qq和rr。
这就是为什么我认为我需要并行for循环呢?因此,由于第11-22行中的for循环,可以再次调用第1行到第3行中的初始条件而不是我的变量的重新定义值。 我也很困惑如何满足parfor对独立迭代的要求,同时在内部具有依赖迭代的嵌套for循环。
如果您还有其他任何希望我进一步解释或澄清的话,请告诉我。
感谢您的时间和帮助!
答案 0 :(得分:0)
我承认我没有阅读所有内容,但如果你只是想要两次进行两次计算,你可以按照你的建议在k
上使用parfor。您需要复制所有变量 - 否则您将使用两个计算来处理它们,从而破坏事物。这件事真的需要function。将m
文件定义为函数,并带有签名
function(whatever,args,should,return,,like,pp,etc) = funcName(k)
%Copy paste here all the code above you want, given a `k`
在主脚本中,正如您所建议的那样k
标准:
result = cell(1,2)
enter code here
parfor k=1:2
result{k}=funcName(k)
matlab resource for functions