22 #if defined(DEBUG) || defined(WARNINGMSG) 
   33 FunctionGradient InitialGradientCalculator::operator()(
const MinimumParameters& par)
 const {
 
   36    assert(par.IsValid());
 
   38    unsigned int n = Trafo().VariableParameters();
 
   39    assert(n == par.Vec().size());
 
   42    std::cout << 
"Initial gradient calculator - params " << par.Vec() << std::endl;
 
   45    MnAlgebraicVector gr(n), gr2(n), gst(n);
 
   47    for(
unsigned int i = 0; i < n; i++) {
 
   48       unsigned int exOfIn = Trafo().ExtOfInt(i);
 
   50       double var = par.Vec()(i);
 
   51       double werr = Trafo().Parameter(exOfIn).Error();
 
   52       double sav = Trafo().Int2ext(i, var);
 
   53       double sav2 = sav + werr;
 
   54       if(Trafo().Parameter(exOfIn).HasLimits()) {
 
   55          if(Trafo().Parameter(exOfIn).HasUpperLimit() &&
 
   56             sav2 > Trafo().Parameter(exOfIn).UpperLimit())
 
   57             sav2 = Trafo().Parameter(exOfIn).UpperLimit();
 
   59       double var2 = Trafo().Ext2int(exOfIn, sav2);
 
   60       double vplu = var2 - var;
 
   62       if(Trafo().Parameter(exOfIn).HasLimits()) {
 
   63          if(Trafo().Parameter(exOfIn).HasLowerLimit() &&
 
   64             sav2 < Trafo().Parameter(exOfIn).LowerLimit())
 
   65             sav2 = Trafo().Parameter(exOfIn).LowerLimit();
 
   67       var2 = Trafo().Ext2int(exOfIn, sav2);
 
   68       double vmin = var2 - var;
 
   69       double gsmin = 8.*Precision().Eps2()*(fabs(var) + Precision().Eps2());
 
   71       double dirin = std::max(0.5*(fabs(vplu) + fabs(vmin)),  gsmin );
 
   72       double g2 = 2.0*fFcn.ErrorDef()/(dirin*dirin);
 
   73       double gstep = std::max(gsmin, 0.1*dirin);
 
   74       double grd = g2*dirin;
 
   75       if(Trafo().Parameter(exOfIn).HasLimits()) {
 
   76          if(gstep > 0.5) gstep = 0.5;
 
   83       std::cout << 
"computing initial gradient for parameter " << Trafo().Name(exOfIn) << 
" value = " << var
 
   84                 << 
" [ " << vmin << 
" , " << vplu << 
" ] " << 
"dirin " <<  dirin << 
" grd " << grd << 
" g2 " << g2 << std::endl;
 
   89    return FunctionGradient(gr, gr2, gst);
 
   92 FunctionGradient InitialGradientCalculator::operator()(
const MinimumParameters& par, 
const FunctionGradient&)
 const {
 
   97 const MnMachinePrecision& InitialGradientCalculator::Precision()
 const {
 
   99    return fTransformation.Precision();
 
  102 unsigned int InitialGradientCalculator::Ncycle()
 const {
 
  104    return Strategy().GradientNCycles();
 
  107 double InitialGradientCalculator::StepTolerance()
 const {
 
  109    return Strategy().GradientStepTolerance();
 
  112 double InitialGradientCalculator::GradTolerance()
 const {
 
  114    return Strategy().GradientTolerance();