1. 程式人生 > >請教如何在使用matlab GPU時記錄arrayfun中的迴圈迭代變數?

請教如何在使用matlab GPU時記錄arrayfun中的迴圈迭代變數?

在下述程式碼中,我希望能記錄arrayfun函式裡面的迴圈變數z到一個矩陣中,以作進一步的操作。Matlab版本為2017b,程式碼執行報錯為“Array indexing is not supported”。請各位大俠賜教如何才能解決這一問題。

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))

%下面是用到的子函式。使用nested function的形式是希望能進行索引,但無效。
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;     % 希望對每次迭代的z值進行記錄,但這裡報錯不支援索引。
                            end
                            count=max(log(count),log(abs(z)));
              end
              result=arrayfun(@tar_fun, xGrid, yGrid);
end