Dosen Pengampu : Prof. Dr. Suhartono, M.Kom

Lembaga : Universitas Islam Negeri Maulana Malik Ibrahim Malang

Jurusan : Teknik Informatika

Fakultas : Sains dan Teknologi

0.1 Penyelesaian Persamaan Non-Linier Menggunakan Fungsi uniroot dan uniroot.all

Paket base pada R menyediakan fungsi uniroot() untuk mencari akar persamaan suatu fungsi pada rentang spesifik. Fungsi ini menggunakan metode Brent yaitu kombinasi antara root bracketing, biseksi, dan interpolasi invers kuadrat. Format fungsi tersebut secara sederhana adalah sebagai berikut:

uniroot(f, interval, tol=.Machine$double.eps^0.25, 
        maxiter=1000)

Catatan:

  • f: persamaan non-linier

  • interval: vektor interval batas bawah dan atas

  • tol: nilai toleransi

  • maxiter: iterasi maksimum

0.1.1 Berikut adalah contoh penerapan fungsi uniroot():

uniroot(function(x){x*exp(-x)+1},
        interval=c(-1,0), tol=1e-7)

## $root
## [1] -0.5671
## 
## $f.root
## [1] 1.533e-08
## 
## $iter
## [1] 7
## 
## $init.it
## [1] NA
## 
## $estim.prec
## [1] 5e-08
## $root
## [1] -0.5671433
## 
## $f.root
## [1] 0.00000001532974
## 
## $iter
## [1] 7
## 
## $init.it
## [1] NA
## 
## $estim.prec
## [1] 0.00000005

Berdasarkan hasil iterasi diperoleh akar persamaan tersebut adalah −0,5671433−0,5671433 dengan jumlah iterasi sebanyak 77 iterasi dan tingkat presisi sebesar 5e−085e−08.

Fungsi lain yang dapat digunakan untuk mencari akar persamaan adalah uniroot.all() dari paket rootSolve. Fungsi ini mengatasi kelemahan dari uniroot(), dimana uniroot() tidak bekerja jika fungsi hanya menyentuh dan tidak melewati sumbu nol y=0y=0. Untuk memahaminya perhatikan contoh berikut:

uniroot(function(x){sin(x)+1}, c(-pi,0))

0.1.2 Bandingkan dengan sintaks berikut:

uniroot(function(x){sin(x)+1}, c(-pi,-pi/2))

## $root
## [1] -1.571
## 
## $f.root
## [1] 0
## 
## $iter
## [1] 0
## 
## $init.it
## [1] NA
## 
## $estim.prec
## [1] 0
## $root
## [1] -1.570796
## 
## $f.root
## [1] 0
## 
## $iter
## [1] 0
## 
## $init.it
## [1] NA
## 
## $estim.prec
## [1] 0

0.1.3 Untuk menggunakan fungsi uniroot.all(), jalankan sintaks berikut:

library(rootSolve)

Jalankan kembali fungsi dan rentang di mana uniroot() tidak dapat bekerja:

uniroot.all(function(x){sin(x)+1}, c(-pi,0))

## [1] -1.571

0.2 Akar Persamaan Polinomial Menggunakan Fungsi polyroot

Fungsi polyroot() pada paket base dapat digunakan untuk memperoleh akar dari suatu polinomial. Algortima yang digunakan dalam fungsi tersebut adalah algoritma Jenkins dan Traub.

Untuk dapat menggunakannya kita hanya perlu memasukkan vektor koefisien dari polinomial. Pengisian elemen dalam vektor dimulai dari variabel dengan pangkat tertinggi menuju variabel dengan pangkat terendah. Berikut adalah contoh bagaimana fungsi polyroot() digunakan untuk mencari akar polinomial f(x)=x2+1f(x)=x2+1:

polyroot(c(1,0,1))

## [1] 0+1i 0-1i
## [1] 0+1i 0-1i

Contoh lainnya adalah mencari akar polinomial f(x)=4x2+5x+6f(x)=4x2+5x+6:

polyroot(c(4,5,6))

## [1] -0.4167+0.7022i -0.4167-0.7022i
## [1] -0.4166667+0.7021791i -0.4166667-0.7021791i