eigen入门
0 是什么
Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.
1 安装eigen
安装GDB, 一般都装过了
sudo apt-get install gdb
gdb --version
whereis gdb
查看版本
pkg-config --modversion eigen3
3.4.0
查看安装的路径
dpkg -L libeigen3-dev
/.
/usr
/usr/include
/usr/include/eigen3
/usr/include/eigen3/Eigen
/usr/include/eigen3/Eigen/Cholesky
/usr/include/eigen3/Eigen/CholmodSupport
/usr/include/eigen3/Eigen/Core
/usr/include/eigen3/Eigen/Dense
/usr/include/eigen3/Eigen/Eigen
可以看到:
我的默认安装的位置是 /usr/include/ (有些人的是在 /usr/local/include/)
2 简单使用
添加头文件
#include <eigen3/Eigen/Dense>
如果要这样用
#include <Eigen/Dense>
可以创建一个软连接
cd /usr/include/
# 创建之前看下自己eigen3的位置
sudo ln -sf eigen3/Eigen Eigen
sudo ln -sf eigen3/unsupported unsupported
2.1 数据结构
就两种 Matrix 和 Array
Matrix
一般用三个参数的版本
Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>
Matrix<float,Dynamic,Dynamic> <=> MatrixXf
Matrix<double,Dynamic,1> <=> VectorXd
Matrix<int,1,Dynamic> <=> RowVectorXi
Matrix<float,3,3> <=> Matrix3f
Matrix<float,4,1> <=> Vector4f
初始化
Array
Array类提供通用数组,而不是用于线性代数的Matrix类
使用 .array()
.matrix()
相互转换
2.2 操作
//默认
Eigen::MatrixXd m;//动态矩阵(啥也没有).可以分块分配
//3*3矩阵
Eigen::Matrix3d m1;
m1 << 1, 2, 3,
4, 5, 6,
7, 8, 9;
m = m1;
cout<<m<<"\n\n";
//固定大小,默认填充0
int rows=5, cols=5;
Eigen::MatrixXf m2(rows,cols);
cout<<m2<<endl;
//查看行数
cout<<"m2.rows()="<<m2.rows()<<endl;
//改变大小
int nb_rows=4, nb_cols=3;
Eigen:m2.resize(nb_rows, nb_cols);
cout<<m2<<"\n\n";
//=========实现的运算
//+-加减
//*/ 数乘/除
//* 矩阵乘法
//.transpose() 转置
//.adjoint() 共轭转置
//.dot() 向量点乘
//.cross() 叉乘
//.inverse() 逆
//.normalizd() 归一化
//内积
//<A,B>=tr(A^T* B)
//外积