最早接觸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...