Logo ROOT  
Reference Guide
SimplexSeedGenerator.cxx
Go to the documentation of this file.
1// @(#)root/minuit2:$Id$
2// Authors: M. Winkler, F. James, L. Moneta, A. Zsenei 2003-2005
3
4/**********************************************************************
5 * *
6 * Copyright (c) 2005 LCG ROOT Math team, CERN/PH-SFT *
7 * *
8 **********************************************************************/
9
12#include "Minuit2/MnFcn.h"
13#include "Minuit2/MinimumSeed.h"
14#include "Minuit2/MnStrategy.h"
17
18namespace ROOT {
19
20namespace Minuit2 {
21
23operator()(const MnFcn &fcn, const GradientCalculator &, const MnUserParameterState &st, const MnStrategy &stra) const
24{
25 // create starting state for Simplex, which corresponds to the initial parameter values
26 // using the simple Initial gradient calculator (does not use any FCN function calls)
27 unsigned int n = st.VariableParameters();
28 const MnMachinePrecision &prec = st.Precision();
29
30 // initial starting values
32 for (unsigned int i = 0; i < n; i++)
33 x(i) = st.IntParameters()[i];
34 double fcnmin = fcn(x);
35 MinimumParameters pa(x, fcnmin);
36 InitialGradientCalculator igc(fcn, st.Trafo(), stra);
37 FunctionGradient dgrad = igc(pa);
39 double dcovar = 1.;
40 for (unsigned int i = 0; i < n; i++)
41 mat(i, i) = (std::fabs(dgrad.G2()(i)) > prec.Eps2() ? 1. / dgrad.G2()(i) : 1.);
42 MinimumError err(mat, dcovar);
43 double edm = VariableMetricEDMEstimator().Estimate(dgrad, err);
44 MinimumState state(pa, err, dgrad, edm, fcn.NumOfCalls());
45
46 return MinimumSeed(state, st.Trafo());
47}
48
50 const MnUserParameterState &st, const MnStrategy &stra) const
51{
52 // base class interface
53 return (*this)(fcn, (const GradientCalculator &)(gc), st, stra);
54}
55
56} // namespace Minuit2
57
58} // namespace ROOT
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void gc
const MnAlgebraicVector & G2() const
interface class for gradient calculators
Class to calculate an initial estimate of the gradient.
Class describing a symmetric matrix of size n.
Definition: LASymMatrix.h:45
MinimumError keeps the inv.
Definition: MinimumError.h:28
MinimumState keeps the information (position, Gradient, 2nd deriv, etc) after one minimization step (...
Definition: MinimumState.h:27
Wrapper class to FCNBase interface used internally by Minuit.
Definition: MnFcn.h:30
unsigned int NumOfCalls() const
Definition: MnFcn.h:39
Sets the relative floating point (double) arithmetic precision.
double Eps2() const
eps2 returns 2*sqrt(eps)
API class for defining three levels of strategies: low (0), medium (1), high (>=2); acts on: Migrad (...
Definition: MnStrategy.h:27
class which holds the external user and/or internal Minuit representation of the parameters and error...
const MnMachinePrecision & Precision() const
const std::vector< double > & IntParameters() const
const MnUserTransformation & Trafo() const
MinimumSeed operator()(const MnFcn &, const GradientCalculator &, const MnUserParameterState &, const MnStrategy &) const override
double Estimate(const FunctionGradient &, const MinimumError &) const
Double_t x[n]
Definition: legend1.C:17
const Int_t n
Definition: legend1.C:16
VecExpr< UnaryOp< Fabs< T >, VecExpr< A, T, D >, T >, T, D > fabs(const VecExpr< A, T, D > &rhs)
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.