每次计算此行时,我都会收到此错误
double k = b.transpose()*Z.inverse()*b;
哪里Eigen::MatrixXd Z(3,3), b(3,1);
。我试过铸造但没有运气。有什么建议么?
结果默认是一个 Eigen 表达式(把它想象成一个矩阵,技术上是一个称为 的模板类型Eigen::GeneralProduct<...>
),所以即使矩阵是1 x 1
,它也不能隐式转换为double
。你要做的是访问它的(0)
元素(或者(0,0)
,它没有区别),见下文
Eigen::MatrixXd Z(3,3), b(3,1);
double k = (b.transpose()*Z.inverse()*b)(0);
PS:正如@ggael 所提到的,您应该使用 anEigen::VectorXd
作为 的类型b
,在这种情况下,结果可以隐式转换为 a double
。
这对我有用,因此请确保将 b 声明为 aVectorXd
这样 Eigen 可以在编译时知道结果是1x1
矩阵,因此可以安全地将其转换为标量值。这是一个独立的示例:
#include <Eigen/Dense>
using namespace Eigen;
int main() {
int n = 10;
VectorXd b(n);
MatrixXd Z(n,n);
double k = b.transpose() * Z.inverse() * b;
}