PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_opt_one_var_deriv (e04bb)
Purpose
nag_opt_one_var_deriv (e04bb) searches for a minimum, in a given finite interval, of a continuous function of a single variable, using function and first derivative values. The method (based on cubic interpolation) is intended for functions which have a continuous first derivative (although it will usually work if the derivative has occasional discontinuities).
Syntax
[
e1,
e2,
a,
b,
maxcal,
x,
f,
g,
user,
ifail] = e04bb(
funct,
e1,
e2,
a,
b,
maxcal, 'user',
user)
[
e1,
e2,
a,
b,
maxcal,
x,
f,
g,
user,
ifail] = nag_opt_one_var_deriv(
funct,
e1,
e2,
a,
b,
maxcal, 'user',
user)
Description
nag_opt_one_var_deriv (e04bb) is applicable to problems of the form:
when the first derivative
can be calculated. The function normally computes a sequence of
values which tend in the limit to a minimum of
subject to the given bounds. It also progressively reduces the interval
in which the minimum is known to lie. It uses the safeguarded cubic-interpolation method described in
Gill and Murray (1973).
You must supply a
funct to evaluate
and
. The arguments
e1 and
e2 together specify the accuracy
to which the position of the minimum is required. Note that
funct is never called at a point which is closer than
to a previous point.
If the original interval contains more than one minimum, nag_opt_one_var_deriv (e04bb) will normally find one of the minima.
References
Gill P E and Murray W (1973) Safeguarded steplength algorithms for optimization using descent methods NPL Report NAC 37 National Physical Laboratory
Parameters
Compulsory Input Parameters
- 1:
– function handle or string containing name of m-file
-
You must supply this function to calculate the values of and at any point in .
It should be tested separately before being used in conjunction with nag_opt_one_var_deriv (e04bb).
[fc, gc, user] = funct(xc, user)
Input Parameters
- 1:
– double scalar
-
The point at which the values of and are required.
- 2:
– Any MATLAB object
funct is called from
nag_opt_one_var_deriv (e04bb) with the object supplied to
nag_opt_one_var_deriv (e04bb).
Output Parameters
- 1:
– double scalar
-
Must be set to the value of the function at the current point .
- 2:
– double scalar
-
Must be set to the value of the first derivative at the current point .
- 3:
– Any MATLAB object
- 2:
– double scalar
-
The relative accuracy to which the position of a minimum is required. (Note that, since
e1 is a relative tolerance, the scaling of
is automatically taken into account.)
e1 should be no smaller than
, and preferably not much less than
, where
is the
machine precision.
- 3:
– double scalar
-
The absolute accuracy to which the position of a minimum is required.
e2 should be no smaller than
.
- 4:
– double scalar
-
The lower bound of the interval containing a minimum.
- 5:
– double scalar
-
The upper bound of the interval containing a minimum.
- 6:
– int64int32nag_int scalar
-
The maximum number of calls of
funct to be allowed.
Constraint:
. (Few problems will require more than
.)
There will be an error exit (see
Error Indicators and Warnings) after
maxcal calls of
funct
Optional Input Parameters
- 1:
– Any MATLAB object
user is not used by
nag_opt_one_var_deriv (e04bb), but is passed to
funct. Note that for large objects it may be more efficient to use a global variable which is accessible from the m-files than to use
user.
Output Parameters
- 1:
– double scalar
-
If you set
e1 to
(or to any value less than
),
e1 will be reset to the default value
before starting the minimization process.
- 2:
– double scalar
-
If you set
e2 to
(or to any value less than
),
e2 will be reset to the default value
.
- 3:
– double scalar
-
An improved lower bound on the position of the minimum.
- 4:
– double scalar
-
An improved upper bound on the position of the minimum.
- 5:
– int64int32nag_int scalar
-
The total number of times that
funct was actually called.
- 6:
– double scalar
-
The estimated position of the minimum.
- 7:
– double scalar
-
The function value at the final point given in
x.
- 8:
– double scalar
-
The value of the first derivative at the final point in
x.
- 9:
– Any MATLAB object
- 10:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
Note: nag_opt_one_var_deriv (e04bb) may return useful information for one or more of the following detected errors or warnings.
Errors or warnings detected by the function:
Cases prefixed with W are classified as warnings and
do not generate an error of type NAG:error_n. See nag_issue_warnings.
- W
-
On entry, | , |
or | . |
- W
-
The number of calls of
funct has exceeded
maxcal. This may have happened simply because
maxcal was set too small for a particular problem, or may be due to a mistake in
funct. If no mistake can be found in
funct, restart
nag_opt_one_var_deriv (e04bb) (preferably with the values of
a and
b given on exit from the previous call of
nag_opt_one_var_deriv (e04bb)).
-
An unexpected error has been triggered by this routine. Please
contact
NAG.
-
Your licence key may have expired or may not have been installed correctly.
-
Dynamic memory allocation failed.
Accuracy
If is -unimodal for some , where , then, on exit, approximates the minimum of in the original interval with an error less than .
Further Comments
Timing depends on the behaviour of
, the accuracy demanded and the length of the interval
. Unless
and
can be evaluated very quickly, the run time will usually be dominated by the time spent in
funct.
If has more than one minimum in the original interval , nag_opt_one_var_deriv (e04bb) will determine an approximation (and improved bounds and ) for one of the minima.
If
nag_opt_one_var_deriv (e04bb) finds an
such that
for some
, the interval
will be regarded as containing a minimum, even if
is less than
and
only due to rounding errors in the function. Therefore
funct should be programmed to calculate
as accurately as possible, so that
nag_opt_one_var_deriv (e04bb) will not be liable to find a spurious minimum. (For similar reasons,
should be evaluated as accurately as possible.)
Example
A sketch of the function
shows that it has a minimum somewhere in the range
. The following program shows how
nag_opt_one_var_deriv (e04bb) can be used to obtain a good approximation to the position of a minimum.
Open in the MATLAB editor:
e04bb_example
function e04bb_example
fprintf('e04bb example results\n\n');
e1 = 0;
e2 = 0;
a = 3.5;
b = 5;
maxcal = int64(30);
[e1, e2, a, b, maxcal, x, f, g, user, ifail] = ...
e04bb( ...
@funct, e1, e2, a, b, maxcal);
fprintf('The minimum lies in the interval [%11.8f,%11.8f]\n', a, b);
fprintf('Estimated position of minimum, x = %11.8f\n', x);
fprintf('Function value at minimum, f(x) = %7.4f\n', f);
fprintf('Gradient value at minimum, f''(x) = %8.1e\n', g);
fprintf('Number of function evaluations = %2d\n', maxcal);
function [fc,gc,user] = funct(xc,user)
fc=sin(xc)/xc;
gc=(cos(xc)-fc)/xc;
e04bb example results
The minimum lies in the interval [ 4.49340946, 4.49340952]
Estimated position of minimum, x = 4.49340946
Function value at minimum, f(x) = -0.2172
Gradient value at minimum, f'(x) = -3.8e-16
Number of function evaluations = 6
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015