C 呼叫Eigen庫進行矩陣基礎運算

2021-10-25 05:35:43 字數 2344 閱讀 3745

#eigen標頭檔案介紹

利用c++呼叫eigen庫實現矩陣的基礎運算,包括矩陣的相加,相乘,轉置,求逆,伴隨矩陣,特徵值。

eigen是c++中可以用來呼叫並進行矩陣計算的乙個庫,裡面封裝了一些類,需要的標頭檔案和功能如下:

eigen基礎語法說明:

矩陣型別:eigen中的矩陣型別一般都是用類似matri***x來表示,可以根據該名字來判斷其資料型別,比如」d」表示double型別,」f」表示float型別,」i」表示整數,」c」表示複數;matrix2f,表示的是乙個22維的,其每個元素都是float型別。

資料儲存:matrix建立的矩陣預設是按列儲存,eigen在處理按列儲存的矩陣時會更加高效。如果想修改可以在建立矩陣的時候加入引數,如:

matrixacolmajor;

matrixarowmajor;

動態矩陣和靜態矩陣:動態矩陣是指其大小在執行時確定,靜態矩陣是指其大小在編譯時確定。

matrixxd:表示任意大小的元素型別為double的矩陣變數,其大小只有在執行時被賦值之後才能知道。

matrix3d:表示元素型別為double大小為33的矩陣變數,其大小在編譯時就知道。

在eigen中行優先的矩陣會在其名字中包含有row,否則就是列優先。eigen中的向量是乙個特殊的矩陣,其維度為1。

矩陣元素的訪問:在矩陣的訪問中,行索引總是作為第乙個引數,eigen中矩陣、陣列、向量的下標都是從0開始。矩陣元素的訪問可以通過」()」操作符完成。例如m(2, 3)既是獲取矩陣m的第2行第3列元素。

針對向量還提供」」操作符,注意矩陣則不可如此使用。

設定矩陣的元素:在eigen中過載了」<

重置矩陣大小:當前矩陣的行數、列數、大小可以通過rows()、cols()和size()來獲取,對於動態矩陣可以通過resize()函式來動態修改矩陣的大小。注意:

(1)、固定大小的矩陣是不能使用resize()來修改矩陣的大小;

(2)、resize()函式會析構掉原來的資料,因此呼叫resize()函式之後將不能保證元素的值不改變;

(3)、使用」=」操作符操作動態矩陣時,如果左右兩邊的矩陣大小不等,則左邊的動態矩陣的大小會被修改為右邊的大小。

矩陣和向量的算術運算:在eigen中算術運算過載了c++的+、-、*

(1)、矩陣的運算:提供+、-、一元操作符」-」、+=、-=;二元操作符+/-,表示兩矩陣相加(矩陣中對應元素相加/減,返回乙個臨時矩陣);一元操作符-表示對矩陣取負(矩陣中對應元素取負,返回乙個臨時矩陣);組合操作法+=或者-=表示(對應每個元素都做相應操作);矩陣還提供與標量(單一數字)的乘除操作,表示每個元素都與該標量進行乘除操作;

(2)、求矩陣的轉置、共軛矩陣、伴隨矩陣:可以通過成員函式transpose()、conjugate()、adjoint()來完成。注意:這些函式返回操作後的結果,而不會對原矩陣的元素進行直接操作,如果要讓原矩陣進行轉換,則需要使用響應的inplace函式,如transpoceinplace()等;

(3)、矩陣相乘、矩陣向量相乘:使用操作符*,共有和=兩種操作符;

(4)、矩陣的塊操作:有兩種使用方法:

matrix.block(i,j, p, q) : 表示返回從矩陣(i, j)開始,每行取p個元素,每列取q個元素所組成的臨時新矩陣物件,原矩陣的元素不變;

matrix.block(i, j) :可理解為乙個p行q列的子矩陣,該定義表示從原矩陣中第(i, j)開始,獲取乙個p行q列的子矩陣,返回該子矩陣組成的臨時矩陣物件,原矩陣的元素不變;

(5)、向量的塊操作:

獲取向量的前n個元素:vector.head(n);

獲取向量尾部的n個元素:vector.tail(n);

獲取從向量的第i個元素開始的n個元素:vector.segment(i,n);

eigen庫的配置

**展示

#include

#include

using eigen::matrixxd;

using

namespace std;

using

namespace eigen;

intmain()

} cout << mat2 << endl;

return0;

}

c++矩陣運算庫eigen

c++eigen庫的使用方法

Eigen庫中進行矩陣間的變換

一 剛體旋轉的表示方法有如下四種 旋轉矩陣 r3x3 旋轉矩陣r為正交陣 行或列向量都是兩兩正交的單位向量 四元數 quaternion 四元數可以只用四個元素就能表示旋轉,在使用四元數進行旋轉變換之前需要對四元數進行歸一化。旋轉向量v 也稱 軸角,由乙個旋轉軸向量和旋轉角組成。旋轉軸向量需要標準化...

C 矩陣處理庫 Eigen初步使用

專案要進行比較多的矩陣操作,特別是二維矩陣。剛開始做實驗時,使用了動態二維陣列,於是寫了一堆matrix函式,作矩陣的乘除加減求逆求行列式。實驗做完了,開始做 優化,發現matrix.h檔案裡適用性太低,而且動態二維陣列的空間分配與釋放也影響效率,於是尋找其他解決方案。首先考慮的是與matlab混合...

C 矩陣處理庫 Eigen初步使用

專案要進行比較多的矩陣操作,特別是二維矩陣。剛開始做實驗時,使用了動態二維陣列,於是寫了一堆matrix函式,作矩陣的乘除加減求逆求行列式。實驗做完了,開始做 優化,發現matrix.h檔案裡適用性太低,而且動態二維陣列的空間分配與釋放也影響效率,於是尋找其他解決方案。首先考慮的是與matlab混合...