首先肯定是怎么样把eigen库导入代码确保可以被调用。
eigen库的引入
常见错误
原因
编译器没有找到(编译器只找到include目录下,而Eigen在eigen3目录下)。
原本的写法
#include <Eigen/Dense>
解决方案
改变头文件的include写法后如下。
#include <eigen3/Eigen/Dense>
参考教程
Eigen库的使用
以下的运行直接使用code runner。
以创建矩阵为例。
#include <iostream>
#include <eigen3/Eigen/Dense>
using namespace std;
int main()
{
// 创建一个m*n的矩阵 元素为int型
Eigen::MatrixXi m(2, 1);
m << 1.1, 2.2;
cout << m << endl;
return 0;
}
此时的输出结果如下:
可见,int型变量无法保存浮点数。
代码总结
Eigen::MatrixXd m(4, 4); // 创建一个4x4的矩阵m 元素为double型
Eigen::MatrixXi n(4, 4); // 创建一个4x4的矩阵n 元素为int型
Eigen::Matrix3d A; // 创建一个3x3的矩阵A
// 对创建的矩阵进行赋值
m << 0.866, -0.500, 0.000, 4.000,
0.500, 0.866, 0.000, 3.000,
0.000, 0.000, 1.000, 0.000,
0.000, 0.000, 0.000, 1.000;
// 直接对矩阵求逆
m.inverse()
输出是自动对齐的
(代码上为了保持美观,强行对齐一下)
此时运行代码会报错。
原因:矩阵PinB的类型是Eigen::MatrixXi无法和类型Eigen::MatrixXd的矩阵T进行运算。
注意:事实证明,每次点完运行都要过一段时间才出运算结果,这样的运算表达虽然简单且便于公式推导,但是这样的变换把时间浪费在0和1的相乘上。