一、Eigen介绍
- Eigen是可以用来进行线性代数、矩阵、向量操作等运算的C++库,它里面包含了很多算法。它的License是MPL2。它支持多平台。
- Eigen采用源码的方式提供给用户使用,在使用时只需要包含Eigen的头文件即可进行使用。之所以采用这种方式,是因为Eigen采用模板方式实现,由于模板函数不支持分离编译,所以只能提供源码而不是动态库的方式供用户使用。
二、官网下载地址
官网下载地址为: http://eigen.tuxfamily.org/index.php?title=Main_Page#Download
图1为官网首页
图1 官网首页
目录文件如下:eigen-3.3.7是所有eigen文件的根目录,如图2
图2 eigen文件的根目录
三、在VS2017的项目中包含eigen-3.3.7方法
方法如下:
新建一个项目eigen_test,在项目——属性中的C/C++——常规——附加包含目录添加eigen-3.3.7所在的路径,D:\vs_test\eigen_test\eigen-3.3.7。
结果如下图所示:
四、使用Eigen
包含头文件、命名空间
#include <iostream>
#include <Eigen/Core> // 包含头文件
#include <unsupported/Eigen/MatrixFunctions>using namespace Eigen; //命名空间
using namespace std;template<typename DerivedA, typename DerivedB> // 需要头文件 #include <unsupported/Eigen/MatrixFunctions>
void pinv2(const MatrixBase<DerivedA>& A, MatrixBase<DerivedB>& B) {MatrixXd A_temp(2, 2);A_temp = A.transpose()*A;B = (A_temp.inverse())*A.transpose();
}int main()
{MatrixXd meta(5, 2);meta << 1, 0,0.88, 0,0, 1,0, 1.3214,0, 0.6607;MatrixXd projection(2, 5);pinv2(meta, projection); // 通过meta,求出projectioncout << "projection=" << projection << endl;
}
执行结果如下: