The minimizing technique currently implemented in [MIGrad]MIGRAD is a stable variation (the ``switching'' method) of the Davidon-Fletcher-Powell variable-metric algorithm. This algorithm converges to the correct error matrix as it converges to the function minimum.
This algorithm requires at each step a ``working approximation'' of the error matrix, and a rather good approximation to the gradient vector at the current best point. The starting approximation to the error matrix may be obtained in different ways, depending on the status of the error matrix before MIGRAD is called as well as the value of STRATEGY. Usually it is found to be advantageous to evaluate the error matrix rather carefully at the start point in order to avoid premature convergence, but in principle even the unit matrix can be used as a starting approximation. Usually the Minuit default is to start by calculating the full error matrix by calculating all the second derivatives and inverting the matrix. If the user wants to make sure this is done, he can call HESSE before MIGRAD.
If a unit matrix is taken to start, then the first step will be in a steepest descent direction, which is not bad, but the estimate of EDM, needed to judge convergence, will be poor. At each successive step, the information gathered from the change of gradient is used to improve the approximation to the error matrix, without the need to calculate any second derivatives or invert any matrices. The algorithm used for this updating is supposed to be the best known, but if there are a lot of highly correlated parameters, it may take many steps before the off-diagonal elements of the error matrix approach the correct values.
In practice, [MIGrad]MIGRAD usually yields good estimates of the error matrix, but it is not absolutely reliable for two reasons:
If [MIGrad]MIGRAD errors are wrong because of (1), [HESse]HESSE should be commanded after [MIGrad]MIGRAD and will give the correct errors. If [MIGrad]MIGRAD errors are wrong because of (2), [HESse]HESSE will help, but only in an academic sense, since in this case the error matrix is not the whole story and for proper error calculation [MINos]MINOS must be used.
As a general rule, anyone seriously interested in the parameter errors should always put at least a [HESse]HESSE command after each [MIGrad]MIGRAD (or [MINImize]MINIMIZE) command.