開源矩陣計算工具Eigen學習筆記(一)

2021-08-10 13:49:48 字數 2111 閱讀 4277

看到「矩陣計算」這幾個字,大家肯定首先想到的是大名鼎鼎的美國mathworks公司開發的matlab矩陣實驗室,matlab功能的確非常強大。但有時由於一些特殊需求,我們只能用c++/c來程式設計實現矩陣運算。下面通過一些簡單的例子來了解eigen

#include #include using eigen::matrixxd;

int main()

#include
eigen/dense標頭檔案定義了matrixxd type 和相關型別的成員函式。

讀完這個程式,能看出matrixxd 只是宣告了乙個2x2的矩陣,並沒有對其進行初始化。但為什麼要用matrixxd,x和d分別有什麼含義呢?

x:代表乙個任意大小的矩陣。d:表示輸入元素的型別為double。如果想要輸入浮點型元素,改為matrixxf就可以了,同理,想輸入整型元素,改為matrixxi即可。

m(0,0) = 3;
這條語句將矩陣的第乙個元素賦值為3,

注意這裡在進行賦值時,元素索引從0開始,要與數學表達進行區分,第一行和第一列下標為(0,0)

eigen提供了兩種表示dense objects,用矩陣類的模板函式來表示矩陣和向量。用類陣列類的模板函式來表示一維和二維陣列,原型如下所示:

typedef matrixmymatrixtype;

typedef arraymyarraytype;

scalar:資料型別(int,double,float);

rowsatcompiletime:矩陣行數,也可以動態確定

colsatcompiletime:矩陣列數,也可以動態確定

matrix<=>   matrixxd

matrix<=> matrixxf

eigen也提供了很多新的型別定義:

matrix2d is a 2x2 square matrix of doubles (matrix)

vector4f is a vector of 4 floats (matrix)

rowvector3i is a row-vector of 3 ints (matrix)

matrixxf is a dynamic-size matrix of floats (matrix)

vectorxf is a dynamic-size vector of floats (matrix)

matrix2xf is a partially fixed-size (dynamic-size) matrix of floats (matrix)

matrixx3d is a partially dynamic-size (fixed-size) matrix of double (matrix)

下面開始介紹矩陣的一些基本運算

一:矩陣相加

二矩陣相減

#include #include #include using namespace eigen;

int main()

執行結果如圖所示

這段程式中使用了一種新的方法來對矩陣進行初始化,過載了「《」來輸入矩陣中的元素。

三矩陣相乘

#include #include #include using namespace eigen;

int main()

執行結果如圖所示

C 矩陣運算工具箱Eigen

因為要把matlab的演算法寫成c 的程式,涉及到的矩陣運算較多,所以需要找個好用的矩陣運算庫。現成的矩陣運算庫很多,但是使用的難易程度和計算效能差別很大。如果乙個庫安裝比較方便,並且符號規則和matlab相似,那就最好了。最終看到 這裡有個推薦,發現了eigen這個庫。eigen的最大優勢是使用方...

eigen向量計算 EIgen基本運算學習

向量向量平方和 矩陣動態矩陣 在使用動態矩陣的時候發現乙個問題,在無法知道大小的時候直接初始化 int rows,cols 從其他地方獲取的尺寸行列數 eigen matrixxf tmp mat tmp mat eigen matrix zero 會報錯提示,初始化的時候必須使用const常量 這...

C 矩陣計算庫 Eigen 使用筆記(一)

1.intel math kernel library 的呼叫 在 include 任何 eigen 庫的標頭檔案之前,定義巨集 define eigen use mkl all可以根據自己的需要單獨定義所需的 mkl 部分。可用的巨集是 eigen use blas 使用 blas level 2...