---
layout: post
title: "Eigen - Overview"
date: 2019-5-27
description: "Eigen说明文档(一)"
tag: Eigen
---
#写在最前面的废话
Eigen这个库从接触开始就知道他很厉害,但每次都是用到的时候百度以下,不用的时候就放下了(不要问我为什么不用谷歌,因为百度已经能够满足我这个层次的完全需求-哈哈哈)。
一直闹不明白为什么别人这么?皮,而我为什么这么菜。不想从新投胎,也就忍忍算啦。每次都以完美主义者自居,完美的说服了自己从入门到放弃。
现在开始从头撸Eigen,如果发现我长时间不更新。那么就说明我放弃了,不要催更啦。
#Getting started
Eigen是一个非常通用的数学函数库,支持各自矩阵运算。在搞了接近四年3D视觉,总结的一个经验就是,原理性的公式可以自己去推去写,但在真正的做事情的时候还是借用外部库吧。
有很多比你厉害的人已经帮你做了很多事情,相信他们并运用他们就行啦。
#Matrices and vectors
实例:
```C++
Size set at run time:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
MatrixXd m = MatrixXd::Random(3,3);
m = (m + MatrixXd::Constant(3,3,1.2)) * 50;
cout << "m =" << endl << m << endl;
VectorXd v(3);
v << 1, 2, 3;
cout << "m * v =" << endl << m * v << endl;
}
注释:示例中新建了一个3*3的动态矩阵,赋予(-1,1)之间的随机值。这个示例主要关注的点如下:
> * 头文件<Eigen/Dense> 这个头文件里面定义了各种矩阵的数据类型。
> * MatrixXd 这个矩阵是动态矩阵,可以自定在函数中定义矩阵的大小。
> * MatrixXd::Constant(3,3,1.2) 矩阵的一种初始化方式,表示是个3*3且元素值都为1.2的矩阵。
> * VectorXd 这是个动态向量,存储的数据类型是double。
> * 上述的两个变量都是动态的,因此矩阵的大小在函数运行的时候设定。
Size set at compile time:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
Matrix3d m = Matrix3d::Random();
m = (m + Matrix3d::Constant(1.2)) * 50;
cout << "m =" << endl << m << endl;
Vector3d v(1,2,3);
cout << "m * v =" << endl << m * v << endl;
}
与上个例子相似,唯一的区别是这次用的是固定大小的矩阵和向量。因此大小在编译期间就设置好了。
<br>
*转载请注明原地址,邓辉的博客:[https://github.com/my-lord/mylord.github.io](https://github.com/my-lord/mylord.github.io) 谢谢!*
-------------------------------------------
#请各位大佬多多打赏
-------------------------------------------