library(mosaicCalc)
## Loading required package: mosaic
## Registered S3 method overwritten by 'mosaic':
##   method                           from   
##   fortify.SpatialPolygonsDataFrame ggplot2
## 
## The 'mosaic' package masks several functions from core packages in order to add 
## additional features.  The original behavior of these functions should not be affected by this.
## 
## Attaching package: 'mosaic'
## The following objects are masked from 'package:dplyr':
## 
##     count, do, tally
## The following object is masked from 'package:Matrix':
## 
##     mean
## The following object is masked from 'package:ggplot2':
## 
##     stat
## The following objects are masked from 'package:stats':
## 
##     binom.test, cor, cor.test, cov, fivenum, IQR, median, prop.test,
##     quantile, sd, t.test, var
## The following objects are masked from 'package:base':
## 
##     max, mean, min, prod, range, sample, sum
## Loading required package: mosaicCore
## 
## Attaching package: 'mosaicCore'
## The following objects are masked from 'package:dplyr':
## 
##     count, tally
## 
## Attaching package: 'mosaicCalc'
## The following object is masked from 'package:stats':
## 
##     D

Metode-metode zero finding atau root finding adalah teknik-teknik yang digunakan untuk menemukan nilai-nilai dari variabel independen yang membuat suatu fungsi menjadi nol atau mencari akar-akar dari suatu persamaan. Berikut adalah beberapa metode zero finding yang umum digunakan:

  1. Bisection Method

    Metode bisection digunakan untuk mencari akar-akar persamaan polinomial . Metode ini memisahkan interval dan membagi lagi interval di mana akar persamaan berada. Prinsip di balik metode ini adalah teorema perantara untuk fungsi kontinu. Ia bekerja dengan mempersempit kesenjangan antara interval positif dan negatif hingga mendekati jawaban yang benar. Metode ini mempersempit kesenjangan dengan mengambil rata-rata interval positif dan negatif. Metode ini merupakan metode yang sederhana dan relatif lambat. Metode bisection juga dikenal sebagai interval halving method, root-finding method, binary search method atau dichotomy method.

    Berikut contoh dari Bisection Method:

# Bisection Method
bisection <- function(f, a, b, tol = 1e-6, max_iter = 100) {
  iter <- 0
  while ((b - a)/2 > tol && iter < max_iter) {
    midpoint <- (a + b)/2
    if (f(midpoint) == 0) return(midpoint)
    else if (f(midpoint) * f(a) < 0) b <- midpoint
    else a <- midpoint
    iter <- iter + 1
  }
  return((a + b)/2)
}

f <- function(x) x^2 - 4

# Pemanggilan method
akar_bisection <- bisection(f, 0, 4)
print(paste("Akar (Bisection Method):", akar_bisection))
## [1] "Akar (Bisection Method): 2"
  1. Newton-Rhapson Method

    Metode Newton-Rhapson merupakan salah satu metode yang digunakan untuk menyelsaikan persamaan tak linier secara numerik. Secara numerik maksudnya penyelesaian persamaan dengan pendekatan angka tertentu, yang hasilnya akan mendekati hasil secara eksak (hasil sebenarnya) atau bahkan sama dengan hasil secara numerik tergantung dari galat yang digunakan. Persamaan linier adalah persamaan yang pangkat salah satu variabelnya lebih dari atau kurang dari satu (pangkat pecahan). Newton Rhapson merupakan metode yang banyak digunakan, karena konvergensinya paling cepat diantara metode lainnya.

    Berikut contoh dari Newton-Raphson Method:

# Newton-Raphson Method
newton_raphson <- function(f, df, x0, tol = 1e-6, max_iter = 100) {
  x <- x0
  iter <- 0
  
  repeat {
    x_new <- x - f(x) / df(x)
    iter <- iter + 1
    
    if (abs(x_new - x) < tol || iter >= max_iter) {
      break
    }
    
    x <- x_new
  }
  
  return(x)
}

f <- function(x) x^2 - 4
df <- function(x) 2 * x

# Pemanggilan Method
akar_newton_raphson <- newton_raphson(f, df, 1)
print(paste("Akar (Newton-Raphson Method):", akar_newton_raphson))
## [1] "Akar (Newton-Raphson Method): 2.00000009292229"
  1. Regula Falsi Method

    Metode Regula Falsi adalah teknik numerik untuk mencari akar persamaan nonlinear. Menggabungkan konsep metode bisection dan interpolasi linear, metode ini memilih dua titik awal pada interval yang mengandung akar, kemudian menghitung nilai fungsi pada kedua titik tersebut. Dengan menggunakan interpolasi linear, titik regula ditentukan, dan interval baru dihitung berdasarkan tanda fungsi pada ujung interval dan titik regula. Proses ini diulangi hingga nilai aproksimasi yang diinginkan tercapai. Meskipun memiliki kelebihan konvergensi yang relatif cepat, metode ini dapat divergen jika interval awal tidak dipilih dengan baik atau fungsi memiliki sifat tertentu. Nama lain dari metode ini adalah False Position Method.

    Berikut contoh dari Regula Falsi Method:

#Regula Falsi Method
regula_falsi <- function(f, a, b, tol = 1e-6, max_iter = 100) {
  iter <- 0
  while ((b - a)/2 > tol && iter < max_iter) {
    x <- (a * f(b) - b * f(a))/(f(b) - f(a))
    if (f(x) == 0) return(x)
    else if (f(x) * f(a) < 0) b <- x
    else a <- x
    iter <- iter + 1
  }
  return((a + b)/2)
}

f <- function(x) x^2 - 4

# Pemanggilan Method
akar_regula_falsi <- regula_falsi(f, 0, 4)
print(paste("Akar (Regula Falsi Method):", akar_regula_falsi))
## [1] "Akar (Regula Falsi Method): 2"
  1. Secant Method

    Metode Secant adalah teknik numerik untuk mencari akar persamaan nonlinear. Dalam metode ini, akar ditemukan melalui pendekatan iteratif menggunakan garis sepanjang dua titik pada kurva fungsi. Titik-titik ini berasal dari pendekatan sebelumnya, dan garis yang menghubungkannya memotong sumbu x pada perkiraan lokasi akar. Metode Secant tidak memerlukan turunan fungsi, sehingga dapat digunakan pada kasus di mana turunan sulit dihitung atau tidak tersedia. Namun, seperti metode iteratif pada umumnya, konvergensi metode ini tergantung pada pemilihan titik awal yang baik dan sifat fungsi yang dihadapi.

    Berikut contoh dari Secant Method:

#Secant Method
secant_method <- function(f, x0, x1, tol = 1e-6, max_iter = 100) {
  iter <- 0
  while (abs(f(x1)) > tol && iter < max_iter) {
    x2 <- x1 - (f(x1) * (x1 - x0))/(f(x1) - f(x0))
    x0 <- x1
    x1 <- x2
    iter <- iter + 1
  }
  return(x1)
}

f <- function(x) x^2 - 4

# Pemanggilan Method
akar_secant <- secant_method(f, 0, 4)
print(paste("Akar (Secant Method):", akar_secant))
## [1] "Akar (Secant Method): 1.9999999996176"

Metode-metode zero finding adalah alat penting dalam konteks penyelesaian persamaan matematika dan fungsi nonlinier. Setiap metode memiliki karakteristik dan aplikasi sendiri. Bisection Method, meskipun sederhana, dapat digunakan pada berbagai jenis fungsi, sementara Newton-Raphson Method menonjol dalam konvergensi cepat dengan memanfaatkan turunan fungsi. Regula Falsi Method menggabungkan kelebihan bisection dan interpolasi linear, sedangkan Secant Method, meskipun tidak memerlukan turunan, membutuhkan pemilihan titik awal yang cermat.