diff options
Diffstat (limited to 'unsupported/Eigen/src')
-rw-r--r-- | unsupported/Eigen/src/NonLinear/MathFunctions.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/unsupported/Eigen/src/NonLinear/MathFunctions.h b/unsupported/Eigen/src/NonLinear/MathFunctions.h index b89c1b017..ecae3a76e 100644 --- a/unsupported/Eigen/src/NonLinear/MathFunctions.h +++ b/unsupported/Eigen/src/NonLinear/MathFunctions.h @@ -266,5 +266,30 @@ int ei_lmdif( ); } +template<typename Functor, typename Scalar> +int ei_lmdif1( + Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > &x, + Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > &fvec, + VectorXi &iwa, + Scalar tol = Eigen::ei_sqrt(Eigen::machine_epsilon<Scalar>()) + ) +{ + int n = x.size(); + int ldfjac = fvec.size(); + int lwa = ldfjac*n+5*n+ldfjac; + Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > wa(lwa); + Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > fjac(ldfjac, n); + + iwa.resize(n); + wa.resize(lwa); + return lmdif1 ( + Functor::f, 0, + fvec.size(), n, x.data(), fvec.data(), + tol, + iwa.data(), + wa.data(), lwa + ); +} + #endif // EIGEN_NONLINEAR_MATHFUNCTIONS_H |