【C++】Eigen介绍与使用 —— 4

一、Eigen介绍

  1. Eigen是可以用来进行线性代数、矩阵、向量操作等运算的C++库,它里面包含了很多算法。它的License是MPL2。它支持多平台。
  2. 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,求出projection
	cout << "projection=" << projection << endl;
}

执行结果如下:
在这里插入图片描述


版权声明:本文为yaodaoji原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。