Eigen - Levenberg Marquardt algorithm: invalid template arguments on definition of permutation

孤街浪徒 提交于 2020-01-06 04:32:31

问题


I'm trying to use the Eigen implementation of Levenberg Marquardt algorithm on a Android application. In order to use Eigen, I'm using Android NDK and jni. I've already tested Eigen with simple calculations (like matrix creation and vector sums) and it works perfectly. However, when I tried to use the Levenberg Marquardt algorithm I got some errors on the LevenbergMarquardt.h file from Eigen's library.

First, here is my code. I based on this code:

Eigen::MatrixXd matrix(count, 3);

for (int i = 0; i < count; i++) {
    Eigen::VectorXd t(3);
    t << x[i], y[i], accuracy[i];
    matrix.row(i) = t;
}

distance_functor functor(matrix, count);
Eigen::NumericalDiff<distance_functor> numDiff(functor);
Eigen::LevenbergMarquardt<Eigen::NumericalDiff<distance_functor>,double> lm(numDiff);

lm.parameters.maxfev = 2000;
lm.parameters.xtol = 1.49012e-08;
lm.parameters.ftol = 1.49012e-08;
lm.parameters.gtol = 0;
lm.parameters.epsfcn = 0;
Eigen::LevenbergMarquardtSpace::Status ret = lm.minimize(poseResult);

And those are the error that I got. The first two errors are in Eigen's library, and the last one is on the LevenbergMarquardt object creation. I've also included the respective line of code of the error, following the message:

Invalid template arguments LevenbergMarquardt.h /jnimath/jni/unsupported/Eigen/src/LevenbergMarquardt line 121 Semantic Error

typedef PermutationMatrix<Dynamic,Dynamic> PermutationType;

Invalid template arguments LevenbergMarquardt.h /jnimath/jni/unsupported/Eigen/src/NonLinearOptimization line 103 Semantic Error

PermutationMatrix<Dynamic,Dynamic> permutation;

Invalid template arguments test.cpp /jnimath/jni line 47 Semantic Error

Eigen::LevenbergMarquardt,double> lm(numDiff);

The first two errors are really strange because there are some other typedefs using Dynamic and they are not throwing errors.

Also, I noticed that I got some symbol errors on the compilation, which are:

Symbol 'YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY' could not be resolved Matrix.h /jnimath/jni/Eigen/src/Core line 277 Semantic Error


Symbol 'YOU_TRIED_CALLING_A_VECTOR_METHOD_ON_A_MATRIX' could not be resolved Matrix.h /jnimath/jni/Eigen/src/Core line 224 Semantic Error

So, I have two questions:

Why am I getting errors on those lines?

Does anyone know how to fix that problem?

Thank you

来源:https://stackoverflow.com/questions/26615684/eigen-levenberg-marquardt-algorithm-invalid-template-arguments-on-definition

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!