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