入门篇
Eigen官网
Eigen官方文档
对于一个优质第三库最好的入门学习方式就是去读官方文档。
头文件检索
Array, matrix and vector types
简介
Eigen是C++中可以用来调用并进行矩阵计算的一个库,简单了说它就是一个c++版本的matlab包。
Eigen是一个开源库,从3.1.1版本开始遵从MPL2许可。
-
快速参考页面(quick reference pages) 以非常简洁的格式提供非常完整的 API 描述,目前只有两个功能集:
-
MATLAB对应表 -
扩展/自定义特征 有关扩展特征特征和支持自定义标量类型的讨论和示例 -
Eigen内部见解 例如预处理器指令、控制断言、多线程、MKL 支持、一些Eigen的内部见解等等… -
Eigen不受支持的模块 -
如何安装 官网下载地址 下载解压缩,项目的包含路径 添加Eigen源代码根目录,代码中包含Eigen头文件即可。 但是往往还会用到Eigen的unsupported 模块,因此最好的做法的是将 Eigen-3.X 和 Eigen-3.X\unsupported 均放在include: 项目include: "..\Eigen\Eigen-3.X"
"..\Eigen\Eigen-3.X\unsupported"
这样是为了在导入 unsupported 时会不知道来源,直接用Eigen 反而比较省事, 引用时:
#include <Eigen/Dense>
#include <Eigen/NonLinearOptimization>
实际上,Eigen 子目录中的头文件是使用Eigen编译程序所需的唯一文件。所有平台的头文件都相同。没有必要使用 CMake 或安装任何东西。
模块和头文件
Eigen库被分为一个Core模块和其他一些模块,每个模块有一些相应的头文件。 为了便于引用,Dense模块整合了一系列模块;Eigen模块整合了所有模块。一般情况下,include<Eigen/Dense> 就够了。
Hello Eigen
#include <Eigen/Dense>
using namespace Eigen;
void Eigen_introduction_started_001()
{
MatrixXd m(2, 2);
cout << m << endl;
m(0, 0) = 3;
m(1, 0) = 2.5;
m(0, 1) = -1;
m(1, 1) = m(1, 0) + m(0, 1);
std::cout << m << std::endl;
}
输出
-6.27744e+66 -6.27744e+66
-6.27744e+66 -6.27744e+66
3 -1
2.5 1.5
解释一下上述程序
-
Eigen头文件定义了多种类型,但对于简单的应用,可能足以只使用MatrixXd 类型。 -
矩阵是任意大小,因此是 X in MatrixXd -
其中每个条目都是一个double ,因此是 d in MatrixXd
Matrices and vectors
现在结合矩阵和向量进行练习
void Eigen_introduction_started_002()
{
MatrixXd m = MatrixXd::Random(3, 3);
cout << m << endl;
m = (m + MatrixXd::Constant(3, 3, 1.2));
m *= 100;
cout << "m =" << endl << m << endl;
VectorXd v(3);
cout << v[0] << endl;
v << 1, 2, 3;
cout << "v = " << endl << v << endl;
cout << "m * v =" << endl << m * v << endl;
}
void Eigen_introduction_started_003()
{
Matrix3d m = Matrix3d::Random();
m = (m + Matrix3d::Constant(1.2)) * 50;
cout << "m =" << endl << m << endl;
Vector3d v(1, 2, 3);
cout << "m * v =" << endl << m * v << endl;
}
|