34 MnPrint print(
"InitialGradientCalculator");
36 print.
Debug(
"Calculating initial gradient at point", par.
Vec());
40 for (
unsigned int i = 0; i <
n; i++) {
41 unsigned int exOfIn = trafo.
ExtOfInt(i);
43 double var = par.
Vec()(i);
45 double save1 = trafo.
Int2ext(i, var);
46 double save2 = save1 + werr;
51 double var2 = trafo.
Ext2int(exOfIn, save2);
52 double vplu = var2 - var;
58 var2 = trafo.
Ext2int(exOfIn, save2);
59 double vmin = var2 - var;
62 double dirin = std::max(0.5 * (std::fabs(vplu) + std::fabs(vmin)), gsmin);
63 double g2 = 2.0 * errorDef / (dirin * dirin);
64 double gstep = std::max(gsmin, 0.1 * dirin);
65 double grd = g2 * dirin;
74 print.
Trace(
"Computed initial gradient for parameter", trafo.
Name(exOfIn),
"value", var,
"[", vmin,
",", vplu,
75 "]",
"dirin", dirin,
"grd", grd,
"g2", g2);
unsigned int size() const
const MnAlgebraicVector & Vec() const
double LowerLimit() const
double UpperLimit() const
bool HasLowerLimit() const
bool HasUpperLimit() const
double Eps2() const
eps2 returns 2*sqrt(eps)
void Debug(const Ts &... args)
void Trace(const Ts &... args)
LAVector MnAlgebraicVector
FunctionGradient calculateInitialGradient(const MinimumParameters &, const MnUserTransformation &, double errorDef)
Initial rough estimate of the gradient using the parameter step size.