Dosen Pengampu : Prof.Dr. Suhartono M.kom
Jurusan Teknik Informatika
Universitas Islam Negeri Maulana Malik Ibrahim Malang
Persamaan non-linier dapat diartikan sebagai persamaan yang tidak mengandung syarat seperti persamaan linier, sehingga persamaan non-linier dapat merupakan:
a. Persamaan yang memiliki pangkat selain satu (misal:x^2)
b. Persamaan yang mempunyai produk dua variabel (misal:xy)
Dalam penyelesaian persamaan non-linier diperlukan akar-akar persamaan non-linier, dimana akar sebuah persamaan non-linier f(x)=0 merupakan nilai x yang menyebabkan nilai f(x)sama dengan nol.
2.1 Metode Tertutup
2.1.1 Metode Tabel
Penyelesaian persamaan non-linier menggunakan metode tabel dilakukan dengan membagi persamaan menjadi beberapa area, dimana untuk x=[a,b] dibagi sebanyak N bagian dan pada masing-masing bagian dihitung nilai f(x) sehingga diperoleh nilai f(x) pada setiap N bagian.
Bila akar persamaan tidak ditemukan, maka ada dua kemungkinan untuk menentukan akar persamaan, yaitu:
a.Akar persamaan ditentukan oleh nilai mana yang lebih dekat. Bila f(Xk)<=f(Xk+1), maka akarnya Xk. Bila f(Xk+1)<=f(Xk), maka akarnya Xk+1
b.Perlu dicari lagi menggunakan rentang x=[Xk,Xk+1]
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)
}
2.1.2 Metode Biseksi
Metode biseksi merupakan metode yang paling mudah dan paling sederhana dibanding metode lainnya. Adapun sifat metode ini antara lain: Konvergensi lambat, Caranya mudah, Tidak dapat digunakan untuk mencari akar imaginer, dan Hanya dapat mencari satu akar pada satu siklus.
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))
}
2.1.3 Metode Regula Falsi
Metode regula falsi merupakan metode yang menyerupai metode biseksi, dimana iterasi dilakukan dengan terus melakukan pembaharuan rentang untuk memperoleh akar persamaan.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))
}
2.2 Metode Terbuka
2.2.1 Metode Iterasi Titik Tetap
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(x) untuk masing-masing variabel x. 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))
}
2.2.2 Metode Newton-Raphson
Metode Newton-Raphson merupakan metode penyelesaian persamaan non-linier dengan menggunakan pendekatan satu titik awal dan mendekatinya dengan memperhatikan slope atau gradien. 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))
}
2.2.3 Metode Secant
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. 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))
}
Soal
Penyelesaian
root_secant <- function(f, x, tol=1e-005, N=100){
iter <- 0
xold <- 0
fxold <- x^3-2*x+2
x <- xold+10*tol
while(abs(x-xold)>tol){
iter <- iter+1
if(iter>N)
stop("No solutions found")
fx <- x^3-2*x+2
xnew <- x - fx*((x-xold)/(fx-fxold))
xold <- x
x^3-2*x+2 <- fx
1/2 <- xnew
}
root<-xnew
return(list(`function`=f, root=root, iter=iter))
}
plot(return)
Penyelesaian
Metode tertutup disebut juga metode bracketing. Disebut sebagai metode tertutup karena dalam pencarian akar-akar persamaan non-linier dilakukan dalam suatu selang [a,b].contohnya metode biseksi,Metode biseksi merupakan metode yang paling mudah dan paling sederhana dibanding metode lainnya. Adapun sifat metode ini antara lain:Konvergensi lambat,Caranya mudah,Tidak dapat digunakan untuk mencari akar imaginer,Hanya dapat mencari satu akar pada satu siklus.Sedangkan metode terbuka merupakan metode yang menggunakan satu atau dua tebakan awal yang tidak memerlukan rentang sejumlah nilai.Contohnya metode Newton-Raphson,Metode Newton-Raphson merupakan metode penyelesaian persamaan non-linier dengan menggunakan pendekatan satu titik awal dan mendekatinya dengan memperhatikan slope atau gradien.Dalam penerapannya metode Newton-Raphson dapat mengalami kendala. Kendala yang dihadapi adalah sebagai berikut:
-titik pendekatan tidak dapat digunakan jika merupakan titik ekstrim atau titik puncak. Hal ini disebabkan pada titik ini nilai f`(x)=0
-Sulit memperoleh penyelesaian ketika titik pendekatan berada diantara 2 titik stasioner.
-Turunan persamaan sering kali sulit untuk diperoleh (tidak dapat dikerjakan dengan metode analitik)
Penyelesaian
x = 0.5
x = 1
y = (sin(x)/(x))
plot(x, y)
Penyelesaian
Metode Newton Raphson memiliki 2 buah formulasi yaitu formulasi nilai Variabel X berikutnya, dan formulasi nilai Absolut Galat Relatif.Sedangkan Metode Secant hanya memiliki sebuah formulasi nilai Variabel X berikutnya.
Formulasi nilai Variabel X berikutnya pada metode Secant lebih komplek dibandingkan dengan metode Newton Raphson
. Kecepatan proses perhitungan untuk mencari nilai akar persamaan adalah pada metode Newton Raphson (hanya 6 langkah), sedangkan pada metode Secant ada 8 langkah. Hal ini dikarenakan pada metode Newton Raphson terdapat tambahan 1 formulasi yaitu formulasi nilai Absolut Galat Relatif.
Nilai akar persamaan yang dicari lebih akurat dengan metode Newton Raphson, yaitu 2,00001, sedangkan pada metode Secant yaitu 2,00036, ada selisih sekitar 0,00035.
Penyelesaian
#roff_bisection()
root_bisection(function(x){x*exp(-x)+1},a=-1, b=0)
#roff_rf()
root_rf(function(x){x*exp(-x)+1}, a=-1, b=0)
Referensi :
https://bookdown.org/moh_rosidi2610/Metode_Numerik/rootfinding.html#bracketing