29 #if defined(DEBUG) || defined(WARNINGMSG)
41 FunctionMinimum ModularFunctionMinimizer::Minimize(
const FCNBase& fcn,
const std::vector<double>& par,
const std::vector<double>& err,
unsigned int stra,
unsigned int maxfcn,
double toler)
const {
43 MnUserParameterState st(par, err);
44 MnStrategy strategy(stra);
45 return Minimize(fcn, st, strategy, maxfcn, toler);
48 FunctionMinimum ModularFunctionMinimizer::Minimize(
const FCNGradientBase& fcn,
const std::vector<double>& par,
const std::vector<double>& err,
unsigned int stra,
unsigned int maxfcn,
double toler)
const {
51 MnUserParameterState st(par, err);
52 MnStrategy strategy(stra);
53 return Minimize(fcn, st, strategy, maxfcn, toler);
57 FunctionMinimum ModularFunctionMinimizer::Minimize(
const FCNBase& fcn,
const std::vector<double>& par,
unsigned int nrow,
const std::vector<double>& cov,
unsigned int stra,
unsigned int maxfcn,
double toler)
const {
61 MnUserParameterState st(par, cov, nrow);
62 MnStrategy strategy(stra);
63 return Minimize(fcn, st, strategy, maxfcn, toler);
66 FunctionMinimum ModularFunctionMinimizer::Minimize(
const FCNGradientBase& fcn,
const std::vector<double>& par,
unsigned int nrow,
const std::vector<double>& cov,
unsigned int stra,
unsigned int maxfcn,
double toler)
const {
71 MnUserParameterState st(par, cov, nrow);
72 MnStrategy strategy(stra);
73 return Minimize(fcn, st, strategy, maxfcn, toler);
76 FunctionMinimum ModularFunctionMinimizer::Minimize(
const FCNBase& fcn,
const MnUserParameters& upar,
const MnStrategy& strategy,
unsigned int maxfcn,
double toler)
const {
79 MnUserParameterState st(upar);
80 return Minimize(fcn, st, strategy, maxfcn, toler);
83 FunctionMinimum ModularFunctionMinimizer::Minimize(
const FCNGradientBase& fcn,
const MnUserParameters& upar,
const MnStrategy& strategy,
unsigned int maxfcn,
double toler)
const {
86 MnUserParameterState st(upar);
87 return Minimize(fcn, st, strategy, maxfcn, toler);
90 FunctionMinimum ModularFunctionMinimizer::Minimize(
const FCNBase& fcn,
const MnUserParameters& upar,
const MnUserCovariance& cov,
const MnStrategy& strategy,
unsigned int maxfcn,
double toler)
const {
93 MnUserParameterState st(upar, cov);
94 return Minimize(fcn, st, strategy, maxfcn, toler);
97 FunctionMinimum ModularFunctionMinimizer::Minimize(
const FCNGradientBase& fcn,
const MnUserParameters& upar,
const MnUserCovariance& cov,
const MnStrategy& strategy,
unsigned int maxfcn,
double toler)
const {
101 MnUserParameterState st(upar, cov);
102 return Minimize(fcn, st, strategy, maxfcn, toler);
107 FunctionMinimum ModularFunctionMinimizer::Minimize(
const FCNBase& fcn,
const MnUserParameterState& st,
const MnStrategy& strategy,
unsigned int maxfcn,
double toler)
const {
113 MnUserFcn mfcn(fcn, st.Trafo() );
114 Numerical2PGradientCalculator gc(mfcn, st.Trafo(), strategy);
116 unsigned int npar = st.VariableParameters();
117 if(maxfcn == 0) maxfcn = 200 + 100*npar + 5*npar*npar;
118 MinimumSeed mnseeds = SeedGenerator()(mfcn, gc, st, strategy);
120 return Minimize(mfcn, gc, mnseeds, strategy, maxfcn, toler);
125 FunctionMinimum ModularFunctionMinimizer::Minimize(
const FCNGradientBase& fcn,
const MnUserParameterState& st,
const MnStrategy& strategy,
unsigned int maxfcn,
double toler)
const {
131 MnUserFcn mfcn(fcn, st.Trafo());
132 AnalyticalGradientCalculator gc(fcn, st.Trafo());
134 unsigned int npar = st.VariableParameters();
135 if(maxfcn == 0) maxfcn = 200 + 100*npar + 5*npar*npar;
137 MinimumSeed mnseeds = SeedGenerator()(mfcn, gc, st, strategy);
139 return Minimize(mfcn, gc, mnseeds, strategy, maxfcn, toler);
143 FunctionMinimum ModularFunctionMinimizer::Minimize(
const MnFcn& mfcn,
const GradientCalculator& gc,
const MinimumSeed& seed,
const MnStrategy& strategy,
unsigned int maxfcn,
double toler)
const {
147 const MinimumBuilder & mb = Builder();
149 double effective_toler = toler * mfcn.Up();
151 double eps = MnMachinePrecision().Eps2();
152 if (effective_toler < eps) effective_toler = eps;
156 if(mfcn.NumOfCalls() >= maxfcn) {
158 MN_INFO_MSG(
"ModularFunctionMinimizer: Stop before iterating - call limit already exceeded");
160 return FunctionMinimum(seed, std::vector<MinimumState>(1, seed.State()), mfcn.Up(), FunctionMinimum::MnReachedCallLimit());
166 return mb.Minimum(mfcn, gc, seed, strategy, maxfcn, effective_toler);