---
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) 謝謝!*
-------------------------------------------
#請各位大佬多多打賞
-------------------------------------------