Note that arguments after `…`

must be matched exactly.

The method used is a combination of golden section search and
successive parabolic interpolation, and was designed for use with
continuous functions. Convergence is never much slower
than that for a Fibonacci search. If `f`

has a continuous second
derivative which is positive at the minimum (which is not at `lower`

or
`upper`

), then convergence is superlinear, and usually of the
order of about 1.324.

The function `f`

is never evaluated at two points closer together
than \(\epsilon\)\( |x_0| + (tol/3)\), where
\(\epsilon\) is approximately `sqrt(.Machine$double.eps)`

and \(x_0\) is the final abscissa `optimize()$minimum`

.
If `f`

is a unimodal function and the computed values of `f`

are always unimodal when separated by at least \(\epsilon\)
\( |x| + (tol/3)\), then \(x_0\) approximates the abscissa of the
global minimum of `f`

on the interval `lower,upper`

with an
error less than \(\epsilon\)\( |x_0|+ tol\).
If `f`

is not unimodal, then `optimize()`

may approximate a
local, but perhaps non-global, minimum to the same accuracy.

The first evaluation of `f`

is always at
\(x_1 = a + (1-\phi)(b-a)\) where `(a,b) = (lower, upper)`

and
\(\phi = (\sqrt 5 - 1)/2 = 0.61803..\)
is the golden section ratio.
Almost always, the second evaluation is at
\(x_2 = a + \phi(b-a)\).
Note that a local minimum inside \([x_1,x_2]\) will be found as
solution, even when `f`

is constant in there, see the last
example.

`f`

will be called as `f(``x`, ...)

for a numeric value
of `x`.

The argument passed to `f`

has special semantics and used to be
shared between calls. The function should not copy it.