Sunday, March 22, 2015

Komputasi Numeris: Iterasi Jacobi

Pendahuluan:
Metode Jacobi merupakan salah satu metode penyelesaian sistem persamaan linear (baca: matriks) berdimensi banyak (baca: lebih dari 2). Untuk matriks dengan dimensi kecil (kurang atau sama dengan dua), lebih efektif diselesaikan dengan aturan eliminasi atau metode Cramer.

Sistem persamaan linear dapat di-representasikan (dimodelkan) dalam bentuk matriks sebagai berikut:

Sebagai contoh:

3x1 + x2 - x3 = 5
4x1 + 7x2 - 3x3 = 20
2x1 - 2x2 + 5x3 = 10

dapat di-representasikan sebagai:


Tujuannya supaya mudah untuk diselesaikan secara matematis.

Aturan Jacobi:

Iterasi Jacobi memiliki rumus persamaan sebagai berikut:
atau 

Iterasi berakhir jika:
Atau perhitungan saat ini tidak berbeda jauh (baca: mirip) dengan perhitungan sebelumnya.

Jika di-implementasikan ke contoh di atas menjadi:


Jika inisialisasi nilai awal x1, x2 dan x3 = 0, maka:

Iterasi berikutnya ditunjukkan pada tabel berikut ini:

Jika diperhatikan pada tabel di atas, nilai x1, x2 dan x3 semakin stabil (perbedaan nilai saat ini dengan nilai sebelumnya semakin kecil). Proses ini dapat diteruskan sesuka hati sampai diperoleh toleransi error yang diinginkan.

Menulis Kode Program

Setelah kita mengetahui algoritma Methode Jacobi, saatnya menulis kode program supaya kita dapat mengganti-ganti persamaannya secara mudah. Saya menggunakan C++ sebagai contoh.

Step #1 : Menulis identitas program

//--------JACOBI Iteration
//--------Haruno Sajati, S.T., M.Eng
//--------jati@stta.ac.id
//--------Teknik Informatika
//--------Sekolah Tinggi Teknologi Adisutjipto


Step #2 : Deklarasi header dan inisialisasi variabel

#include<iostream.h>
void main()
{
int i, j, k, l, ukuran, iterasi;
float f[10], a[10][10],b[10],x[10], toleransi, sigma[10];



Step #3 : Input ukuran matriks

//input ukuran matrik
cout << "Masukkan besar matriks : ";
cin >> ukuran;


Step #4 : Input matriks A dan matriks B
 
//masukkan matrik a
for (i=1;i<=ukuran;i++){
for (j=1;j<=ukuran;j++){
cout << "Masukkan elemen matrik a[" << i << "][" << j << "] = ";
cin >> a[i][j];
}
}


//masukkan matrik b
for (i=1;i<=ukuran;i++){
cout << "Masukkan elemen matrik b[" << i << "] = ";
cin >> b[i];
}


Step #5 Inisialisasi nilai awal

//inisialisasi nilai awal
for (i=1;i<=ukuran;i++){
x[i]=0;
}

toleransi = 10;
iterasi = 0;


Step #6 Iterasi Jacobi

while (toleransi > 0.00001)
{
iterasi++;
cout << "---------------------------------------\n";
cout << "iterasi ke " << iterasi << endl;

if (iterasi > 50)
break;


//menghitung jumlah total sigma
for (k=1;k<=ukuran;k++) {
sigma[k] = 0;
for (l=1;l<=ukuran;l++)
{

if (k != l) {
sigma[k] = sigma[k] + (a[k][l]*x[l]);
} // tutup if k != l
} // tutup for l

f[k] = (b[k] - sigma[k])/a[k][k];
cout << "x[" << k << "] = " << f[k] << endl;
} // tutup for k

toleransi = (f[1]-x[1])+(f[2]-x[2])+(f[3]-x[3]);
if (toleransi < 0) {
toleransi *= -1;
}

for (i=0;i<=ukuran;i++) {
x[i] = f[i];
}

} //tutup while
} //tutup void


Uji Coba Program

1. Proses input matriks:




2. Iterasi 1 -5



3. Iterasi 15 - 19



 Selamat mencoba