看到「矩陣計算」這幾個字,大家肯定首先想到的是大名鼎鼎的美國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...