MATLAB: Can this be written in a much better way for fast computations

for loopparfor

coast=magic(14400)
di_max=100;
mx=14400;
my=14400;
for ix=1:mx
for iy=1:my
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for dx=-di_max:di_max
for dy=-di_max:di_max
jx=ix+dx;
jy=iy+dy;
if((jx>=1) && (jx<=mx) && (jy>=1) && (jy<=my))
dd=sqrt(dx^2+dy^2);
coast(jx,jy) = min([coast(jx,jy),dd]);
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
end

Best Answer

The code below will do what you are asking without needing a loop.
coast=magic(14400);
di_max=100;
mx=14400;
my=14400;
[ix dx] = meshgrid(1:mx, -di_max:di_max);
[iy dy] = meshgrid(1:my, -di_max:di_max);
jx = ix+dx;
jy = iy+dy;
dd= sqrt(dx.^2+dy.^2);
mask = ((jx(:)>=1) & (jx(:)<=mx) & (jy(:)>=1) & (jy(:)<=my));
idx = sub2ind(size(coast), jx(mask), jy(mask));
coast(idx) = min(coast(idx),dd(mask));