Как я могу записать итерационную переменную цикла при вызове arrayfun через графический процессор Matlab? - PullRequest
0 голосов
/ 16 декабря 2018

В следующем прикрепленном коде я хотел бы записать переменную Z в цикле while как массив для дальнейшего процесса, например, для нахождения максимального значения Z в массиве.Но индексирование массива не поддерживается в Matlab 2017b, даже если используется вложенная функция.Может ли кто-нибудь предоставить мне детали для решения этого вопроса?

clear all
clc

maxIterations=100;
gridSize=300;
xlim=[-0.75, -0.73];
ylim=[ 0.12,  0.14];
t=tic();
x=gpuArray.linspace(xlim(1), xlim(2), gridSize);
y=gpuArray.linspace(ylim(1), ylim(2), gridSize);
[xGrid,yGrid]=meshgrid(x,y);
Pos=gpuArray.zeros(maxIterations,1);
count=parent_fun(xGrid,yGrid,maxIterations,Pos);
count=gather(count);
gpuArrayfunTime=toc(t)
figure(1)
imagesc(x,y,count)
reset(gpuDevice(1))

Вложенная функция определяется следующим образом.

function result=parent_fun(xGrid,yGrid,maxIterations,Pos)
         function count=tar_fun(x0,y0)
                  z0=complex(x0,y0);
                  z=z0;
                  count=1;
                  while (count<=maxIterations) && (abs(z)<=2)
                         count=count+1;
                         z=z*z+z0;
                         Pos(count,1)=z;  % where error arises!
                  end 
                  count=max(log(count),log(abs(z)));
         end
result=arrayfun(@tar_fun, xGrid, yGrid);
end
...