Tips perhitungan matrik diagonal dengan konstanta di Matlab
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.
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…



nice post, abun…