請教如何在使用matlab GPU時記錄arrayfun中的迴圈迭代變數?
阿新 • • 發佈:2018-12-16
在下述程式碼中,我希望能記錄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