Мне нужна помощь, чтобы знать, как работать с переменными, определенными за пределами парсов. Я хочу ускорить код, который занимает много времени при использовании большего количества элементов.MATLAB: Использовать переменные (определенные снаружи) внутри цикла parfor
Я попытаюсь объяснить это на примере. Предположим, что изначально у меня есть ряд элементов, которые будут перемещаться случайно внутри цикла, а некоторые вычисления будут выполняться в соответствии с положением элементов.
Вот пример кода:
% Variables
nElements = 5000; Ly = 2; vmax = 1;
time = 0.1:0.1:20;
x = -0.5+rand(nElements,1);
y = -Ly + Ly*rand(nElements,1);
zx = [];
zy = [];
rate = zeros(1,length(time));
vel = zeros(nElements,1);
vz = [];
% Loop
parfor ii=1:length(time)
nTimes = ii; % counter
vel = vmax.*(1-(y./Ly).^2) % elements will move according to this velocity profile
x = x + vel + randn(nElements,1);
y = y + vel + randn(nElements,1);
nZ = length(zx);
if ~isempty(zx) && ~isempty(zy)
vz = vmax.*(1-(zy./Ly).^2)
zx = zx + vz + randn(nZ,1);
zy = zy + vz + randn(nZ,1);
end
[x,y,zx,zy] = f(x,y,zx,zy); % function that uses the variables x and y; and if some conditions are met, creates a z element
rate(ii) = nZ;
end
У меня возникли проблемы с переменными, которые установлены за пределами parfor цикла, а также в связи с тем, как используются переменные. Я хотел бы знать, как использовать переменные (которые определены снаружи) внутри цикла parfor и как работать с ними в функциях, если переменные обновляются в каждом цикле.
Спасибо!
Я не вижу, как это может быть распараллелировано. На каждом временном шаге значение y зависит от предыдущего значения y. – drhagen
Спасибо за ответ @drhagen. В точку! Кажется, что мой код зависит. Я хотел бы знать, как преодолеть такие проблемы, есть ли какие-нибудь трюки? Например, в этом коде (аналогично проблеме, с которой я имею дело): 'a = нули (1,10); parfor it = 1:10 a (it) = someFunction (a (it-1)); end' Понятно, что каждая итерация зависит. Но как я могу изменить это, чтобы успешно выполнить код? –
Включите 'parfor' в обычный' for'? – drhagen