MATLAB: Nested for loop in parfor, indexing

indexinMATLABnested loopParallel Computing Toolboxparfor

Hello!
I'm running Monte Carlo simulation in Matlab 2012a, the following code returns an error
if matlabpool('size') == 0
matlabpool open
end
parfor i=1:M
for j=2:N
x(i,j)=x1(i,j-1)+sqrt(x(i,j-1))
y(i,j)=y(i,j-1)+sqrt(y(i,j-1))
z(i,j)=z(i,j-1)+x(i,j-1)+y(i,j-1)
end
end
matlabpool close
(Definitions of x ,y, z are simplified but the main idea remains) As I understand it is impossible to use indexing this way in a nested 'for' 'cos Matlab cannot check if array elements are independent. But in my situation it's clear that index i (different MC paths are independent) is remaining unchanged in for loop, only j (time steps) is being changed. Could you please give me a piece of advice with this issue?
Thanks in advance, Alex.
P.S. the error is obvious for such cases: The variable x in a parfor cannot be classified.

Best Answer

You could use a seperated variable for the inner loop. On the example of x:
X = zeros(M,N); %preallocate

parfor i=1:M
x1 = zeros(1,N); %preallocate
x1(1) = x(i,1);
for j=2:N
x1(j)=x1(j-1)+sqrt(x1(j-1));
end
X(i,:) = x1;
end
But usually this should be much faster:
X1 = [x zeros(M,N-1)]; % first column and preallocate
for k=2:N
X1(:,k)=X1(:,k-1)+sqrt(X1(:,k-1));
end