Eigen學習總結

2021-10-04 19:09:57 字數 2264 閱讀 9580

最早接觸eigen,是在高翔博士編著的《視覺slam十四講》中,今天在這裡整理一下。

eigen是乙個c++ 開源線性代數庫。它提供了快速的有關矩陣的線性代數運算,還包括解方程等功能。許多上層的軟體庫也使用eigen 進行矩陣運算,包括g2o、sophus 等。

sudo apt-get install libeigen3-dev

eigen 標頭檔案的預設位置為/usr/include/eigen3/。

如果是vs專案,開啟專案的屬性頁,依次進入屬性配置—>c/c++—>附加包含目錄,然後新增eigen檔案的路徑。

這裡直接上高博的**。

**1source:

#include

using namespace std;

#include

// eigen 部分

#include

// 稠密矩陣的代數運算(逆,特徵值等)

#include

#define matrix_size 50

/****************************

* 本程式演示了 eigen 基本型別的使用

****************************/

int main( int argc, char** ar** )

這個程式講解了:

eigen中矩陣的定義,初始化,訪問,矩陣運算,求特徵值,解方程

注意事項:不能混合兩種不同型別的矩陣;不能搞錯矩陣的維度

如何計算程式執行時間

說明:1.eigen提供的矩陣和matlab很相似,幾乎所有的資料都當作矩陣來處理。但是,為了實現更好的效率,在eigen中你需要指定矩陣的大小和型別。對於在編譯時期就知道大小的矩陣,處理起來會比動態變化大小的矩陣更快一些。因此,像旋轉矩陣、變換矩陣這樣的資料,完全可在編譯時期確定它們的大小和資料型別。

2.eigen矩陣不支援自動型別提公升,這和c++ 的內建資料型別有較大差異。在c++程式中,我們可以把乙個float資料和double資料相加、相乘,編譯器會自動把資料型別轉換為最合適的那種。而在 eigen 中,出於效能的考慮,必須顯式地對矩陣型別進行轉換。而如果忘了這樣做,eigen會(不太友好地)提示您乙個「you mixed different numeric types …」的編譯錯誤。你可以嘗試找一下這條資訊出現錯誤提示的哪個部分。如果錯誤資訊太長最好儲存到乙個檔案裡再找。

3.在計算過程中你也需要保證矩陣維數的正確性,否則會出現「you mixed matrices of different sizes」。請你不要抱怨這種錯誤提示方式,對於c++模板元程式設計,能夠提示出可以閱讀的資訊已經是很幸運的了。以後,若發現 eigen 出錯,你可以直接尋找大寫的部分,推測出了什麼問題。

4.可以去 學習更多關於 eigen 的知識。

**2source:

在eigen 中使用四元數、尤拉角和旋轉矩陣,並演示它們之間的變換方式。

#include

#include

using namespace std;

#include

// eigen 幾何模組

#include

/****************************

* 本程式演示了 eigen 幾何模組的使用方法

****************************/

int main ( int argc, char** ar** )

總結:旋轉矩陣(3×3):eigen::matrix3d

旋轉向量(3×1):eigen::angleaxisd

尤拉角(3×1):eigen::vector3d

四元數(4×1):eigen::quaterniond

歐氏變換矩陣(4×4):eigen::isometry3d

仿射變換(4×4):eigen::affine3d

射影變換(4×4):eigen::projective3d

每種型別都有單精度和雙精度兩種資料型別。

cmake_minimum_required( version 2.8 )

project( useeigen )

# 新增eigen標頭檔案

include_directories( "/usr/include/eigen3" )

add_executable( eigenmatrix eigenmatrix.cpp )

新增eigen標頭檔案這裡經常出錯,因為在很多cmake工程中一般都用find_package(eigen required)語句,然而這種方式找不到eigen,所以還是用以上方式吧。

Eigen學習總結1

matrix有6個模板引數,主要使用前三個引數 元素型別,行數,列數 剩下的有預設值。matrixeigen的型別主要有矩陣 向量 其實也是一種矩陣 有固定大小和動態大小之分 typedef matrixmatrix3f matrix3f a 固定size的矩陣,分配3 3個float的空間 typ...

Eigen使用總結

matrix 初始化 matrixm matrixxd m x,y 初始化大小 matrix3d 特殊大小 不超過4 和資料型別 置0 1 常數 單位陣 matrix3d m eigen matrix3d zero 定義的時候使用臨時變數 eigen matrixxd zero rows,cols ...

Eigen學習筆記

最近由於課題原因,新接觸到乙個c 的線性代數模板庫,名為eigen 讀作 a g n 主頁位於 簡單理解eigen就是對矩陣和向量進行了抽象和建模,並且設計了相關的線性代運算的實現。簡單嘗試了之後發現上手很快,但是某些功能由於設計理念的獨特性,導致最終的實現方案比較特殊。系統是ubuntu 16.0...