Saturday, January 27, 2018

Efisien Membuat Matriks Identitas Ordo Puluhan/Ratusan Ribu

Mudah saja bila kita punya memory ram yang amat besar, atau ruang hardis yang longgar untuk virtual memory (swap/pagefile). Ordo 100rb saja, kita akan perlu memory 80 GB. Namun, untuk laptop rerata seperti punya saya, perlu ada akal2an untuk melakukan perhitungan matriks ordo puluhan/ratusan ribu. Alhamdulillah, MATLAB juga telah menyediakan olah matriks Sparse yang sangat tepat untuk kebutuhan terhadap matriks yang sebagian besar elemennya bernilai nol.

Saat ini, persoalan saya adalah membuat matriks identitas berorodo 80rb. Cara pertama yang saya lakukan adalah membuat matriks identitasnya dulu lalu mengonversinya ke format Sparse.
I=eye(80000);
I=sparse(I);
Menggunakan kode ini, program saya terhenti karena OUT OF MEMORY. Ya wajar saja, kebutuhannya memorinya 51,2 GB, padahal virtual memori yang saya sediakan hanya 38 GB. Mau ditambah, ruang hardis sudah tidak memadai.

Saya bersyukur bisa menemukan jalan keluar, yaitu cara ke dua. Cara ke dua adalah menggunakan fungsi speye, yaitu fungsi untuk menghasilkan matriks identitas format Sparse secara langsung.
I=speye(80000);
Dengan cara ini, program saya berjalan baik, dan kebutuhan memorinya sangaaaaaaat minim. Perbandingan sederhananya:
untuk menghasilkan matriks identitas ordo 1000, Cara 1 perlu 8 MB, Cara 2 hanya perlu 16 KB
untuk matriks ordo 10rb, Cara 1 perlu 800 MB, Cara 2 hanya 0,25 MB.
Alhamdulillah.

REFERENSI
https://www.mathworks.com/help/matlab/sparse-matrices.html
https://www.mathworks.com/help/matlab/ref/speye.html

No comments:

Post a Comment