Golden Section Search

Metode golden section search digunakan untuk mencari nilai minimum suatu fungsi yang dibatasi dari dua buah nilai, yaitu sebuah selang a dan b. Secara umum, jika harus menyertakan dua buah nilai terkadang tidak diketahui apakah di selang tersebut terdapat nilai maksimum atau kah minimumnya. Untuk mengatasi permasalahan tersebut terdapat teknik newton raphson.

Algoritma untuk teknik ini adalah sebagai berikut:

#membuat fungsi golden
golden <- function (f, a, b, tol=0.0000001){
  ratio <- 2 / ( sqrt (5)+1)
  x1 <- b-ratio * (b-a)
  x2 <- a+ratio * (b-a)
  f1 <- f(x1)
  f2 <- f(x2)
  
  while ( abs (b-a)>tol){
    if (f2>f1){
      b <- x2
      x2 <- x1
      f2 <- f1
      x1 <- b-ratio * (b-a)
      
      f1 <- f(x1)} else {
        a <- x1
        x1 <- x2
        f1 <- f2
        x2 <- a+ratio * (b-a)
        f2 <- f(x2)
      }
    }
  return ((a+b) / 2)
  }

contoh :

f(x)=|x−3.5|+(x−2)^2

#membuat fungsi
f <- function(x) {abs(x-3.5)+(x-2)^2}

#kurva
curve(f)

# Menghitung nilai optimum
golden(f,1,1)
## [1] 1

Newton Raphson

Jika suatu fungsi memiliki turunan pertama dan kedua, maka nilai minimum dapat menggunakan metode Newton Raphson. Kelebihan metode ini adalah hanya memerlukan satu nilai untuk inisial. Kelemahannya adalah kita harus yakin f(x) memiliki turunan pertama dan turunan kedua. Jika di golden section tidak perlu ada turunan pertama dan turunan kedua.

#membuat fungsi Newton Raphson
newtonr <- function (fx , x0 =1){
    fx1 <- deriv (fx ,"x") # turunan pertama
    fx2 <- deriv (D(fx ,"x"),"x") # turunan kedua
    er <- 1000
  while(er > 1e-6){
    x <- x0
    f1 <- attr ( eval (fx1),"gradient")[1]
    f2 <- attr ( eval (fx2),"gradient")[1]
    er <- abs(f1) # bisa juga e <- abs (x1 -x0)
    x1 <- x0 - f1/f2
    x0 <- x1
  }
  return (x1)
}

Hitung nilai minimum untuk fungsi- fungsi berikut.

f(x)=4x2−3x−7

f <- expression (4*x^2-3*x-7)
newtonr(f,3)
## [1] 0.375

f(x)=x2−x

f <- expression (x^2-x)
newtonr(f)
## [1] 0.5

Fungsi Optimasi Bult-in

Algoritma Nelder Mead adalah salah satu metode optimasi untuk fungsi yang memiliki lebih dari satu variabel. Di dalam R, fungsi optimasi dengan salah satu algoritma tersebut adalah optimize atau optimise untuk menduga parameter/ mencari nilai minimum dari satu peubah, dan optim untuk lebih dari satu peubah.

Hanya digunakan untuk mendapatkan nilai minimum dari suatu fungsi dengan satu peubah. Misalkan akan dicari nilai minimum dari fungsi

Carilah titik maksimum dan minimum dari fungsi berikut:

f(x)=sin(x)+sin(2x)+cos(x)

f <- function(x) sin(x) + sin (2*x) + cos(x)
curve(f, from =0, to = 2* pi)

optimize(f, interval = c(4, 2*pi)) #minimum lokal
## $minimum
## [1] 5.136413
## 
## $objective
## [1] -1.25
optimize(f, interval = c(0, 2*pi)) #minimum global
## $minimum
## [1] 2.717545
## 
## $objective
## [1] -1.25
optimize(f, interval = c(0, 2*pi), maximum = T) #maksimum lokal
## $maximum
## [1] 3.926991
## 
## $objective
## [1] -0.4142136
optimize(f, interval = c(0, 1.5), maximum = T) #maksimum global
## $maximum
## [1] 0.785397
## 
## $objective
## [1] 2.414214