Dalam metode iterasi untuk menyelesaikan matriks, kita dapat memulai dengan premis bahwa terdapat matriks A, vektor x, dan vektor b, sehingga Ax = b. Dalam metode Jacobi, kita dapat mengamati bahwa terdapat matriks R dan matriks D yang memiliki hubungan A = R + D. Berdasarkan hubungan ini, kita dapat menyimpulkan operasi matriks melalui persamaan berikut:

Maka akan kita dapatkan persamaan yang digunakan sebagai acuan iterasi Jacobi

Di sini, matriks D adalah matriks diagonal yang memiliki elemen diagonal yang sama dengan diagonal utama dari matriks A. Invers dari matriks D dapat disederhanakan menjadi matriks diagonal yang elemen diagonal utamanya diperoleh dengan membagi satu oleh elemen diagonal utama dari matriks A. Matriks R adalah matriks yang memiliki struktur yang identik dengan matriks A, namun dengan diagonal utama yang bernilai nol. Suatu iterasi dikatakan konvergen jika jumlah kuadrat dari vektor x^(n+1) dan vektor x^(n) semakin mengecil.Suatu persamaan linier yang hendak diselesaikan dengan menggunakan metode iterasi Jacobi harus memenuhi syarat nilai elemen diagonal utama matriks harus lebih dominan.

Berikut merupakan contoh soalnya :

Langkah awal yang harus dilakukan adalah menyiapkan matriks A, vektor b, dan vektor x (nilai estimasi awal).

(A <- matrix(c(5,2,1,2,7,3,3,4,8), 3))
##      [,1] [,2] [,3]
## [1,]    5    2    3
## [2,]    2    7    4
## [3,]    1    3    8
(b <- c(40,39,55))
## [1] 40 39 55
(x <- rep(0,3))
## [1] 0 0 0

Kita peroleh invers matriks D

(Dinv <- diag(1/diag(A)))
##      [,1]      [,2]  [,3]
## [1,]  0.2 0.0000000 0.000
## [2,]  0.0 0.1428571 0.000
## [3,]  0.0 0.0000000 0.125

Siapkan matriks R

(R<-A-diag(diag(A)))
##      [,1] [,2] [,3]
## [1,]    0    2    3
## [2,]    2    0    4
## [3,]    1    3    0

Dengan Iterasi 1 maka kita buat kodingan seperti berikut :

(x1 <- Dinv %*% (b-R%*%x))
##          [,1]
## [1,] 8.000000
## [2,] 5.571429
## [3,] 6.875000

Iterasi 2

(x2 <- Dinv %*% (b-R%*%x1))
##            [,1]
## [1,]  1.6464286
## [2,] -0.6428571
## [3,]  3.7857143

Iterasi 3

(x3 <- Dinv %*% (b-R%*%x2))
##          [,1]
## [1,] 5.985714
## [2,] 2.937755
## [3,] 6.910268

Jumlah akar kuadrat dihitung

sqrt(sum(x3-x2)^2)
## [1] 11.04445

Selama proses iterasi nilai tersebut terus mengecil. Iterasi dihantikan jika nilai akar jumlah kuadrat tersebut lebih kecil dari nilai toleransi.Proses iterasi berlangsung sampai dengan iterasi ke-62 dengan nilai x akhir sebagai berikut:

Kita juga bisa menggunakan algoritma iterasi Jacobi dengan menggunakan sintaks berikut serta contoh penggunaannya

jacobi <- function(a, b, tol=1e-7, maxiter=100){
  n <- length(b)
  iter <- 0
  
  Dinv <- diag(1/diag(a))
  R <- a-diag(diag(a))
  x <- rep(0,n)
  x_new <- rep(tol, n)
  
  while(sqrt(sum(x_new-x)^2)>tol){
            if(iter>maxiter){
              warning("iterasi maksimum tercapai")
              break
            }
            x <- x_new
            x_new <- Dinv %*% (b - R %*% x)
            iter <- iter+1
  }
  return(list(X = x_new, iter=iter))
  
}

Contoh penggunaan

jacobi(A,b)
## $X
##      [,1]
## [1,]    4
## [2,]    1
## [3,]    6
## 
## $iter
## [1] 62

Source : https://bookdown.org/moh_rosidi2610/Metode_Numerik/linearaljabar.html#jacobiiter