Eigen安装和使用

Eigen3在linux下的安装命令如下:

1
sudo apt install libeigen3-dev

这里的sudo代表以管理员权限运行命令,apt表示UbuntuDebianLinux系统中的包管理器,用于安装、卸载和更新软件包,install表示我们要安装一个软件包,libeigen3-dev表示要安装的eigen包。

linux软件包命名:在Linux系统中,软件包通常以lib开头,表示这是一个库(library)的包。接着是软件包的名称,这里是eigen3,表示这是Eigen库的第三个主要版本。最后是后缀-dev,表示这是开发版本(development version)的软件包,其中包含了开发所需的头文件和其他开发工具。

CMakeLists.txt编写

Eigen是纯用头文件搭建起来的库,非常神奇!这意味着你只能找到它的头文件,而没有.so 或.a 那样的二进制文件。 我们在使用时,只需引入 Eigen 的头文件即可,不需要链接它的库文件(因为它没有库文件)。

如果我们从github直接手动下载Eigen,没有编译它的话是用不了find_package(Eigen REQUIRE),原因是find_package仅支持采用cmake编译后的库。那怎么办呢?考虑它的不包含库文件,我们直接用头文件即可。

我window系统里Eigen库的Core和Dense文件夹的路径是:D:\Eigen,若在CMakeLists.txt写下

1
include_directories("D:\\Eigen")

那cpp文件里即写#include "Dense"#include "Core"即可。这两者路径拼接成完整的路径即可。

当在linux系统下,我们采用find_packe查找Eigen库时,前提是Eigen已安装,且经过cmake编译。

Eigen使用基础

Eigen::MatrixXd A

定义矩阵A,行列动态变化。例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
// Dense库包含Eigen库所有的函数和类
#include <Eigen/Dense>
using namespace std;
int main() {
//MatrixXd表示动态数组,初始化指定行数和列数
Eigen::MatrixXd m(2,2);
m<<1,2,3,4;
m(0,0) = 1;
m(0,1) = 2;
m(1,0) = 3;
m(1,1) = 4;
cout<<m<<end;
return 0;
}
//输出
/*
1 2
3 4
*/

Eigen::Matrix<double, 3, 3> A

定义了一个3*3的double类型矩阵,例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main() {
Matrix<double,3,3> A;
A<<1,2,4,1.1,2,3,4,4,1;
cout<<A<<endl;
return 0;
}
/*
1 2 4
1.1 2 3
4 4 1
*/

Eigen::Matrix<double,dynamic,dynamic> A

定义动态矩阵A,行列动态变化。例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <Eigen/Dense>
using namespace std;
int main(){
Eigen::Matrix<double,Dynamic,Dynamic> A(2,2);
A<<1,2,3,5;
cout<<A<<endl;
return 0;
}
/*
1 2
3 4
*/

Matrix3f A 定义3*3float矩阵A

1
2
3
#include <iostream>
#include <Eigen/Dense>
USIN