mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-13 20:26:03 +08:00
use template parameter Scalar instead of VectorType, fix a segfault.
This commit is contained in:
parent
7db4052749
commit
ceeb023ff2
@ -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
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user