NAG Library Function Document
nag_opt_one_var_no_deriv (e04abc)
1 Purpose
nag_opt_one_var_no_deriv (e04abc) searches for a minimum, in a given finite interval, of a continuous function of a single variable, using function values only. The method (based on quadratic interpolation) is intended for functions which have a continuous first derivative (although it will usually work if the derivative has occasional discontinuities).
2 Specification
#include <nag.h> |
#include <nage04.h> |
void |
nag_opt_one_var_no_deriv (
double e1,
double e2,
double *a,
double *b,
Integer max_fun,
double *x,
double *f,
Nag_Comm *comm,
NagError *fail) |
|
3 Description
nag_opt_one_var_no_deriv (e04abc) is applicable to problems of the form:
It 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 quadratic-interpolation method described in
Gill and Murray (1973).
You must supply a function
funct to evaluate
. 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 any point which is closer than
to a previous point.
If the original interval contains more than one minimum, nag_opt_one_var_no_deriv (e04abc) will normally find one of the minima.
4 References
Gill P E and Murray W (1973) Safeguarded steplength algorithms for optimization using descent methods NPL Report NAC 37 National Physical Laboratory
5 Arguments
- 1:
funct – function, supplied by the userExternal Function
-
funct must calculate the value of
at any point
in
.
The specification of
funct is:
void |
funct (double xc,
double *fc,
Nag_Comm *comm)
|
|
- 1:
xc – doubleInput
-
On entry: , the point at which the value of is required.
- 2:
fc – double *Output
-
On exit: the value of the function at the current point .
- 3:
comm – Nag_Comm *
-
Pointer to structure of type Nag_Comm; the following members are relevant to
funct.
- first – Nag_BooleanInput
-
On entry: will be set to Nag_TRUE on the first call to
funct and Nag_FALSE for all subsequent calls.
- nf – IntegerInput
-
On entry: the number of calls made to
funct so far.
- user – double *
- iuser – Integer *
- p – Pointer
-
The type Pointer will be
void * with a C compiler that defines
void * and
char * otherwise. Before calling nag_opt_one_var_no_deriv (e04abc) these pointers may be allocated memory and initialized with various quantities for use by
funct when called from nag_opt_one_var_no_deriv (e04abc).
Note: funct should be tested separately before being used in conjunction with nag_opt_one_var_no_deriv (e04abc).
- 2:
e1 – doubleInput
-
On entry: 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.)
It is recommended that
e1 should be no smaller than
, and preferably not much less than
, where
is the
machine precision.
If
e1 is set to a value less than
, its value is ignored and the default value of
is used instead. In particular, you may set
to ensure that the default value is used.
- 3:
e2 – doubleInput
-
On entry: the absolute accuracy to which the position of a minimum is required. It is recommended that
e2 should be no smaller than
.
If
e2 is set to a value less than
, its value is ignored and the default value of
is used instead. In particular, you may set
to ensure that the default value is used.
- 4:
a – double *Input/Output
-
On entry: the lower bound of the interval containing a minimum.
On exit: an improved lower bound on the position of the minimum.
- 5:
b – double *Input/Output
-
On entry: the upper bound of the interval containing a minimum.
On exit: an improved upper bound on the position of the minimum.
Constraint:
.
Note that the value applies here if on entry to nag_opt_one_var_no_deriv (e04abc).
- 6:
max_fun – IntegerInput
-
On entry: the maximum number of function evaluations (calls to
funct) which you are prepared to allow.
The number of evaluations actually performed by nag_opt_one_var_no_deriv (e04abc) may be determined by supplying a non-NULL argument
comm (see below) and examining the structure member
on exit.
Constraint:
.
(Few problems will require more than 30 function evaluations.)
- 7:
x – double *Output
-
On exit: the estimated position of the minimum.
- 8:
f – double *Output
-
On exit: the value of
at the final point
x.
- 9:
comm – Nag_Comm *Input/Output
-
Note: comm is a NAG defined type (see
Section 3.2.1.1 in the Essential Introduction).
On entry/exit: structure containing pointers for communication to user-supplied functions; see the above description of
funct for details. The number of times the function
funct was called is returned in the member
.
If you do not need to make use of this communication feature, the null pointer
NAGCOMM_NULL may be used in the call to nag_opt_one_var_no_deriv (e04abc);
comm will then be declared internally for use in calls to user-supplied functions.
- 10:
fail – NagError *Input/Output
-
The NAG error argument (see
Section 3.6 in the Essential Introduction).
6 Error Indicators and Warnings
- NE_2_REAL_ARG_GE
-
On entry, while . These arguments must satisfy .
- NE_INT_ARG_LT
-
On entry,
max_fun must not be less than 3:
.
- NW_MAX_FUN
-
The maximum number of function calls,
, have been performed.
This may have happened simply because
max_fun was set too small for a particular problem, or may be due to a mistake in the user-supplied function,
funct. If no mistake can be found in
funct, restart nag_opt_one_var_no_deriv (e04abc) (preferably with the values of
a and
b given on exit from the previous call to nag_opt_one_var_no_deriv (e04abc)).
7 Accuracy
If is -unimodal for some , where , then, on exit, approximates the minimum of in the original interval with an error less than .
8 Parallelism and Performance
Not applicable.
Timing depends on the behaviour of
, the accuracy demanded, and the length of the interval
. Unless
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_no_deriv (e04abc) will determine an approximation (and improved bounds and ) for one of the minima.
If nag_opt_one_var_no_deriv (e04abc) 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 user-supplied function. Therefore
funct should be programmed to calculate
as accurately as possible, so that nag_opt_one_var_no_deriv (e04abc) will not be liable to find a spurious minimum.
10 Example
A sketch of the function
shows that it has a minimum somewhere in the range
. The example program below shows how nag_opt_one_var_no_deriv (e04abc) can be used to obtain a good approximation to the position of a minimum.
10.1 Program Text
Program Text (e04abce.c)
10.2 Program Data
None.
10.3 Program Results
Program Results (e04abce.r)