use template parameter Scalar instead of VectorType, fix a segfault.

This commit is contained in:
Thomas Capricelli 2009-08-09 03:33:04 +02:00
parent 7db4052749
commit ceeb023ff2
2 changed files with 8 additions and 11 deletions

View File

@ -27,22 +27,19 @@
#include <cminpack.h> #include <cminpack.h>
template<typename Functor, typename VectorType> template<typename Functor, typename Scalar>
// TODO : fixe Scalar here // TODO : fixe Scalar here
int ei_hybrd1( int ei_hybrd1(
VectorType &x, Eigen::Matrix< double, Eigen::Dynamic, 1 > &x,
VectorType &fvec, Eigen::Matrix< double, Eigen::Dynamic, 1 > &fvec,
// ei_traits<VectorType>::Scalar tol Scalar tol = Eigen::ei_sqrt(Eigen::machine_epsilon<Scalar>())
double tol
// = ei_sqrt(machine_epsilon<VectorType::Scalar>())
) )
{ {
typedef typename VectorType::Scalar Scalar;
int lwa = (x.size()*(3*x.size()+13))/2; int lwa = (x.size()*(3*x.size()+13))/2;
VectorType wa(lwa); Eigen::Matrix< double, Eigen::Dynamic, 1 > wa(lwa);
fvec.resize(x.size()); fvec.resize(x.size());
return hybrd1(Functor::f, 0, x.size(), x.data(), fvec.data(), tol, wa.data(), lwa); return hybrd1(Functor::f, 0, x.size(), x.data(), fvec.data(), tol, wa.data(), lwa);
} }
#endif // EIGEN_NONLINEAR_MATHFUNCTIONS_H #endif // EIGEN_NONLINEAR_MATHFUNCTIONS_H

View File

@ -501,7 +501,7 @@ void testHybrd1()
/* unless high solutions are required, */ /* unless high solutions are required, */
/* this is the recommended setting. */ /* this is the recommended setting. */
info = ei_hybrd1<myfunctor,VectorXd>(x, fvec, ei_sqrt(machine_epsilon<double>())); info = ei_hybrd1<myfunctor,double>(x, fvec);
// check return value // check return value
VERIFY( 1 == info); VERIFY( 1 == info);
@ -510,7 +510,7 @@ void testHybrd1()
VERIFY_IS_APPROX(fvec.norm(), 1.192636e-08); VERIFY_IS_APPROX(fvec.norm(), 1.192636e-08);
// check x // check x
VectorXd x_ref; VectorXd x_ref(n);
x_ref << -0.5706545, -0.6816283, -0.7017325, -0.7042129, -0.701369, -0.6918656, -0.665792, -0.5960342, -0.4164121; x_ref << -0.5706545, -0.6816283, -0.7017325, -0.7042129, -0.701369, -0.6918656, -0.665792, -0.5960342, -0.4164121;
VERIFY_IS_APPROX(x, x_ref); VERIFY_IS_APPROX(x, x_ref);
} }