Dalam membuat permodelan algoritma, kita sering menemui permasalahan matriks, vector, dan beberapa masalah aljabar. Matlab/Octave adalah bahasa pemrograman yang paling powerful untuk menjawab permasalahan tadi. Tapi jika ingin beralih ke C/C++, ada beberapa alternatif library yang bisa dicoba. Tentu saja matrix bisa dibuat menggunakan pure C/C++, tapi akan sangat tidak nyaman. Saya sendiri masih pemula dalam masalah ini tapi akan saya coba ulas sedikit disini.
Pertama, GSL (GNU Scientific Library). GSL, seperti kebanyakan software GNU lainnya, ditulis dalam C, walau ada beberapa wrapper untuk C++ nya. Syntax GSL cukup mudah dipahami bagi yang sudah terbiasa dengan Matlab/Octave. Misalnya, untuk menjumlahkan b yang bertipe scalar dengan nilai dari vector a pada posisi I, alih-alih menulis dengan notasi a(i)+=b, notasi GSL lebih wordy:
gsl_vector_float_set(a,i,gsl_vector_float_get(a,i)+b)
Sayangnya, example code GSL sangat minim. Bahkan di installer-nya tidak ada example sama sekali. beberapa contoh code menggunakan GSL bisa dilihat di dokumentasi online-nya.Ketika pertama kali mencoba membuat penjumlahan dua buah matrix (menggunakan gsl_matrix_add), saya menemui kesulitan karena dengan tidak adanya example code mengenai ini.
Berikut salah satu contoh code pakai GSL:
#include < stdio.h >
#include < gsl/gsl_matrix.h >
int main (void)
{
int i, j;
const int SIZE_ROW = 10;
const int SIZE_COLUMN = 3;
gsl_matrix * m1 = gsl_matrix_alloc (SIZE_ROW, SIZE_COLUMN);
for (i=0; i < SIZE_ROW; i++ )
for (j=0; j < SIZE_COLUMN; i++ )
gsl_matrix_set (m1, i, j, (i+1) * (j+1));
printf("\nmatrix m1: \n");
for (i=0; i < SIZE_ROW; i++ )
for (j=0; j < SIZE_COLUMN; i++ )
printf ("%g ", gsl_matrix_get (m1, i, j));
printf("\n");
}
gsl_matrix_free (m1);
return 0;
};
Kedua, Armadillo. Armadillo disponsori oleh The University of Queensland. Kelebihan Armadillo (bagi saya) dibanding GSL adalah syntax yang lebih mirip dengan Matlab. Lebih lagi, mereka membuatkan conversion table, sebagai perbandingan syntax Matlab dengan Armadillo. Tentu ini membuat para pengguna Matlab nyaman. Kekurangan yang cukup signifikan adalah bahwa umur project ini masih baru, belum matang, dan fitur-fitur-nya masih belum banyak, sehingga kemungkinan besar akan menyulitkan programmer. Silakan bandingkan fitur-fitur yang dimiliki Armadillo dengan GSL. Pun project turunan GSL jauh lebih banyak ketimbang Armadillo.
Berikut salah satu contoh code pakai Armadillo.
#include < iostream >
#include < armadillo >
using namespace std;
using namespace arma;
int main(int argc, char** argv)
{
mat A = randu(4,5);
cout << "A*trans(B) =" << endl;
cout << A*trans(B) << endl;
return 0;
}
Ketiga, IT++. IT++ lebih menspesialisasikan diri untuk signal processing dan telekomunikasi. Bahkan contoh implementasi yang mereka tawarkan sangat banyak. Class library yang ada banyak menyinggung masalah telekomunikasi, misalnya AWGN channel, modulasi, bahkan komputasi rumit seperti BCH dan Turbo Coding.
Pertama kali buka website-nya langsung disuguhi ini “As you might have noticed, the current IT++ maintenance and development team has not been active for some time. Therefore, IT++ is looking for volunteers who are interested in further maintenance and/or development of this library.” Well, tampaknya IT++ tidak lebih ramai dari dua C/C++ library sebelumnya. IT++ ini dirintis oleh Chalmers University, Swedia. Secara pribadi saya kurang tertarik dengan IT++. Kita lewat saja tanpa mencobanya.
Keempat, SPUC. SPUC (Signal Processing Using C++) agak lebih mirip dengan IT++. Menyediakan class library cukup komplit untuk aplikasi signal processing dan telekomunikasi. Sekilas SPUC ini cukup komplit, project ini juga cukup matang. Operasi vector dan matrix cukup lengkap dan convinient.
Overall, semua kembali pada pilihan masing-masing. Saya melihat SPUC dan GSL cukup potensial. Pertanyaan yang harus dijawab adalah: apakah library yang disupport sudah komplit? Mulai dari tipe data matriks, vector, sampai fix point? Bagaimana dengan kompatibilitas Unix/Windows-nya? Kemudahan porting dari Matlab-nya? Kemudahan integrasi dengan platform lainnya (misalnya SystemVerilog DPI)? Dan pertanyaan-pertanyaan lainnya yang muncul dari engineer modeling, dan system architect. So, apa pilihan Anda? Tolong share disinya ya... (ya2n)