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
## The legacy packages maptools, rgdal, and rgeos, underpinning the sp package,
## which was just loaded, will retire in October 2023.
## Please refer to R-spatial evolution reports for details, especially
## https://r-spatial.org/r/2023/05/15/evolution4.html.
## It may be desirable to make the sf package available;
## package maintainers should consider adding sf to Suggests:.
## The sp package is now running under evolution status 2
##      (status 2 uses the sf package in place of rgdal)
## 
## Attaching package: 'mosaicCalc'
## The following object is masked from 'package:stats':
## 
##     D
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)
  }
# Membuat fungsi f(x)
f <- function(x) {abs(x-5.5)+(x-2)^2}

# Membuat plot
curve(f, 1,5)

golden(f,1,2)
## [1] 2
golden(f,1,5)
## [1] 2.5
golden(f,5,5)
## [1] 5