Finds the minimum of a function in one dimension (R.W. Payne).

### Options

`PRINT` = string tokens |
What output to produce (`minimum` , `monitoring` , `plot` ); default `mini` |
---|---|

`CALCULATION` = expression structures |
Expressions to calculate the target function |

`FUNCTIONVALUE` = scalars |
Identifier of the scalar, calculated by `CALCULATION` , whose value is to be minimized |

`DATA` = any type |
Data to be used with procedure `_MIN1DFUNCTION` |

`CRITERION` = string token |
Criterion for convergence (`function` , `parameters` ); default `func` |

`MAXCYCLE` = scalars |
Maximum number of iterations; default 250 |

`EXIT` = scalars |
Indicates whether there has been convergence (0) or non-convergence (1) |

`TOLERANCE` = scalars |
Convergence criterion; default 10^{-6} or variate |

### Parameters

`PARAMETER` = scalars |
Parameters to be estimated |
---|---|

`LOWER` = scalars |
Lower bound for each parameter |

`UPPER` = scalars |
Upper bound for each parameter |

`STEPLENGTH` = scalars |
Step length for each parameter |

`INITIAL` = scalars |
Initial value for each parameter |

### Description

`MIN1DIMENSION`

searches for the minimum of a function in one dimension. The parameters to be estimated by the minimization are listed by the `PARAMETER`

parameter of `MIN1DIMENSION`

. Step lengths and initial values must be supplied using the `STEPLENGTH`

and `INITIAL`

parameters. When there are several parameters, these also define the dimension in the parameter space over which the function is minimized. Within each step of the minimization, the same multiple is used for the step length of every parameter. So the dimension is defined as the set of parameter values that can be calculated as

`PARAMETER[1...p] = INITIAL[1...p] + Move * STEPLENGTH[1...p]`

where `Move`

is a scalar, and `p`

is the number of parameters. You can also specify lower bounds with the `LOWER`

parameter, and upper bounds with the `UPPER`

parameter.

The function can be defined by specifying a list of Genstat calculation structures with the `CALCULATION`

option, similarly to the way in which functions for optimization are specified for the `FITNONLINEAR`

directive (see the *Guide to the Genstat Command Language, Part 2 Statistics*, Section 3.8). For example, you could find the minimum of the function `5*X-25*LOG(X)`

as follows.

`EXPRESSION Calc; VALUE=!e(Fx = 5 * X - 25 * LOG(X))`

`MIN1DIMENSION [PRINT=minimum,monitor,plot; EXIT=exit;\`

` CALCULATION=Calc; FUNCTIONVALUE=Fx]\`

` X; STEPLENGTH=1; INITIAL=1; LOWER=0.001`

Alternatively, more complicated functions can be specified by defining a procedure `_MIN1DFUNCTION`

, which operates similarly to the `RESAMPLE`

procedure that is called by procedures `BOOTSTRAP`

and `JACKKNIFE`

. This is more complicated to specify, but it has the advantage that you can use any Genstat command to obtain the function value (e.g. `ANOVA`

, `FIT`

, `SVD`

and so on). The `DATA`

option is then used to list any data structures that are needed by `_MIN1DFUNCTION`

to calculate the value of the function. Details are given in the Methods Section.

The `PRINT`

option controls printed output with the settings:

`minimum` |
to print the minimum function value and parameter values, |
---|---|

`monitoring` |
to print to monitor information showing the progress of the minimization, and |

`plot` |
to plot the function values around the initial values. |

By default, `PRINT=minimum`

.

The scalars specified by the `PARAMETER`

parameter save the estimated values of the parameters, and the `FUNCTIONVALUE`

scalar saves the minimum value. You can also save a scalar, using the `EXIT`

option, which is set to 0 if the minimization was successful or to 1 if it did not converge.

The `MAXCYCLE`

option sets a limit on the number of iterations; by default this is 250. The `TOLERANCE`

option specifies the tolerance for convergence (default 10^{-6}), and the `CRITERION`

option specifies what is tested. When `CRITERION=function`

, convergence is achieved when the current function evaluations differ by less than the (scalar) value supplied by `TOLERANCE`

. Alternatively, when `CRITERION=parameters`

, the parameter values at the current evaluations must differ by less than `TOLERANCE`

, which can then be set to either a scalar (to use the same tolerance with every parameter) or a variate (for different tolerances).

Options: `PRINT`

, `CALCULATION`

, `FUNCTIONVALUE`

, `DATA`

, `CRITERION`

, `MAXCYCLE`

, `EXIT`

, `TOLERANCE`

.

Parameters: `PARAMETER`

, `LOWER`

, `UPPER`

, `STEPLENGTH`

, `INITIAL`

.

### Method

`MIN1DIMENSION`

performs a series of iterations in which three points are moved in the one dimension to locate the minimum. The idea is that the two outer points should bracket the minimum, while the inner point locates it.

The procedure `_MIN1DFUNCTION`

, which you can use to calculate the function instead of the `CALCULATION`

and `FUNCTIONVALUE`

options, has two options. `DATA`

supplies a pointer containing the data structures specified by the `DATA`

option of `MIN1DIMENSION`

(so, `DATA[1]`

is the first of these structures, `DATA[2]`

is the second, and so on). `FUNCTIONVALUE`

is a scalar, which should be set to the function value. There is one parameter, called `PARAMETER`

. The `PROCEDURE`

statement that defines `_MIN1DFUNCTION`

should set option `PARAMETER=pointer`

. The parameters of the function can then be referred to as `PARAMETER[1]`

, `PARAMETER[2]`

, and so on (and these will be in the same order as in the `PARAMETER`

parameter of `MIN1DIMENSION`

). The definition below has the same effect as the expression

`EXPRESSION Calc; VALUE=!e(Fx = 5 * X - 25 * LOG(X))`

shown in the description.

`PROCEDURE [PARAMETER=pointer] '_MIN1DFUNCTION'`

`" calculates the function for MIN1DIMENSION "`

`OPTION NAME=\`

` 'DATA', "(I: pointer) data to calculate the function"\`

` 'FUNCTIONVALUE'; "(O: scalar) returns the function value"\`

` MODE=p; TYPE='pointer','scalar'`

`PARAMETER NAME=\`

` 'PARAMETER'; "(I: scalar) parameter values"\`

` MODE=p; TYPE='scalar'; SET=yes; DECLARED=yes; PRESENT=yes`

`CALCULATE FUNCTIONVALUE = 5*PARAMETER[1] - 25*LOG(PARAMETER[1])`

`ENDPROCEDURE`

The parameter X can then be estimated by the statement

`MIN1DIMENSION [PRINT=minimum,monitor,plot; EXIT=exit]\`

` X; STEPLENGTH=1; INITIAL=1; LOWER=0.001`

### Action with `RESTRICT`

The effects of restrictions on the data variables will depend on how the calculation is defined (by the `CALCULATION`

option or within the `_MIN1DFUNCTION`

procedure).

### See also

Directive: `FITNONLINEAR`

.

Procedures: `DEMC`

, `FPARETOSET`

, `MINIMIZE`

, `SIMPLEX`

.

Commands for: Regression analysis.

### Example

CAPTION 'MIN1DIMENSION examples',\ 'Define the function using the CALCULATION option';\ STYLE=meta,plain EXPRESSION Calc; VALUE=!e(Fx = 5 * X - 25 * LOG(X)) MIN1DIMENSION [PRINT=minimum,monitor,plot; EXIT=exit;\ CALCULATION=Calc; FUNCTIONVALUE=Fx]\ X; STEPLENGTH=1; INITIAL=1; LOWER=0.001 CAPTION 'Define the function using the _MIN1DFUNCTION procedure' PROCEDURE [PARAMETER=pointer] '_MIN1DFUNCTION' " calculates the function for MIN1DIMENSION " OPTION NAME=\ 'DATA', "(I: pointer) data to calculate the function"\ 'FUNCTIONVALUE';"(O: scalar) returns the function value"\ MODE=p; TYPE='pointer','scalar' PARAMETER NAME=\ 'PARAMETER'; "(I: scalar) parameter values"\ MODE=p; TYPE='scalar'; SET=yes; DECLARED=yes; PRESENT=yes CALCULATE FUNCTIONVALUE = 5 * PARAMETER[1] - 25 * LOG(PARAMETER[1]) ENDPROCEDURE MIN1DIMENSION [PRINT=minimum,monitor,plot; EXIT=exit]\ X; STEPLENGTH=1; INITIAL=1; LOWER=0.001