Skip to content

Tips perhitungan matrik diagonal dengan konstanta di Matlab

by persada on June 6th, 2011

Terdapat sebuah contoh kasus :

  • Matrik A (5000×5000) , matrik diagonal.
  • k sembarang, misal k = 4
  • n ukuran matrik = 5000
  • operasi aljabar = perkalian.

Permasalah diatas, dapat diselesaikan dengan relatif mudah menggunakan Matlab.


disp ('Cara biasa');
tic
B=A*k;
toc()

Walaupun solusi diatas dapat menyelesaikan masalah dengan benar, tetapi apakah cara tersebut efisien? Bahkan, jika matrik A terlalu besar, ada kemungkinan keluar error “Out of memory. Type HELP MEMORY for your options.

Salah satu tips untuk menyelesaikan permasalahan tersebut dengan efisien adalah berikut.
1) Ambil elemen diagonal matrik, misal disimpan di variabel D.

D = diag (A)

2) Kenai vektor D dengan operasi aljabar dan k, misal perkalian.

D = D * k;

3) Ganti semua elemen diagonal matrik A dengan vektor D.

for i = 1:n
   A(i,i) = D(i)
end

Langkah ke-3, dapat dirubah sedikit dengan memperhatikan kesesuaian indeks matrik dan indeks vektor di Matlab.

Perhatikan sisi diagonalnya. Untuk n = 3, akan diperoleh deret :

1 5 9

Jika diperhatikan, selisih diantaranya adalah 4, atau (n+1)

Maka, langkah ke-3 diatas dapat dituliskan dalam sintak Matlab :

 i = 1:n+1:n*n; // indeks elemen diagonal
A(i) = D; // mengganti elemen diagonal A 

Dari hasil percobaan, cara kedua lebih cepat 100x dibandingkan cara pertama.

 

Hasil Percobaan

Berikut kode lengkap untuk percobaan :

 % Atur parameter %
n = 5000;
k = 10;

% Buat matrik nol %
A = zeros(n);

% Percobaan 1 %
% Bangkitkan data matrik diagonal %
p = 1:n+1:n*n;
A(p)=p;

% Cara pertama, cara biasa %
disp ('Cara biasa');
tic
A=A*k;
toc()

% Percobaan 2 %
% Bangkitkan data matrik diagonal %
p = 1:n+1:n*n;
A(p)=p;

% Cara kedua, cara lebih efisien %
disp ('Cara cepat');
tic
D = diag(A);
[m,n]=size(A);
i = 1:n+1:n*n;
D = D * k;
A(i)=D;
toc() 

Semoga bermanfaat. Ditunggu komentar dan masukkannya… :-D

From → Matlab, Tutorials

One Comment
  1. putri permalink

    nice post, abun…

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS