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

Next Post Previous Post
4 Comments
  • Unknown
    Unknown August 4, 2016 at 2:39 AM

    mas/mbak itu yang masukkan matriks b nya illegal structure gitu terus inisialisasinya malah undefined kenapa ya tolong pencerahannya

  • Unknown
    Unknown August 4, 2016 at 2:54 AM

    ohh lagi mau tanya nih ini kenapa waktu di run kok malah cuma menghitung iterasi 1 iterasi selanjutnya malah error kenapa ya tolong pencerahannya

  • jati.itda.ac.id
    jati.itda.ac.id August 21, 2016 at 8:44 AM

    Pakai apa nih nulisnya? Kalau pakai visual studio, coba tambahkan using namespace std;
    Script di atas, saya tulis pakai Turbo C++ 4.5.

  • Anonymous
    Anonymous September 6, 2016 at 11:22 PM

    saya pakai aplikasi code blocks. berhasil ketika di run kan. tapi, ingin melihat nilai dari iterasi 1, pas diarahkan keatas kok malah langsung terkeluar ya...?

Add Comment
comment url