Я хочу вычислить фрактальное изображение в двух вложенных циклах по индексам пикселей (ix, iy).Пример кода просто назначает случайные числа значениям RGB вместо реальных вычислений.
x = 0:.2:4;
y = 0:.2:3;
nX = length(x);
nY = length(y);
RenderRed = zeros(nX,nY); RenderGreen = zeros(nX,nY); RenderBlue = zeros(nX,nY);
parfor ix = 1:nX
% for iy = 1:length(y) % error
for iy = 1:nY
% "compute" pixel (ix,iy)
RenderRed(ix, iy) = rand; RenderGreen(ix, iy) = rand; RenderBlue(ix, iy) = rand;
end
end
Pctr = [];
Pctr(:,:,1)=RenderRed; Pctr(:,:,2)=RenderGreen; Pctr(:,:,3)=RenderBlue;
handle = image(Pctr);
shg
Код работает, как показано, но если конечное значение цикла iy изменяется с nY на длину (y) -см. закомментированную строку - выдается ошибка:
Error: The variable RenderRed in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Overview".
Почему?В моем понимании секционированных переменных ни одна версия не должна работать: нужно использовать вспомогательную переменную, собирающую результаты внутреннего цикла, и назначить ее фрагменту матрицы.Но длина (y) вместо nY никак не должна влиять на классификацию переменных, поскольку y никогда не присваивается в циклах.
mlint не находит ошибок, ни в одной из версий.То же самое с версиями MATLAB 2016b, 2017b.