矩阵是数学中一个重要的工具,广泛应用于各种场景下的数值分析,例如,数字信号处理,图像处理等。我们如何在程序中使用矩阵进行运算呢?本文将为大家介绍一个开源的矩阵运算工具——Eigen。
Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.
Eigen是一个用于线性运算的C++ 模板库,支持 矩阵和矢量运算,数值分析及其相关的算法。
安装Eigen比较简单需要,从官网下载源码并解压即可,我现在的是最新的eigen-3.3.7版本。
官网下载地址:
http://eigen.tuxfamily.org/index.php?title=Main_Page
我们可以进入Eigen目录,可以发现Eigen库主要包括如下几个模块组成:
- Core:Matrix和Array类,基础的线性代数运算和数组操作;
- Geometry:旋转,平移,缩放,2维和3维的各种变换;
- LU:求逆,行列式,LU分解;
- Cholesky:LLT和LDLT Cholesky分解;
- Householder:Householder变换;
- SVD:SVD分解;
- QR:QR分解。
- Eigenvalues:特征值,特征向量分解。
- Sparse:稀疏矩阵的存储和运算。
- Dense:包含了Core、Geometry、LU、Cholesky、SVD、QR、Eigenvalues等模块。
- Eigen:包含了Dense和Sparse模块。
Eigen的食用方法非常之简单,在使用时我们只需要从解压后的文件目录中找到需要使用的库,然后,在源代码中包含相应的库即可食用了。因为Eigen是用模板写的模板库,所以只能把头文件包含进来使用。W君是在工程工作目录解压的,请参考如下代码包含Eigen库。
#include "eigen_3_3_7/Eigen/Eigen"
Matrix和Array模板类
Eigen库提供有Matrix和Array两种模板类。它们定义如下:
typedef Matrix MyMatrixType;typedef Array MyArrayType;
其中,通常我们会根据需要设置前三个参数,其它为默认值即可。
- Scalar:指定元素类型,比如,float, double, bool, int 等。
- RowsAtCompileTime:指定行数或者设置成动态(Dynamic);
- ColsAtCompileTime:指定列数或者设置成动态(Dynamic);
- Options:标志位,可以是ColMajor或RowMajor,默认是ColMajor;
从上面可以看出,行数和列数是允许固定大小,也允许动态大小的,所以下面的几种类型是可以的。
MatrixMatrixMatrixMatrixArrayArray
另外,我们还可以使用Eigen库已经重定义的类型,下面是一些简单的例子可参