MINUIT command

Syntax: MINUIT y=expression
MINUIT expression
MINUIT\UPDATE yf
Qualifiers: \MINIMIZE, \MIGRAD, \SIMPLEX, \UPDATE, \WEIGHTS, \CHISQ, \VARNAMES, \MESSAGES
Defaults: \MINIMIZE, \-WEIGHTS, \-CHISQ, \-VARNAMES, \MESSAGES
Examples: MINUIT Y=A*X+B
MINUIT\WEIGHTS W Y=A*EXP(-B*X)+C
MINUIT\UPDATE YF

This command accesses the CERN Minuit package for function minimization and error analysis. The command is very similar to the FITcommand. The variable parameters are defined with the SCALAR\FIT command. The expression to be fitted must result in a vector with the same length as the data variable y.

For detailed information on Minuit, please refer to the Minuit Home Page at http://seal.web.cern.ch/seal/work-packages/mathlibs/minuit/home.html

This implementation is open to suggestions from users for enhancements.

If your expression calculates the chi-square value, you can just enter the expression, instead of the usual y=expression.

Method

By default, or with the \MINIMIZE qualifier, the MIGRAD method is tried first, and if that fails to converge, the SIMPLEX method will be tried and then the MIGRAD method again.

If the \MIGRAD qualifier is used, the MIGRAD method is used, which "is the best minimizer for nearly all functions. It is a variable-metric method with inexact line search, a stable metric updating scheme, and checks for positive-definiteness.... Its main weakness is that it depends heavily on knowledge of the first derivatives, and fails miserably if they are very inaccurate."

If the \SIMPLEX qualifier is used, the SIMPLEX method is used. "This genuine multidimensional minimization routine is uusually much slower than MIGRAD, but it does not use first derivatives".

Fitting parameters

There is no maximum number of fitting parameters allowed in the expression, but fifteen (15) parameters is probably a practical limit. Variable fitting parameters are created with the SCALAR\FIT command, and can be converted to fixed value scalar variables with the SCALAR command. If the \VARNAMES qualifier is used, an array text variable named FIT$VAR will be made which will contain the names of the fitting parameter variables. The array length of FIT$VAR will be equal to the number of fitting parameters.

The SCALAR command allows for limits to be placed on a fitting parameter. Use the a[amin:amax] syntax to create fit parameter a with lower limit amin and upper limit amax. To set an upper limit only, use a[:amax], and to set a lower limit only, use a[amin:]. These limits are only used by the MINUIT command and are ignored by the FIT command.

Weights

The \WEIGHTS qualifier must be used if you want to enter a vector of weights. The optional weight vector will then be expected. The weights are assigned to the dependent variable in a one-to-one fashion, so the length of the weight vector must be the same as the length of the data vectors.

χ2

If the \CHISQ qualifier is used, a scalar named FIT$CHISQ will be made with value equal to the total chi-square. The chi-square is calculated as sum(w*(y-expression)^2) where w is the weight vector, y is the data vector, and expression contains the variable parameters to be fitted.

Output messages

If the \-MESSAGES qualifier is used, then there will be no informational messages output to the display window.

Update after a fit

The MINUIT\UPDATE yout command evaluates the previously fitted expression, that is, the expression in the last MINUIT command, for the current parameter values, and stores this result in the vector yout.

This is exactly equivalent to entering: yout=previously_fitted_expression
and is provided only to obviate the necessity of re-entering a complicated expression.

Note: The vector name yout usually differs from the name of the vector being fitted to avoid destroying the original data.