fix failing angle constraint on bad starting position: treat LGZ before first error check

This commit is contained in:
Stefan Tröger 2013-10-24 06:00:04 +02:00
parent 9fdeef50fe
commit 0099bfd0fd

View File

@ -79,7 +79,7 @@ struct Dogleg {
number_type tolg, tolx;
Kernel* m_kernel;
Dogleg(Kernel* k) : m_kernel(k), tolg(1e-40), tolx(1e-20){
Dogleg(Kernel* k) : m_kernel(k), tolg(1e-40), tolx(1e-20) {
#ifdef USE_LOGGING
log.add_attribute("Tag", attrs::constant< std::string >("Dogleg"));
@ -182,6 +182,12 @@ struct Dogleg {
<< "residual: "<<sys.Residual.transpose()<<std::endl
<< "maximal differential: "<<sys.Jacobi.template lpNorm<Eigen::Infinity>();
#endif
sys.removeLocalGradientZeros();
#ifdef USE_LOGGING
BOOST_LOG(log)<< "LGZ jacobi: "<<std::endl<<sys.Jacobi<<std::endl
<< "maximal differential: "<<sys.Jacobi.template lpNorm<Eigen::Infinity>();
#endif
number_type err = sys.Residual.norm();
@ -232,9 +238,6 @@ struct Dogleg {
number_type dF=0, dL=0;
number_type rho;
if(iter==0)
sys.removeLocalGradientZeros();
//get the update step
calculateStep(g, sys.Jacobi, sys.Residual, h_dl, delta);
@ -535,7 +538,7 @@ struct Kernel : public PropertyOwner< mpl::vector<precision> > {
bool isOpposite(const E::MatrixBase<DerivedA>& p1,const E::MatrixBase<DerivedB>& p2) {
return ((p1+p2).squaredNorm() < getProperty<precision>());
}
int solve(MappedEquationSystem& mes) {
nothing n;
return NonlinearSolver(this).solve(mes, n);
@ -545,7 +548,7 @@ struct Kernel : public PropertyOwner< mpl::vector<precision> > {
int solve(MappedEquationSystem& mes, Functor& f) {
return NonlinearSolver(this).solve(mes, f);
};
typedef mpl::vector1<precision> properties;
};