MATLAB: In parfor , why a variable cannot be classified

parallel computingparfor

In the code below I get an error
Error: The variable Matrix in a parfor cannot be classified.See Parallel for Loops in MATLAB, "Overview".
parfor i=1:n
try
query = 'SELECT * FROM TABLE WHERE Criterion = '' criteria(i) ''';
curs = exec(conn, query);
curs = fetch(curs);
close(curs);
results = curs.Data;
A = f(results);
B = g(results);
C = h(results);
D = k(results);
Matrix(i,6:9) = horzcat(A,B,C,B);
catch
Matrix(i,6:9) = {0,0,0,0};
end
end
Any ideas what I am missing?

Best Answer

write to
tMatrix(i,:) = horzcat(A,B,C,B);
or write {0,0,0,0} there. Then after the parfor, let
Matrix(:,6:9) = tMatrix;
The difficulty you are running into is that you are trying to update only part of one row of a matrix, which requires that the matrix be input to the parfor as well as output from the parfor. parfor can handle rows that are only input and rows that are only output, but it doesn't like input-update-output as your code is requiring. The adjusted version I show has the entire row of tMatrix be output, and that is fine with parfor.