Dosen Pengampu : Prof.Dr. Suhartono M.kom

Jurusan Teknik Informatika

Universitas Islam Negeri Maulana Malik Ibrahim Malang

Akar Persamaan Non-Linier

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))
}

Contoh Soal Penyelesaian Akar Persamaan Non-Linier

Soal

  1. Temukan akar persamaan dari persamaan non-linier f(x)=x^3-2x+2 menggunakan metode terbuka dengan x0=0 dan x0=1/2!

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)

  1. Apakah kelebihan dari metode tertutup (contoh: metode biseksi) dibanding metode terbuka (contoh: Newton-Raphson)?

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)

  1. Temukan akar persamaan dari persamaan f(x)=sin(x)/x dengan rentang pencarian x=0,5 dan x=1!

Penyelesaian

x  = 0.5 
x  = 1
y  = (sin(x)/(x))
plot(x, y)

  1. Pada kondisi apakah metode Secant lebih dipilih dibanding metode Newton-Raphson?

Penyelesaian

  1. 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.

  2. Formulasi nilai Variabel X berikutnya pada metode Secant lebih komplek dibandingkan dengan metode Newton Raphson

  3. . 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.

  4. 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.

  1. Modifikasilah fungsi root_bisection() dan root_rf() sehingga kita tidak perlu memasukkan argumen a dan b dan hanya perlu memasukkan satu vektor interval kedalam fungsi tersebut! (contoh: interval=c(a,b))

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

https://stt-pln.e-journal.id