с первыми двумя - проблем нет. 
переменные создаются заранее и в процессе их размер не менятеся.
а вот с этим.
Цитата:
обилие циклов - постарайтесь использовать работу с массивами вместо циклов везде, где это возможно 
как-то пока не сростается
а в частности
код
===========================================
data1=double(data1);
[X,Y]=meshgrid(1:1:size(data1,1),1:1:size(data1,2));
for k=1:z;
    sh_x=vect(1)*k-1;
    sh_y=vect(2)*k-1;
    i=ceil(shift_x-sh_x);
    j=ceil(shift_y-sh_y);
    di=abs(i-(shift_x-sh_x));
    dj=abs(j-(shift_y-sh_y));
    [XI,YI]=meshgrid(1+di:1:size(data1,1),1+dj:1:size(data1,2));
    [si,sj]=size(XI);
    ZI = interp2(X,Y,data1(:,:,20),XI,YI);
                
    int_data(i:i+si-1,j:j+sj-1) = int_data(i:i+si-1,j:j+sj-1) + double(ZI);
    
end
===========================================
работает в три раза медленнее кода
============================================
data1=double(data1);
for k=1:z;
    sh_x=vect(1)*k;
    sh_y=vect(2)*k;
    for i=1:size(int_data,1);
            ii=i+sh_x-shift_x;
            if (ii>=2 & ii<=x-1);
            iir=round(i+sh_x-shift_x);
            iif=floor(i+sh_x-shift_x);
            iic=ceil(i+sh_x-shift_x);
            for j=1:size(int_data,2);
                jj=j+sh_y-shift_y;
                if (jj>=2 & jj<=y-1); 
                jjr=round(j+sh_y-shift_y);
                jjf=floor(j+sh_y-shift_y);
                jjc=ceil(j+sh_y-shift_y);
            
                ad_x1y1=data1(iif,jjf,k);
                ad_x1y2=data1(iif,jjc,k);
                ad_x2y1=data1(iic,jjf,k);
                ad_x2y2=data1(iic,jjc,k);
                ad_y1=ad_x1y1+(ii-iif)*(ad_x1y2-ad_x1y1);
                ad_y2=ad_x2y1+(ii-iif)*(ad_x2y2-ad_x2y1);
                    
                ad=ad_y1+(jj-jjf)*(ad_y2-ad_y1);
                
                int_data(i,j) = int_data(i,j)+ ad;
                %int_data(i,1+ceil(shift_y-sh_y):(ceil(shift_y-sh_y)+size(ad,2))) = int_data(i,1+ceil(shift_y-sh_y):(ceil(shift_y-sh_y)+size(ad,2)))+ double(ad);
                end
            end     
            end
    end
    %[num2str(k),' cycles out of ',num2str(z),' is done']
end
=======================
хотя первый использует всего один цикл и две стандартные функции 
а второй делает поэлементный перебор массива и использует для этого 3 вложенных цикла.
где собака порылась?