uniroot dan uniroot.allProdi : Teknik Informatika
Lembaga : UIN Maulana Malik Ibrahim Malang
uniroot dan uniroot.allPaket 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
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
Berdasarkan hasil iterasi diperoleh akar persamaan tersebut adalah \(−0,5671433\) dengan jumlah iterasi sebanyak \(7\) iterasi dan tingkat presisi sebesar \(5e−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))
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
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
polyrootFungsi 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+1\):
polyroot(c(1,0,1))
## [1] 0+1i 0-1i
Contoh lainnya adalah mencari akar polinomial \(f(x)=4x2+5x+6\):
polyroot(c(4,5,6))
## [1] -0.4167+0.7022i -0.4167-0.7022i
Pembaca dapat mencoba membuktikan hasil yang diperoleh tersebut menggunakan metode analitik.
Studi Kasus
Penerapan penyelesaian sistem persamaan non-linier banyak dijumpai dalam berbagai kasus di bidang lingkungan. Pada bagian ini penulis tidak akan menjelaskan seluruhnya. Penulis hanya akan menjelaskan penerapannya pada sebuah persamaan yaitu Hukum Bernoulli.
Misalkan terdapat sebuah saluran dengan penampang sesuai dengan Gambar 7.11.
Berdasarkan hukum Bernoulli, maka diperoleh persamaan berikut:
Persamaan tersebut dapat dilakukan transformasi menjadi persamaan berikut:
Data-data terkait saluran tersebut adalah sebagai berikut:
\(Q=1,2 m^3/det\) = volume aliran fluida tiap satuan waktu
\(g=9,81 m/s^2\) =percepatan gravitasi
\(b=1,8 m\) =lebar pipa
\(h0=0,6 m\) =ketinggian air maksimum
\(H=0,075 m\) =tinggi pelebaran pipa
\(h\) = ketinggian air
Kita dapat menggunakan pendekatan numerik untuk menentukan \(h\) . Pada studi kasus ini tidak dijelaskan lokasi dimana akar penyelesaian berada, sehingga metode terbuka seperti Secant cukup sesuai untuk menyelesaikannya:
Berikut adalah persamaan yang baru setelah seluruh data dimasukkan kedalam tiap variabelnya:
Untuk penyelesaiannya penulis akan memberikan tebakan awal nilai \(h=h0=0,6\). Berikut adalah sintaks penyelesaian menggunakan metode secant:
f <- function(h){
(h^3) + ((0.075-((1.2^2)/(2*9.81*(1.8^2)*(0.6^2))))*h^2)+ (1.2^2/(2*9.81*(1.8^2)))
}
root_secant(f, 0.6)
## $`function`
## function (h)
## {
## (h^3) + ((0.075 - ((1.2^2)/(2 * 9.81 * (1.8^2) * (0.6^2)))) *
## h^2) + (1.2^2/(2 * 9.81 * (1.8^2)))
## }
## <bytecode: 0x000000001d1483f0>
##
## $root
## [1] -0.287
##
## $iter
## [1] 26
Berdasarkan hasil perhitungan diperoleh nilai \(h=−0,2870309\) atau ketinggian air sekitar \(0,3 m\)dengan jumlah iterasi sebanyak \(26\) kali.
Pembaca dapat mencoba menggunakan metode lain seperti metode tertutup. Untuk dapat melakukannya, pembaca perlu memperoleh rentang lokasi akar persamaan tersebut berada menggunakan metode tabel.
REFERENSI:
https://bookdown.org/moh_rosidi2610/Metode_Numerik/rootfinding.html#uniroot
https://bookdown.org/moh_rosidi2610/Metode_Numerik/rootfinding.html#studi-kasus