Я пытаюсь использовать цикл for
внутри цикла parfor в Matlab.
Цикл for
эквивалентен примеру балла в здесь .
Внутри for
loop вызывается функция ballBouncing
, представляющая собой систему из 6 дифференциальных уравнений.
Итак, я пытаюсь использовать 500 различных наборов значений параметров для системы ODE и запускать их, но для каждого набора параметров добавляется внезапный импульс, который обрабатывается с помощью кода вцикл «для».
Однако я не понимаю, как реализовать это, используя цикл parfor
и for
, как показано ниже.
Я мог бы запустить этот код, используя два цикла for
, но когда внешнийцикл сделан так, чтобы он был parfor
, он выдает ошибки,
the PARFOR loop cannot run due to the way variable results is used
,
the PARFOR loop cannot run due to the way variable y0 is used
и
Valid indices for results are restricted in PARFOR loops
results=NaN(500,100);
x=rand(500,10);
parfor j=1:500
bouncingTimes=[10,50];%at time 10 a sudden impulse is added
refine=2;
tout=0;
yout=y0;%initial conditions of ODE system
paras=x(j,:);%parameter values for the ODE
for i=1:2
tfinal=bouncingTimes(i);
[t,y]=ode45(@(t,y)ballBouncing(t,y,paras),tstart:1:tfinal,y0,options);
nt=length(t);
tout=[tout;t(2:nt)];
yout=[yout;y(2:nt,:)];
y0(1:5)=y(nt,1:5);%updating initial conditions with the impulse
y0(6)=y(nt,6)+paras(j,10);
options = odeset(options,'InitialStep',t(nt)-t(nt-refine),...
'MaxStep',t(nt)-t(1));
tstart =t(nt);
end
numRows=length(yout(:,1));
results(1:numRows,j)=yout(:,1);
end
results;
Может кто-нибудь помочь мне реализовать этоиспользуя parfor
внешний цикл.