0
我需要幫助來了解如何使用在parfor循環之外定義的變量。我想加快代碼的使用時間,但需要花費很多時間。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 = zeros(1,10); parfor it = 1:10 a(it)= someFunction(a(it-1)); end' 很明顯每次迭代都是依賴的。但是,我怎樣才能修改這個代碼來成功運行? –
將'parfor'轉換成普通'for'? – drhagen