Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
FumiliFCNBase.h
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
10#ifndef ROOT_Minuit2_FumiliFCNBase
11#define ROOT_Minuit2_FumiliFCNBase
12
13#include "Minuit2/FCNBase.h"
14#include <cassert>
15#include <vector>
16
17namespace ROOT {
18
19namespace Minuit2 {
20
21//____________________________________________________________________________________________
22/**
23
24Extension of the FCNBase for the Fumili method. Fumili applies only to
25minimization problems used for fitting. The method is based on a
26linearization of the model function negleting second derivatives.
27User needs to provide the model function. The figure-of-merit describing
28the difference between the model function and the actual measurements
29has to be implemented by the user in a subclass of FumiliFCNBase.
30For an example see the FumiliChi2FCN and FumiliStandardChi2FCN classes.
31
32
33@author Andras Zsenei and Lorenzo Moneta, Creation date: 23 Aug 2004
34
35@see <A HREF="http://www.cern.ch/winkler/minuit/tutorial/mntutorial.pdf">MINUIT Tutorial</A> on function minimization,
36section 5
37
38@see FumiliChi2FCN
39
40@see FumiliStandardChi2FCN
41
42@ingroup Minuit
43
44 */
45
46class FumiliFCNBase : public FCNBase {
47
48public:
49 /**
50 Default Constructor. Need in this case to create when implementing EvaluateAll the Gradient and Hessian vectors
51 with the right size
52 */
53
55
56 bool HasGradient() const override { return true; }
57
58 /**
59
60 Constructor which initializes the class with the function provided by the
61 user for modeling the data.
62
63 @param npar the number of parameters
64
65 */
66
67 FumiliFCNBase(unsigned int npar)
68 : fNumberOfParameters(npar), fValue(0), fGradient(std::vector<double>(npar)),
69 fHessian(std::vector<double>(static_cast<int>(0.5 * npar * (npar + 1))))
70 {
71 }
72
73
74 /**
75
76 Evaluate function Value, Gradient and Hessian using Fumili approximation, for values of parameters p
77 The result is cached inside and is return from the FumiliFCNBase::Value , FumiliFCNBase::Gradient and
78 FumiliFCNBase::Hessian methods
79
80 @param par vector of parameters
81
82 **/
83
84 virtual void EvaluateAll(std::vector<double> const& par) = 0;
85
86 /**
87 Return cached Value of objective function estimated previously using the FumiliFCNBase::EvaluateAll method
88
89 **/
90
91 virtual double Value() const { return fValue; }
92
93 /**
94 Return cached Value of function Gradient estimated previously using the FumiliFCNBase::EvaluateAll method
95 **/
96
97 virtual const std::vector<double> &Gradient() const { return fGradient; }
98 std::vector<double> Gradient(std::vector<double> const&) const override { return fGradient;}
99
100 /**
101 Return Value of the i-th j-th element of the Hessian matrix estimated previously using the
102 FumiliFCNBase::EvaluateAll method
103 @param row row Index of the matrix
104 @param col col Index of the matrix
105 **/
106
107 std::vector<double> Hessian(std::vector<double> const&) const override { return fHessian;}
108 virtual double Hessian(unsigned int row, unsigned int col) const
109 {
110 assert(row < fGradient.size() && col < fGradient.size());
111 if (row > col)
112 return fHessian[col + row * (row + 1) / 2];
113 else
114 return fHessian[row + col * (col + 1) / 2];
115 }
116
117 /**
118 return number of function variable (parameters) , i.e. function dimension
119 */
120
121 virtual unsigned int Dimension() { return fNumberOfParameters; }
122
123protected:
124 /**
125 initialize and reset values of gradien and Hessian
126 */
127
128 virtual void InitAndReset(unsigned int npar)
129 {
131 fGradient = std::vector<double>(npar);
132 fHessian = std::vector<double>(static_cast<int>(0.5 * npar * (npar + 1)));
133 }
134
135 // methods to be used by the derived classes to set the values
136 void SetFCNValue(double value) { fValue = value; }
137
138 std::vector<double> &Gradient() { return fGradient; }
139
140 std::vector<double> &Hessian() { return fHessian; }
141
142private:
144 double fValue;
145 std::vector<double> fGradient;
146 std::vector<double> fHessian;
147};
148
149} // namespace Minuit2
150
151} // namespace ROOT
152
153#endif // ROOT_Minuit2_FumiliFCNBase
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Interface (abstract class) defining the function to be minimized, which has to be implemented by the ...
Definition FCNBase.h:49
Extension of the FCNBase for the Fumili method.
FumiliFCNBase()
Default Constructor.
bool HasGradient() const override
std::vector< double > Gradient(std::vector< double > const &) const override
std::vector< double > & Hessian()
virtual double Value() const
Return cached Value of objective function estimated previously using the FumiliFCNBase::EvaluateAll m...
std::vector< double > fGradient
std::vector< double > Hessian(std::vector< double > const &) const override
Return Value of the i-th j-th element of the Hessian matrix estimated previously using the FumiliFCNB...
virtual const std::vector< double > & Gradient() const
Return cached Value of function Gradient estimated previously using the FumiliFCNBase::EvaluateAll me...
std::vector< double > fHessian
virtual void InitAndReset(unsigned int npar)
initialize and reset values of gradien and Hessian
void SetFCNValue(double value)
virtual void EvaluateAll(std::vector< double > const &par)=0
Evaluate function Value, Gradient and Hessian using Fumili approximation, for values of parameters p ...
virtual unsigned int Dimension()
return number of function variable (parameters) , i.e.
FumiliFCNBase(unsigned int npar)
Constructor which initializes the class with the function provided by the user for modeling the data.
virtual double Hessian(unsigned int row, unsigned int col) const
std::vector< double > & Gradient()
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...