MatrixBase :: sqrt()在Eigen3中不起作用

时间:2018-08-03 23:58:29

标签: c++ visual-studio eigen3

大家好:),

我试图使用Eigen3的不受支持的功能来获取矩阵(MatrixBase::sqrt())的每个元素的平方根。但是,每次使用上述功能时,Visual Studio都会给我以下错误:Use of undefined type 'Eigen::MatrixSquareRootReturnValue<Derived>'

这就是我在做什么:

Eigen::MatrixXd ScalesM(3,3);
ScalesM << 1, 2, 3, 4, 5, 6, 7, 8, 9;
ScalesM = ScalesM.sqrt();

任何帮助将不胜感激。祝你有美好的一天!

1 个答案:

答案 0 :(得分:2)

您正在查看错误的文档。矩阵的平方根与矩阵的每个元素的平方根不同。如果要进行逐元素运算,则应使用Eigen Array而不是本征矩阵。您始终可以使用.array()函数将矩阵转换为数组,并使用.matrix()将矩阵转换为矩阵。因此,针对您的用例的正确文档是here

您的代码应为

ScalesM.array().sqrt();

或者按照评论中的@Henri Menke的建议,您可以使用

ScalesM.cwiseSqrt();