Lakukan Modifikasi pada fungsi newtonraphson sehingga output dari fungsi tersebut berupa list dengan tiga object:
root berisi akar
persamaan.x_values berisi semua
nilai x yang dicobakanerror berisi nilai dari
hasil operasi abs(fx[1]) Gunakan persamaan pada contoh soal
1 untuk menujukkan hasil output-nya!Berikut fungsi newtonraphson
newtonraphson <- function(ftn, x0, tol = 1e-5, max.iter = 100) {
x <- x0
fx <- ftn(x)
xvalue<-max.iter
error<-max.iter
iter <- 0
while ((abs(fx[1]) > tol) && (iter < max.iter)) {
x <- x - fx[1]/fx[2]
fx <- ftn(x)
iter <- iter + 1
xvalue[iter]<-x
error[iter]<-abs(fx[1])
}
# output bergantung pada kesuksesan algoritma
if (abs(fx[1]) > tol) {
cat("Algorithm failed to converge\n")
return(NULL)
} else {
cat("Algorithm converged\n")
root <- tail(xvalue, n=1)
list(root=root,x_values=xvalue,error=error)
}
}Selanjutnya, persamaan yang digunakan untuk menunjukkan output dari fungsi di atas adalah:
Mendefinikan persamaan dalam bentuk fungsi untuk newton-raphson:
## Warning: package 'Deriv' was built under R version 4.4.1
fx_nr <- function(x) {
rumus_fungsi <- function(x) x^3-2*x-5
fungsi <- rumus_fungsi(x)
# mencari turunan dengan menggunakan fungsi Deriv
# dari package Deriv
rumus_turunan <- Deriv::Deriv(fx)
turunan <- rumus_turunan(x)
return(c("fungsi"=fungsi,"turunan"=turunan))
}## Algorithm converged
## $root
## [1] 2.094551
##
## $x_values
## [1] -2.5000000 -1.5671642 -0.5025924 -3.8207065 -2.5493934 -1.6081115
## [7] -0.5761004 -4.5977096 -3.0835431 -2.0221943 -1.1237641 1.2086516
## [13] 3.5807900 2.6552332 2.2161063 2.1021250 2.0945836 2.0945515
##
## $error
## [1] 1.562500e+01 5.714632e+00 4.121770e+00 5.313249e+01 1.647076e+01
## [6] 5.942390e+00 4.039002e+00 9.299526e+01 2.815198e+01 9.224909e+00
## [11] 4.171613e+00 5.651658e+00 3.375152e+01 8.409627e+00 1.451367e+00
## [16] 8.489238e-02 3.582354e-04 6.472653e-09
Selidiki penggunaan fungsi browser() di R. Gunakan
fungsi newtonraphson untuk ilustrasi penggunaan. Laporkan hasil
penyelidikanmu beserta ilustrasi koding!
Fungsi browser() diletakkan atau diselipkan
sebelum output list pada fungsi
newtonraphson
newtonraphson <- function(ftn, x0, tol = 1e-5, max.iter = 100) {
x <- x0
fx <- ftn(x)
xvalue<-max.iter
error<-max.iter
iter <- 0
while ((abs(fx[1]) > tol) && (iter < max.iter)) {
x <- x - fx[1]/fx[2]
fx <- ftn(x)
iter <- iter + 1
xvalue[iter]<-x
error[iter]<-abs(fx[1])
}
# output bergantung pada kesuksesan algoritma
if (abs(fx[1]) > tol) {
cat("Algorithm failed to converge\n")
return(NULL)
} else {
cat("Algorithm converged\n")
root <- tail(xvalue, n=1)
browser()
list(root=root,x_values=xvalue,error=error)
}
}
fx <- function(x) {
x^3 - 2 * x - 5
}
library(Deriv)
fx_nr <- function(x) {
rumus_fungsi <- function(x) x^3-2*x-5
fungsi <- rumus_fungsi(x)
# mencari turunan dengan menggunakan fungsi Deriv
# dari package Deriv
rumus_turunan <- Deriv::Deriv(fx)
turunan <- rumus_turunan(x)
return(c("fungsi"=fungsi,"turunan"=turunan))
}Setelah itu, memanggil fungsi newtonrapshon() yang telah
terdapat browser() didalamnya dengan menggunakan persamaan
pada soal nomor 1.
## Algorithm converged
## Called from: newtonraphson(ftn = fx_nr, x0 = 0)
## debug at <text>#22: list(root = root, x_values = xvalue, error = error)
## $root
## [1] 2.094551
##
## $x_values
## [1] -2.5000000 -1.5671642 -0.5025924 -3.8207065 -2.5493934 -1.6081115
## [7] -0.5761004 -4.5977096 -3.0835431 -2.0221943 -1.1237641 1.2086516
## [13] 3.5807900 2.6552332 2.2161063 2.1021250 2.0945836 2.0945515
##
## $error
## [1] 1.562500e+01 5.714632e+00 4.121770e+00 5.313249e+01 1.647076e+01
## [6] 5.942390e+00 4.039002e+00 9.299526e+01 2.815198e+01 9.224909e+00
## [11] 4.171613e+00 5.651658e+00 3.375152e+01 8.409627e+00 1.451367e+00
## [16] 8.489238e-02 3.582354e-04 6.472653e-09
Fungsi browser() tersebut berguna untuk melihat dalamnya
fungsi seperti apa. Kita dapat memeriksa atau mengeksekusi nilai
variabel, parameter atau output fungsi yang sudah dibuat serta
menelusuri pernyataan fungsi baris demi baris.
Untuk melihat nama-nama variabel atau objek yang ada pada fungsi
newtonraphson, maka dapat menggunakan perintah
ls() seperti berikut:
Misalnya, kita memanggil output error,
x_value, dan root serta objek atau nilai
lainnya dari contoh persamaan fx. Memanggil nilai-nilai tersebut bisa
ditulis di console, seperti berikut:
Untuk menutup fungsi browser() ini serta mengeluarkan
output dari fungsi, dapat digunakan perintah cont
seperti berikut:
Sedangkan untuk keluar dari fungsi browser() tanpa
mengeluarkan output dari fungsi, dapat menggunakan perintah
Q. Sedangkan perintah n digunakan untuk
menelusuri pernyataan-pernyataan berikutnya.
Buatlah gambar fungsi pada contoh soal 2 dengan menggunakan package
ggplot dengan menggunakan fungsi
geom_curve!
Persamaan
Plot dari persamaan di atas dengan fungsi
geom_curve
ggplot(data,aes(x=x,y=y)) +
geom_curve(aes(x=-3,y=-25,xend=0,yend=-1),data=data,curvature =-0.35) +
geom_curve(aes(x=0,y=-1,xend=3,yend=23),data=data,curvature=0.4)+
geom_hline(yintercept=0) +
geom_vline(xintercept=0)## Warning in geom_curve(aes(x = -3, y = -25, xend = 0, yend = -1), data = data, : All aesthetics have length 1, but the data has 601 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
## Warning in geom_curve(aes(x = 0, y = -1, xend = 3, yend = 23), data = data, : All aesthetics have length 1, but the data has 601 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.