Universitas : Universitas Islam Negeri Maulana Malik Ibrahim Malang
Jurusan : Teknik Informatika
Metode tertutup disebut juga metode bracketing. Disebut sebagai metode tertutup karena dalam pencarian akar-akar persamaan non-linier dilakukan dalam suatu selang [a,b][a,b].
Penyelesaian persamaan non-linier menggunakan metode tabel dilakukan dengan membagi persamaan menjadi beberapa area, dimana untuk x=[a,b]x=[a,b] dibagi sebanyak NN bagian dan pada masing-masing bagian dihitung nilai f(x)f(x) sehingga diperoleh nilai f(x)f(x) pada setian NN bagian.
Bila nilai f(xk)=0f(xk)=0 atau mendekati nol, dimana a≤k≤ba≤k≤b, maka dikatakan bahwa xkxk adalah penyelesaian persamaan f(x)f(x). Bila tidak ditemukan, dicari nilai f(xk)f(xk) dan f(xk+1)f(xk+1) yang berlawanan tanda. Bila tidak ditemukan, maka persamaan tersebut dapat dikatakan tidak mempunyai akar untuk rentang [a,b][a,b].
Bila akar persamaan tidak ditemukan, maka ada dua kemungkinan untuk menentukan akar persamaan, yaitu:
Secara grafis penyelesaian persamaan non-linier menggunakan metode table disajikan pada Gambar dibawah
Kita dapat membuat suatu fungsi pada R untuk melakukan proses iterasi pada metode Tabel. Fungsi root_table() akan melakukan iterasi berdasarkan step algoritma 1 sampai 5. Berikut adalah sintaks yang digunakan:
root_table <- function(f, a, b, N=20){
h <- abs((a+b)/N)
x <- seq(from=a, to=b, by=h)
fx <- rep(0, N+1)
for(i in 1:(N+1)){
fx[i] <- f(x[i])
}
data <- data.frame(x=x, fx=fx)
return(data)
}
Prinsip metode bagi dua adalah mengurung akar fungsi pada interval x=[a,b]x=[a,b] atau pada nilai xx batas bawah aa dan batas atas bb. Selanjutnya interval tersebut terus menerus dibagi 2 hingga sekecil mungkin, sehingga nilai hampiran yang dicari dapat ditentukan dengan tingkat toleransi tertentu. Untuk lebih memahami metode biseksi, perhatikan visualisasi pada Gambar dibawah
Metode biseksi merupakan metode yang paling mudah dan paling sederhana dibanding metode lainnya. Adapun sifat metode ini antara lain:
kita dapat menyusun suatu fungsi pada R yang dapat digunakan untuk melakukan iterasi tersebut. Fungsi root_bisection() merupakan fungsi yang telah penulis susun untuk melakukan iterasi menggunakan metode biseksi. Berikut adalah sintaks dari fungsi tersebut:
root_bisection <- function(f, a, b, tol=1e-7, N=100){
iter <- 0
fa <- f(a)
fb <- f(b)
while(abs(b-a)>tol){
iter <- iter+1
if(iter>N){
warning("iterations maximum exceeded")
break
}
x <- (a+b)/2
fx <- f(x)
if(fa*fx>0){
a <- x
fa <- fx
} else{
b <- x
fb <- fx
}
}
# iterasi nilai x sebagai return value
root <- (a+b)/2
return(list(`function`=f, root=root, iter=iter))
}
Untuk mempersingkat waktu iterasi kita akan menggunakan fungsi root_bisection() pada R. Berikut adalah sintaks yang digunakan:
root_bisection(function(x){x*exp(-x)+1},
a=-1, b=0)
## $`function`
## function(x){x*exp(-x)+1}
## <bytecode: 0x0000000015ae98e0>
##
## $root
## [1] -0.5671433
##
## $iter
## [1] 24
## $`function`
## function (x)
## {
## x * exp(-x) + 1
## }
## <bytecode: 0x000000001d62cab0>
##
## $root
## [1] -0.5671
##
## $iter
## [1] 24
Metode regula falsi merupakan metode yang menyerupai metode biseksi, dimana iterasi dilakukan dengan terus melakukan pembaharuan rentang untuk memperoleh akar persamaan. Hal yang membedakan metode ini dengan metode biseksi adalah pencarian akar didasarkan pada slope (kemiringan) dan selisih tinggi dari kedua titik rentang. Titik pendekatan pada metode regula-falsi disajikan pada Persamaan (7.6).
x=f(b).a−f(a).bf(b)−f(a)(7.6)(7.6)x=f(b).a−f(a).bf(b)−f(a)
Ilustrasi dari metode regula falsi disajikan pada Gambar dibawah
Fungsi root_rf() didasarkan pada langkah-langkah di atas. Sintaks fungsi tersebut adalah sebagai berikut:
root_rf <- function(f, a, b, tol=1e-7, N=100){
iter <- 1
fa <- f(a)
fb <- f(b)
x <- ((fb*a)-(fa*b))/(fb-fa)
fx <- f(x)
while(abs(fx)>tol){
iter <- iter+1
if(iter>N){
warning("iterations maximum exceeded")
break
}
if(fa*fx>0){
a <- x
fa <- fx
} else{
b <- x
fb <- fx
}
x <- (fb*a-fa*b)/(fb-fa)
fx <- f(x)
}
# iterasi nilai x sebagai return value
root <- x
return(list(`function`=f, root=root, iter=iter))
}
Untuk mempercepat proses iterasi, kita dapat pula menggunakan fungsi root_rf() pada R. Berikut adalah sintaks yang digunakan:
root_rf(function(x){x*exp(-x)+1},
a=-1, b=0)
## $`function`
## function(x){x*exp(-x)+1}
## <bytecode: 0x0000000013b98850>
##
## $root
## [1] -0.5671433
##
## $iter
## [1] 15
## $`function`
## function (x)
## {
## x * exp(-x) + 1
## }
## <bytecode: 0x000000001c7931a8>
##
## $root
## [1] -0.5671
##
## $iter
## [1] 15