[toc]
Eigen官方文档摘要
安装与使用
linux下安装
sudo apt-get install libeigen3-dev
mac下安装
brew install eigen
CMakeLists.txt的编写
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})
Eigen头文件及类的列表
一般为了省事,直接导入
#include <Eigen/Dense>
或者
#include <Eigen/Eigen>
Eigen官方文档
Eigen基础使用
example 1
#include <iostream>
#include <Eigen/Dense> // Eigen头文件,<Eigen/Dense>包含Eigen库里面所有的函数和类
int main()
{
Eigen::MatrixXd m(2,2); // MatrixXd 表示的是动态数组,初始化的时候指定数组的行数和列数
m(0,0) = 3; //m(i,j) 表示第i行第j列的值,这里对数组进行初始化
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout << m << std::endl; // eigen重载了<<运算符,可以直接输出eigen矩阵的值
}
输出
3 -1
2.5 1.5
example 2
//
// Created by fuhong on 20-7-12.
//
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main() {
MatrixXd m = MatrixXd::Random(3, 3); //初始化动态矩阵m,使用Random函数,初始化的值在[-1,1]区间内,矩阵大小3X3
m = (m + MatrixXd::Constant(3, 3, 1.2)) * 50; // MatrixXd::Constant(3, 3, 1.2)初始化3X3矩阵,矩阵里面的数值为常量,全部为1.2
// Eigen重载了+ 运算符,两个矩阵有相同的行数和列数即可相加,对应位置上的值相加
cout << "m =" << endl << m << endl;
VectorXd v(3);
v << 1, 2, 3; //逗号初始化,英文:comma-initializer,Eigen未提供c++11 的{}初始化方式
cout << "m * v =" << endl << m * v << endl;
}
输出
m =
94.0188 89.844 43.5223
49.4383 101.165 86.823
88.3099 29.7551 37.7775
m * v =
404.274
512.237
261.153
逗号初始化
Eigen提供了一种逗号初始化器语法,该语法使用户可以轻松设置矩阵,向量或数组的所有系数。只需列出系数,从左上角开始,从左到右,从上到下移动。需要预先指定对象的大小。如果列出的系数太少或太多,编译器就会报错。 此外,初始化列表的元素本身可以是向量或矩阵。通常的用途是将向量或矩阵连接在一起。例如,这是如何将两个行向量连接在一起。请记住,必须先设置大小,然后才能使用逗号初始化程序。
RowVectorXd vec1(3);
vec1 << 1, 2, 3;
std::cout << "vec1 = " << vec1 << std::endl;
RowVectorXd vec2(4);
vec2 << 1, 4, 9, 16;
std::cout << "vec2 = " << vec2 << std::endl;
RowVectorXd joined(7);
joined << vec1, vec2;
std::cout << "joined = " << joined << std::endl;