1 #ifndef NPSTAT_NEYMANOSDE1DCONVERGENCE_HH_
2 #define NPSTAT_NEYMANOSDE1DCONVERGENCE_HH_
32 const double i_eps,
const bool i_useL2Distance =
false)
33 : eps_(i_eps), useL2Distance_(i_useL2Distance)
38 inline bool converged(
const unsigned ,
40 const std::vector<double>& ,
41 const std::vector<double>& ,
43 const std::vector<double>& currentGradient,
46 const unsigned sz = currentGradient.size();
49 long double sum = 0.0L;
50 for (
unsigned i=0; i<sz; ++i)
51 sum += currentGradient[i]*currentGradient[i];
52 return sum <= sz*eps_*eps_;
56 for (
unsigned i=0; i<sz; ++i)
57 if (std::abs(currentGradient[i]) > eps_)
76 template<
class OtherConvergenceCalc>
81 const OtherConvergenceCalc& gcalc)
82 : gcalc_(gcalc), gcalcConverged_(
false) {}
84 inline bool otherCalcConverged()
const {
return gcalcConverged_;}
86 inline bool converged(
const unsigned iterationNumber,
87 const double prevChisq,
88 const std::vector<double>& prevGradient,
89 const std::vector<double>& lastStep,
90 const double currentChisq,
91 const std::vector<double>& currentGradient,
94 gcalcConverged_ = gcalc_.converged(iterationNumber, prevChisq,
95 prevGradient, lastStep,
96 currentChisq, currentGradient,
101 assert(hessian.isSquare());
102 const unsigned sz = hessian.
nRows();
103 std::vector<double> eigenvalues(sz);
104 hessian.
symEigen(&eigenvalues[0], sz);
105 for (
unsigned i=0; i<sz; ++i)
106 if (eigenvalues[i] <= 0.0)
112 OtherConvergenceCalc gcalc_;
113 mutable bool gcalcConverged_;
Definition: NeymanOSDE1DConvergence.hh:29
Definition: NeymanOSDE1DConvergence.hh:78
unsigned nRows() const
Definition: Matrix.hh:155
void symEigen(Numeric *eigenvalues, unsigned lenEigenvalues, Matrix *eigenvectors=0, EigenMethod m=EIGEN_SIMPLE) const
Definition: AbsArrayProjector.hh:14