Eigen简介
Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.
特点:
- Eigen是多才多艺的。支持各种矩阵尺寸,从固定尺寸矩阵到任意大小的稠密矩阵,乃至系数矩阵;支持所有标准的数字类型等。
- Eigen运行很快。
- Eigen是可靠地
- Eigen是优雅的。API简介而易懂,且遵从C++的规范。
- Eigen受主流编译器支持。
如何使用(以code::blocks为例)
- 1.下载和解压
去官网选择合适的版本下载后,直接解压到任意目录。 - 2.在IDE中配置
Eigen不需要进行任何安装,只需要告诉编译器去哪里寻找头文件。以code::blocks为例,【Settings】→【Compiler】→【Global Compiler Settings】→【Search Directory】→【Compiler】下添加Eigen解压后的目录即可。如下图所示:
- 3.使用Eigen
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
MatrixXd m(2,2);
m << 1,2,3,4;
cout << m << endl;
}
运行结果:
常用操作
- 声明矩阵、向量
MatrixXd mat(m,n);//声明一个m×n的矩阵
VectorXd vec(n); //声明一个n维的向量
- 随机访问
val_i_j = mat(i,j);
val_i = vec(i);
- 向量点积、叉积
vec1.dot(vec2);
vec1.cross(vec2);
- 向量切片(tile)
vec.middleRows(startRow,n)//返回的是vec[startRow, startRow+n). startRow是起始下标,n为元素的个数
- 矩阵切片(tile)
mat.middleRows(m,n)//相当于matlab中的mat(m:n,:)
mat.middleCols(m,n)//相当于matlab中的mat(:,m:n)
mat.middleRows(m,n).middleCols(p,q)//相当于matlab中的mat(m:n,p:q)