C++ MatrixBase::sqrt()在Egeng3中不工作

C++ MatrixBase::sqrt()在Egeng3中不工作,c++,visual-studio,eigen3,C++,Visual Studio,Eigen3,大家好:) 我试图使用一个不受支持的特征Eigen3来获得矩阵中每个元素的平方根()。但是,每当我使用前面提到的函数时,VisualStudio都会给我以下错误:使用未定义的类型'Eigen::MatrixQuarerotReturnValue' 这就是我正在做的: Eigen::MatrixXd ScalesM(3,3); ScalesM << 1, 2, 3, 4, 5, 6, 7, 8, 9; ScalesM = ScalesM.sqrt(); Eigen::MatrixXd

大家好:)

我试图使用一个不受支持的特征Eigen3来获得矩阵中每个元素的平方根()。但是,每当我使用前面提到的函数时,VisualStudio都会给我以下错误:
使用未定义的类型'Eigen::MatrixQuarerotReturnValue'

这就是我正在做的:

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

ScalesM您正在查看错误的文档。矩阵的平方根与矩阵中每个元素的平方根不同。如果您想要元素操作,那么您应该使用而不是特征矩阵。始终可以使用函数从矩阵转换为数组,使用函数从数组转换为矩阵。因此,您的用例的正确文档是

你的代码应该是

ScalesM.array().sqrt();
或者正如@Henri Menke在评论中所建议的,您可以使用

ScalesM.cwiseSqrt();

您正在查看错误的文档。矩阵的平方根与矩阵中每个元素的平方根不同。如果您想要元素操作,那么您应该使用而不是特征矩阵。始终可以使用函数从矩阵转换为数组,使用函数从数组转换为矩阵。因此,您的用例的正确文档是

你的代码应该是

ScalesM.array().sqrt();
或者正如@Henri Menke在评论中所建议的,您可以使用

ScalesM.cwiseSqrt();

为我编译,在Clang和GCC()上没有问题。但是,此代码无法工作,因为要取平方根,矩阵必须是可逆的,而此矩阵不是可逆的(出于计算原因,特征值也必须是正的)。您是否记得:
#include
?为我编译,在Clang和GCC()方面没有问题。但是,这个代码不能工作,因为要取平方根,矩阵必须是可逆的,而这个矩阵不是(由于计算原因,特征值也必须是正的)。你记得:
#include
?你也可以使用。我不知道这一点。谢谢你也可以用,我不知道。谢谢