Dosen Pengampu : Prof. Dr. Suhartono, M.Kom
Lembaga : Universitas Islam Negeri Maulana Malik Ibrahim Malang
Jurusan : Teknik Informatika
Fakultas : Sains dan Teknologi
Metode terbuka merupakan metode yang menggunakan satu atau dua tebakan awal yang tidak memerlukan rentang sejumlah nilai. Metode terbuka terdiri dari beberapa jenis yaitu metode iterasi titik tetap, metode Newton-Raphson, dan metode Secant.
Metode iterasi titik tetap merupakan metode penyelesaian persamaan non-linier dengan cara menyelesaikan setiap variabel x yang ada dalam suatu persamaan dengan sebagian yang lain sehingga diperoleh x=g() untuk masing-masing variabel x . Sebagai contoh, untuk menyelesaikan persamaan x+ex=0 , maka persamaan tersebut perlu diubah menjadi x=ex atau g()=x . Secara grafis metode ini diilustrasikan seperti Gambar 7.7.
Definisikan f(x) dan g(x)
Tentukan nilai toleransi e dan iterasi masimum (N)
Tentukan tebakan awal x0
Untuk iterasi i=1 s/d N atau f(xiterasi)≥e→xi=g(xi−1) , Hitung f(xi
Akar persamaan adalah x terakhir yang diperoleh
FUngsi root_fpi()
dapat digunakan untuk melakukan iterasi dengan argumen fungsi berupa persamaan non-linier, nilai tebakan awal, nilai toleransi, dan jumlah iterasi maksimum. Berikut adalah sintaks fungsi tersebut:
root_fpi <- function(f, x0, tol=1e-7, N=100){
iter <- 1
xold <- x0
xnew <- f(xold)
while(abs(xnew-xold)>tol){
iter <- iter+1
if(iter>N){
stop("No solutions found")
}
xold <- xnew
xnew <- f(xold)
}
root <- xnew
return(list(`function`=f, root=root, iter=iter))
}
Untuk mempercepat proses iterasi kita dapat menggunakan bantuan fungsi root_fpi()
. Berikut adalah sintaks yang digunakan:
root_fpi(function(x){-1/exp(-x)}, x0=-1)
## $`function`
## function(x){-1/exp(-x)}
## <bytecode: 0x0000000011455770>
##
## $root
## [1] -0.5671433
##
## $iter
## [1] 29
Berdasarkan hasil iterasi diperoleh nilai x=−0,5671433 dengan jumlah iterasi yang diperlukan sebanyak 29 kali. Jumlah iterasi akan bergantung dengan nilai tebakan awal yang kita berikan. Semakin dekat nilai tersebut dengan akar, semakin cepat nilai akar diperoleh.
Metode Newton-Raphson merupakan metode penyelesaian persamaan non-linier dengan menggunakan pendekatan satu titik awal dan mendekatinya dengan memperhatikan slope atau gradien.
Ilustrasi metode Newton-Raphson disajikan pada Gambar 7.8.
Definisikan f(x) dan f′(x)
Tentukan nilai toleransi e dan iterasi masimum (N)
Tentukan tebakan awal x0
Hitung f(x0) dan f′(x0)
Untuk iterasi i=1 s/d N atau |f(x)|≥e , hitung x menggunakan Persamaan (7.7)
Akar persamaan merupakan nilai xi terakhir yang diperoleh.
Fungsi root_newton()
merupakan fungsi yang dibuat menggunakan algoritma di atas. Fungsi tersebut dituliskan pada sintaks berikut:
root_newton <- function(f, fp, x0, tol=1e-7, N=100){
iter <- 0
xold<-x0
xnew <- xold + 10*tol
while(abs(xnew-xold)>tol){
iter <- iter+1
if(iter>N){
stop("No solutions found")
}
xold<-xnew
xnew <- xold - f(xold)/fp(xold)
}
root<-xnew
return(list(`function`=f, root=root, iter=iter))
}
Berdasarkan hasil iterasi diperoleh akar penyelesaian persamaan non-linier adalah x=0,5671433 dengan jumlah iterasi yang diperlukan adalah 5 iterasi.
Dalam penerapannya metode Newton-Raphson dapat mengalami kendala. Kendala yang dihadapi adalah sebagai berikut:
Metode Secant merupakan perbaikan dari metode regula-falsi dan Newton Raphson, dimana kemiringan dua titik dinyatakan secara diskrit dengan mengambil bentuk garis lurus yang melalui satu titik. Persamaan yang dihasilkan disajikan pada Persamaan (7.8).
Definisikan f(x) dan f′(x)
Tentukan nilai toleransi e dan iterasi masimum (N)
Tentukan tebakan awal x0 dan x1
Hitung f(x0) dan f(x1)
Untuk iterasi i=1 s/dN atau fx)|≥e , hitung x menggunakan Persamaan (7.14)
Akar persamaan adalah nilai x yang terakhir.
Fungsi root_secant()
merupakan fungsi yang penulis buat untuk melakukan iterasi menggunakan metode Secant. Berikut merupakan sintaks dari fungsi tersebut:
root_secant <- function(f, x, tol=1e-7, N=100){
iter <- 0
xold <- x
fxold <- f(x)
x <- xold+10*tol
while(abs(x-xold)>tol){
iter <- iter+1
if(iter>N)
stop("No solutions found")
fx <- f(x)
xnew <- x - fx*((x-xold)/(fx-fxold))
xold <- x
fxold <- fx
x <- xnew
}
root<-xnew
return(list(`function`=f, root=root, iter=iter))
}
root_secant(function(x){x-exp(-x)}, x=0)
## $`function`
## function(x){x-exp(-x)}
## <bytecode: 0x0000000011aab748>
##
## $root
## [1] 0.5671433
##
## $iter
## [1] 6
Berdasarkan hasil iterasi diperoleh nilai akar penyelesaian adalah x=0,5671433 dengan iterasi dilakukan sebanyak 6 kali.
Secara umum metode Secant menawarkan sejumlah keuntungan dibanding metode lainnya. Pertama, seperti metode Newton-Raphson dan tidak seperti metode tertutup lainnya, metode ini tidak memerlukan rentang pencarian akar penyelesaian. Kedua, tidak seperti metode Newton-Raphson, metode ini tidak memerlukan pencarian turunan pertama persamaan non-linier secara analitik, dimana tidak dapat dilakukan otomasi pada setiap kasus.
Adapun kerugian dari metode ini adalah berpotensi menghasilkan hasil yang tidak konvergen sama seperti metode terbuka lainnya. Selain itu, kecepatan konvergensinya lebih lambat dibanding metode Newton-Raphson.
https://bookdown.org/moh_rosidi2610/Metode_Numerik/rootfinding.html#openmethod
https://bookdown.org/moh_rosidi2610/Metode_Numerik/rootfinding.html#fixpoint
https://bookdown.org/moh_rosidi2610/Metode_Numerik/rootfinding.html#newtonraphson
https://bookdown.org/moh_rosidi2610/Metode_Numerik/rootfinding.html#secant