Wednesday, July 17, 2013

Hubungan ukuran array dengan performa indeks di MATLAB

Posting kali ini masih berhubungan dengan posting saya sebelumnya. Cuma pada bagian ini saya akan memperlihatkan bagaimana hubungan antara ukuran array dengan lama eksekusi dengan metode indeks. Ternyata hasil yang diperoleh meunjukkan bahwa dengan menggunakan looping di MATLAB, waktu eksekusi yang diberikan bertambah secara signifikan dan cenderung eksponensial. Sementara dengan bantuan indeks, waktu eksekusi datar-datar saja. Adapun codenya bisa dilihat pada listing berikut
function indeks1
clear all ; 
clc; 
step = 100:50:700; 
cara1 = zeros(length(step),1); 
cara2 = zeros(length(step),1); 
for ii=1:numel(step)
    % first way, iterate trough looping
    dim = step(ii);
    Y  = zeros(dim,dim) ; 
    tic ; 
    for i=1:length(Y), 
        for j=1:length(Y(1,:)),
            if mod(i+j, 2) == 0
                Y(i,j) = 2; 
            else
                Y(i,j) = 1;
            end
        end
    end
    cara1(ii) = toc; 

    % second way, using MATLAB index
    X  = zeros(dim,dim) ;
    tic; 
    [a,b] = ind2sub(size(X), 1:numel(X)) ;
    X((mod(a+b, 2) ==0))  = 2; 
    X((mod(a+b, 2) > 0)) = 1; 
    cara2(ii) = toc;
end

plot(step, cara1, 'r.-', step, cara2, 'g.-' )

disp('Is the first  get the same output with the second?')
indeks = find(Y(:,:) ~= X(:,:));
xlabel('ukuran array'); 
ylabel('lama eksekusi dalam detik'); 
if(numel(indeks) ==  0),
   disp('oh... yes..  '); 
end
Di mana saya sudah melakukan perubahan time step dalam rentang yang berbeda-beda. Pada hasilnya juga diperlihatkan bahwa penggunaan indeks ini sangat terasa ketika ukuran array semakin besar.
Anda bisa mengetes sendiri untuk selang waktu yang lain. Tentunya MATLAB membatasi kita dalam mengalokasikan array, mengingat kapasitas memori yang terbatas. Untuk mengetahui kapasitas memori di komputer anda, matlab menyediakan perintah memory yang bisa digunakan untuk memperkirakan kapasitas array yang bisa anda alokasikan. 







No comments: