22 FunctionMinimum ScanBuilder::Minimum(
const MnFcn& mfcn,
const GradientCalculator&,
const MinimumSeed& seed,
const MnStrategy&,
unsigned int,
double)
const {
25 MnAlgebraicVector x = seed.Parameters().Vec();
26 MnUserParameterState upst(seed.State(), mfcn.Up(), seed.Trafo());
27 MnParameterScan scan(mfcn.Fcn(), upst.Parameters(), seed.Fval());
28 double amin = scan.Fval();
29 unsigned int n = seed.Trafo().VariableParameters();
30 MnAlgebraicVector dirin(n);
31 for(
unsigned int i = 0; i < n; i++) {
32 unsigned int ext = seed.Trafo().ExtOfInt(i);
34 if(scan.Fval() < amin) {
36 x(i) = seed.Trafo().Ext2int(ext, scan.Parameters().Value(ext));
38 dirin(i) = sqrt(2.*mfcn.Up()*seed.Error().InvHessian()(i,i));
41 MinimumParameters mp(x, dirin, amin);
42 MinimumState st(mp, 0., mfcn.NumOfCalls());
44 return FunctionMinimum(seed, std::vector<MinimumState>(1, st), mfcn.Up());