Dosen Pengampu : Prof.Dr. Suhartono M.kom

Jurusan Teknik Informatika

Universitas Islam Negeri Maulana Malik Ibrahim Malang

Soal Ujian Tengah Semester (UTS) Semester Ganjil Tahun 2021

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

Cara Manual

turunan pertama dari persamaan tesebut:
f(x)=x^3-2x+2 -> f'(x)=3x^2-2
Tebakan awal yg digunakan adalah x=0
f(x0)=0^3-2*(0)+2=2
f'(x0)=3(0)^2-2=-2
Hitung nilai x baru:
x1=x0-f(x0)/f'(0)=0-2/-2=1

Cara Rstudio

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

Berikut adalah sintaks yang digunakan untuk menghitung persamaanya :

root_newton(function(x){x-exp(0^3-2*(0)+2)},
            function(x){1+exp(3*(0)^2-2)},
              x0=0)
## $`function`
## function(x){x-exp(0^3-2*(0)+2)}
## <bytecode: 0x00000000153bea20>
## 
## $root
## [1] 7.389056
## 
## $iter
## [1] 10

2.Temukan akar persamaan dari persamaan f(x)=sin(x)/x dengan rentang pencarian x=0.5 dan x=1!

Penyelesaian

Menemukan akar persamaan dari persamaan f(x)=sin(x)/x dengan rentang x=0.5 dan x=1 menggunakan metode uniroot

uniroot(function(x){sin(x)/0.5}, c(-pi,0.5))
## $root
## [1] -5.91174e-06
## 
## $f.root
## [1] -1.182348e-05
## 
## $iter
## [1] 6
## 
## $init.it
## [1] NA
## 
## $estim.prec
## [1] 6.103516e-05
uniroot(function(x){sin(x)/1}, c(-pi,1))
## $root
## [1] -6.388828e-08
## 
## $f.root
## [1] -6.388828e-08
## 
## $iter
## [1] 6
## 
## $init.it
## [1] NA
## 
## $estim.prec
## [1] 6.103516e-05

Menemukan akar persamaan f(x)=sin(x)/x dengan rentang x=0.5 dan x=1 menggunakan metode root table

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)
}
tabel <- root_table(f=function(x){sin(x)/0.5},
                     a=-1, b=0, N=10)
tabel
##       x         fx
## 1  -1.0 -1.6829420
## 2  -0.9 -1.5666538
## 3  -0.8 -1.4347122
## 4  -0.7 -1.2884354
## 5  -0.6 -1.1292849
## 6  -0.5 -0.9588511
## 7  -0.4 -0.7788367
## 8  -0.3 -0.5910404
## 9  -0.2 -0.3973387
## 10 -0.1 -0.1996668
## 11  0.0  0.0000000

3.Hitung integral fungsi f(x)=sin^2(x) pada domain x E[0,phi]!

Penyelesaian

Menggunakan Metode Trapezoidal

untuk membentuk sebuah program yang digunakan untuk menghitung turunan pertama suatu fungsi. Sintaks yang digunakan adalah sebagai berikut:

trapezoid <- function(ftn, a, b, n = 100) {
     h <- (b-a)/n
     x.vec <- seq(a, b, by = h)
     f.vec <- sapply(x.vec, ftn)     # ftn(x.vec)
     Trap <- h*(f.vec[1]/2 + sum(f.vec[2:n]) + f.vec[n+1]/2)
     return(Trap)
}
#sin^2(x) -> sin (2x)
f <- function(x){
  sin(x)^2
}
trapezoid(f,0,pi,n = 6)
## [1] 1.570796
plot(f)

Menggunakan Metode findiff

Cara manual

Misalkan x=1 dan nilai h=0.05
Untuk menghitung turunan pertama menggunakan metode selisih tengah,Berikut adalah proses perhitungannya:
f'(1)=f(1+0.05)-f(1-0.05)/2X0.05=0

Cara Rstudio

untuk membentuk sebuah program yang digunakan untuk menghitung turunan pertama suatu fungsi. Sintaks yang digunakan adalah sebagai berikut:

findiff <- function(f, x, h, method=NULL){
  if(is.null(method)){
    warning("please select a method")
  }else{
    if(method == "forward"){
      return((f(x+h)-f(x))/h)
    }else if(method=="backward"){
      return((f(x)-f(x-h))/h)
    }else if(method=="central"){
      return((f(x+h)-f(x-h))/(2*h))
    }else{
      warning("you can use method: forward, bacward, or central")
    }
  }
}

Dengan menggunakan fungsi findiff() hasil yang diperoleh adalah sebagai berikut:

findiff(function(x)
  exp(-x)*sin(x)^2, x=1, h=0.05,
  method="central")
## [1] 0.07416049
tabel
##       x         fx
## 1  -1.0 -1.6829420
## 2  -0.9 -1.5666538
## 3  -0.8 -1.4347122
## 4  -0.7 -1.2884354
## 5  -0.6 -1.1292849
## 6  -0.5 -0.9588511
## 7  -0.4 -0.7788367
## 8  -0.3 -0.5910404
## 9  -0.2 -0.3973387
## 10 -0.1 -0.1996668
## 11  0.0  0.0000000
plot(tabel)

Referensi :

https://bookdown.org/moh_rosidi2610/Metode_Numerik/rootfinding.html#newtonraphson

https://bookdown.org/moh_rosidi2610/Metode_Numerik/rootfinding.html#uniroot

https://bookdown.org/moh_rosidi2610/Metode_Numerik/diffinteg.html#finitediff