求問C 的Eigen矩陣運算庫有沒有提供兩個矩陣對應元素相

2021-03-22 08:14:01 字數 4677 閱讀 8322

1樓:環控擄

#includeusing namespace std;#define m 6#define n 3void mulmatri(int x[m][n],int y[n][m],int z[m][m],int m,int n);int main(){ int i,j; int x[m][n],y[n][m],z[m][m]; for(i=0;i>x[i][j]; for(i=0;i>y[i][j]; mulmatri( x,y,z,m,n); cout<

2樓:

轉化為array再乘, a.array()*b.array() ,很優雅的一個操作。矩陣和array可以互相轉化,那樣乘要求行和列相同。

兩個m×n的矩陣,用c++編寫程式實現矩陣的加法運算(兩個矩陣中的元素一一對應)

3樓:匿名使用者

int a[m][n],b[m][n];

分別2個陣列賦值

int i,j;

for(i = 0; i < m; i++)for(j = 0; j < n; j++)a[i][j] += b[i][j];

最後輸出a陣列元素就是結果了

4樓:匿名使用者

#include

using namespace std;

int main()

cout << endl;

for (i = 0; i < m; ++i)cout << endl;

return 0;}

有沒有哪個c/c++庫的函式可以很快地對矩陣進行塊操作,和矩陣對應項相乘?

5樓:匿名使用者

openblas開源庫效能是最好的,但是安裝不方便,可以使用cblas,要先安裝blas,我正在使用這個

eigen矩陣庫怎麼對一個矩陣取逆

6樓:色影**

#includeusing namespace std;#define m 6#define n 3void mulmatri(int x[m][n],int y[n][m],int z[m][m],int m,int n);int main(){ int i,j; int x[m][n],y[n][m],z[m][m]; for(i=0;i>x[i][j]; for(i=0;i>y[i][j]; mulmatri( x,y,z,m,n); cout。

線性代數c++模板庫 eigen如何使用

7樓:等待的幸福快樂

使用方法:

eigen是可以用

來進行線性代數、矩陣、向量操作等運算的c++庫,它裡面包含了很多演算法。它的license是mpl2。它支援多平臺。

eigen採用原始碼的方式提供給使用者使用,在使用時只需要包含eigen的標頭檔案即可進行使用。之所以採用這種方式,是因為eigen採用模板方式實現,由於模板函式不支援分離編譯,所以只能提供原始碼而不是動態庫的方式供使用者使用。

矩陣的定義:eigen中關於矩陣類的模板函式中,共有六個模板引數,常用的只有前三個。其前三個引數分別表示矩陣元素的型別、行數和列數。

矩陣定義時可以使用dynamic來表示矩陣的行列數為未知。

eigen中無論是矩陣還是陣列、向量,無論是靜態矩陣還是動態矩陣都提供預設建構函式,也就是定義這些資料結構時都可以不用提供任何引數,其大小均由執行時來確定。矩陣的建構函式中只提供行列數、元素型別的構造引數,而不提供元素值的構造,對於比較小的、固定長度的向量提供初始化元素的定義。

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

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

matrixacolmajor;

matrixarowmajor;

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

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

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

在eigen中行優先的矩陣會在其名字中包含有row,否則就是列優先。

eigen中的向量只是一個特殊的矩陣,其維度為1而已。

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

例如m(2, 3)既是獲取矩陣m的第2行第3列元素。

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

設定矩陣的元素:在eigen中過載了」<<」操作符,通過該操作符即可以一個一個元素的進行賦值,也可以一塊一塊的賦值。另外也可以使用下標進行賦值。

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

(1)、固定大小的矩陣是不能使用resize()來修改矩陣的大小;(2)、resize()函式會析構掉原來的資料,因此呼叫resize()函式之後將不能保證元素的值不改變;(3)、使用」=」操作符操作動態矩陣時,如果左右兩邊的矩陣大小不等,則左邊的動態矩陣的大小會被修改為右邊的大小。

如何選擇動態矩陣和靜態矩陣:對於小矩陣(一般大小小於16)使用固定大小的靜態矩陣,它可以帶來比較高的效率;對於大矩陣(一般大小大於32)建議使用動態矩陣。注意:

如果特別大的矩陣使用了固定大小的靜態矩陣則可能會造成棧溢位的問題。

矩陣和向量的算術運算:在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);

map類:在已經存在的矩陣或向量中,不必拷貝物件,而是直接在該物件的記憶體上進行運算操作。

8樓:匿名使用者

正好剛在研究這個

多看看部落格,仔細研究下

c++的eigen計算工具裡面求矩陣特徵值的函式,比如eigenvalues()是用的什麼演算法?

9樓:匿名使用者

qr分解演算法,具體參照李慶楊那本《數值分析》第八章的演算法...

c++開源矩陣計算工具——eigen的map使用方法?這個一般是列優先,怎樣實現行優先?

10樓:江南的秋雨

加上:a.transpose();就可以了。

eigen與matlab對應函式表

eigen文件:

11樓:艾可n米拉

typedef matrixrmatrixxd;//定義矩陣行優先

double arr[9]=;

mapa(arr,3,3);

c++ eigen庫 如何生成複數矩陣,如何對其賦值

12樓:匿名使用者

matrix, dynamic, dynamic>

eigen怎麼表示矩陣的行列式

13樓:匿名使用者

矩陣變數為matrix

行列式就是matrix.determinant

14樓:小樂笑了

特徵值的乘積,就是行列式

設計支援矩陣加減乘運算的程式用C編希望有詳解初學者原始碼簡單點的謝謝啦

樓主你好 具體 如下 include define n 80 void add int a n int b n int n void sub int a n int b n int n void mul int a n int b n int n printf 3d index printf n i...

線性代數 矩陣運算之求伴隨矩陣的操作方法是什麼?

1 根據定義利用代數餘子式。求解步驟如下 1 把矩陣a的各個元素換成它相應的代數餘子式a 2 將所得到的矩陣轉置便得到a的伴隨矩陣。2 利用矩陣的特徵多項式求可逆矩陣的伴隨矩陣。設a a 是數域f上的一個n階矩陣,fa k k k 是a的特徵多項式,若a可逆,則a的伴隨矩陣a 1 a k a k i...

C中有沒有矩陣運算的類啊,名稱是什麼

可能你在getweather裡面的方法還沒有執行完成的時候,就取data值,此時是空的,你是怎麼調getweather方法的,data值什麼時候取的 c 中有沒有矩陣運算的類啊,名稱是什麼啊?這個應該沒有,建議用matlab進行矩陣運算,是專門用於矩陣計算的軟體。或者自己寫 了。什麼是矩陣?為什麼矩...