23 MinimumSeed SimplexSeedGenerator::operator()(
const MnFcn& fcn,
const GradientCalculator&,
const MnUserParameterState& st,
const MnStrategy& stra)
const {
26 unsigned int n = st.VariableParameters();
27 const MnMachinePrecision& prec = st.Precision();
30 MnAlgebraicVector x(n);
31 for(
unsigned int i = 0; i < n; i++) x(i) = st.IntParameters()[i];
32 double fcnmin = fcn(x);
33 MinimumParameters pa(x, fcnmin);
34 InitialGradientCalculator igc(fcn, st.Trafo(), stra);
35 FunctionGradient dgrad = igc(pa);
36 MnAlgebraicSymMatrix mat(n);
38 for(
unsigned int i = 0; i < n; i++)
39 mat(i,i) = (fabs(dgrad.G2()(i)) > prec.Eps2() ? 1./dgrad.G2()(i) : 1.);
40 MinimumError err(mat, dcovar);
41 double edm = VariableMetricEDMEstimator().Estimate(dgrad, err);
42 MinimumState state(pa, err, dgrad, edm, fcn.NumOfCalls());
44 return MinimumSeed(state, st.Trafo());
47 MinimumSeed SimplexSeedGenerator::operator()(
const MnFcn& fcn,
const AnalyticalGradientCalculator& gc,
const MnUserParameterState& st,
const MnStrategy& stra)
const {
49 return (*
this)(fcn, (
const GradientCalculator&)(gc), st, stra);