Metode Jacobi

Metode Iterasi Jacobi merupakan salah satu bidang analisis numerik yang digunakan untuk menyelesaikan permasalahan persamaan linear dan sering dijumpai dalam berbagai disiplin ilmu. Metode Iterasi Jacobi merupakan salah satu metode tak langsung, yaitu bermula dari suatu hampiran penyelesaian awal dan kemudian berusaha memperbaiki hampiran dalam tak berhingga namun langkah konvergen. Metode Iterasi Jacobi ini digunakan untuk menyelesaikan persamaan linear berukuran besar dan proporsi koefisien nolnya besar.

Metode ini ditemukan oleh matematikawan yang berasal dari Jerman,Carl Gustav Jakob Jacobi. Penemuan ini diperkirakan pada tahun 1800-an.

Kalau kita mengubah dalam Sistem Persamaan Linear, maka dapat ditulis sebagai berikut

Kemudian, diketahui bahwa ,
di mana  merupakan matriks diagonal,  merupakan matriks segitiga bawah, dan  merupakan matriks segitiga atas.

Kemudian, persamaan di atas dapat diubah menjadi:

Kemudian,

Jika ditulis dalam aturan iteratif, maka metode Jacobi dapat ditulis sebagai:

di mana  merupakan banyaknya iterasi.
Jika  menyatakan hampiran ke-  penyelesaian SPL, maka  adalah hampiran awal.

Deskripsi 
Jadi

menjadi sistem kuadrat dari nilai  dalam persamaan linier yaitu:

Setelah itu nilai  dapat diuraikan menjadi komponen diagonal , bagian segitiga bawah  dan bagian segitiga atas :

Algoritme Metode Iterasi Jacobi 

INPUT:
 , A, b, dan hampiran awal Y=(y1 y2 y3...yn)T, batas toleransi T, dan maksimum iterasi N

OUTPUT:
X=(x1 x2 x3...xn)T, vektor galat hampiran , dan  yang merupakan matriks dengan baris vektor-vektor hampiran selama iterasi.

 Set penghitung iterasi k=1
 WHILE  DO
 FOR , Hitung 
 SET 
 IF ||X_Y||<T THEN STOP
 Tambah penghitung iterasi, 
 FOR , Set yi=xi
 SET Y=(y1 y2 y3...yn)T
 Tulis pesan "Metode gagal setelah N iterasi"
 STOP

 Input: , (diagonal dominant) matrix , right-hand side vector , convergence criterion
 Output: 
 Comments: 
 
 
 while convergence not reached do
     for i := 1 step until n do
         
         for j := 1 step until n do
             if j ≠ i then
                 
             end
         end
         
     end
     
 end

Algoritme Metode Iterasi Jacobi dalam bentuk software Matlab 

Penggunaan algoritme Metode Iterasi Jacobi dalam bentuk matlab. Matlab merupakan program pengolahan data numerik.

INPUT:
 , A, b, dan hampiran awal Y=(y1 y2 y3...yn)T, batas toleransi T, dan maksimum iterasi N

OUTPUT:
X=(x1 x2 x3...xn)T, vektor galat hampiran , dan  yang merupakan matriks dengan baris vektor-vektor hampiran selama iterasi.

 H=X0'
 n=length (b)
 X=X0
 for k:=1 until N
 for i:=i until n,
 S = b (i) - A (i,[1:i-1,i+1:n]) * X0 ([1:i-1,i+1:n])
 X(i) = S / A (i,i)
 end
 g = abs (X-X0)
 err = norm (g)
 relerr = err / (norm (X)+eps)
 X0 = X
 H = [H;X0']
 if (err<T)|(relerr<T), break, end
 end

Kekonvergenan 
MEtode ini akan bernilai konvergen jika matriksnya merupakan matriks dominan secara diagonal, yaitu apabila unsur diagonal pada kolom tersebut lebih besar dari penjumlahan unsur-unsur lainnya pada kolom tersebut.

Contoh 
Sistem linear dari bentuk  dengan perkiraan awal  diberikan oleh

Kami menggunakan persamaan , dijelaskan di atas, untuk memperkirakan . Pertama, kami menulis ulang persamaan dalam bentuk yang lebih mudah , dimana  dan . Dari nilai-nilai yang diketahui

we determine  as

Further,  is found as

Dengan  dan  dihitung, kami perkirakan  sebagai :

Hasil iterasi berikutnya

Proses ini diulangi sampai konvergensi (yaitu, sampai  kecil). Solusi setelah 25 iterasi adalah

Contoh lain 

Contohnya kita diberi sistem linier berikut:

Bila kita memilih  sebagai pendekatan awal, maka solusi perkiraan pertama diberikan oleh

Dengan menggunakan perkiraan yang diperoleh, prosedur iteratif diulangi sampai akurasi yang diinginkan tercapai. Berikut ini adalah solusi yang diperkirakan setelah lima iterasi.

Solusi yang tepat dari sistem ini adalah .

Contoh menggunakan Python dan NumPy 
Prosedur numerik berikut hanya melakukan iterasi untuk menghasilkan vektor solusi.

def jacobi(A, b, x_init, epsilon=1e-10, max_iterations=500):
    D = np.diag(np.diag(A))
    LU = A - D
    x = x_init
    for i in range(max_iterations):
        D_inv = np.diag(1 / np.diag(D))
        x_new = np.dot(D_inv, b - np.dot(LU, x))
        if np.linalg.norm(x_new - x) < epsilon:
            return x_new
        x = x_new
    return x

# problem data
A = np.array([
    [5, 2, 1, 1],
    [2, 6, 2, 1],
    [1, 2, 7, 1],
    [1, 1, 2, 8]
])
b = np.array([29, 31, 26, 19])

# you can choose any starting vector
x_init = np.zeros(len(b))
x = jacobi(A, b, x_init)

print("x:", x)
print("computed b:", np.dot(A, x))
print("real b:", b)

Menghasilkan keluaran:

x: [3.99275362 2.95410628 2.16183575 0.96618357]
computed b: [29. 31. 26. 19.]
real b: [29 31 26 19]

Lihat pula 

Metode Gauss–Seidel
Relaksasi berlebihan berturut-turut
Metode berulang§Sistem linier
Propagasi Keyakinan Gaussian
 Pemisahan matriks

Referensi 

 Sahid. 2005. Pengantar Komputasi Numerik dengan MATLAB. ANDI, Yogyakarta

Pranala luar 

 
 Jacobi Method from www.math-linux.com

Aljabar linear numerik
Artikel dengan contoh kodesemu
Relaksasi (metode berulang)
Artikel dengan contoh kode Python
Analisis numerik