eigen库的一些使用
求矩阵的特征值/特征向量
Eigen::MatrixXd MatrixA; Eigen::EigenSolver<Eigen::MatrixXd> eigen_solver(MatrixA); Eigen::VectorXcd values = eigen_solver.eigenvalues(); Eigen::VectorXcd values = eigen_solver.eigenvectors();
判断矩阵是否相等(在一定精度下)
这里一个例子用来判断矩阵A是否为对称矩阵
Eigen::MatrixXd MatrixA; Eigen::MatrixXd MatrixA_T; MatrixA = MatrixA_T.transpose(); //求转置 if(MatrixA.isApprox(MatrixA_T)) { return 1; }
"<<"操作符的使用注意事项
当出现下面的报错
很可能是<<输入的个数和MatrixXd或VectorXd自身的初始化个数不同,如
Eigen::VectorXd A; A.resize(2); A<<1; //妄想多次输入(先输入一部分),错误 A<<1,1,1; //输入过多个,错误 A<<1,1; //一次性输入A的size同等数量,正确
如果是这个错误:此声明没有存储类或类型说明符
则是没有放在函数内而是函数外或类声明之内
Block块操作
Eigen::MatrixXd Q = Eigen::MatrixXd::Zero(5, 5); Eigen::MatrixXd Q_j = Eigen::MatrixXd::Ones(4, 4); Q.block<1, 1>(1, 1) = 1; //第一行第一列为开始的左上角的1*1矩阵块 Q.block<4, 4>(1, 1) = Q_j; //第一行第一列为开始的左上角的4*4矩阵块
上面对Q矩阵作块操作,<>内为要操作的子块大小,()为要操作的子块开始位置(左上角)
如原矩阵Q为:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
第一次操作后为
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
第二次操作后为
0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1