eigen裡如何進行複數矩陣的賦值和運算操作?

時間 2021-10-21 15:34:48

1樓:倒睡大秦山

這似乎已經是乙個19年的老問題了,樓主現在可能也不需要知道了,我就藉著這個回答嘗試一下不同的用法。比較複雜的塊操作、slice、範數操作等等我目前還沒嘗試用過,如果有大佬能夠補充一下,那萬分感謝。

檢視了一下Eigen官網的documention,只講了實數矩陣的,沒有提到過複數矩陣是怎麼賦值的(當然可能是我沒有看到),不過檢視了一下網上的例子,發現Eigen還是支援複數運算的,就是賦值這塊,可能是他們覺得看函式標頭檔案就能懂吧,反正我是不太懂。

#include

#include

using

namespace

std;

using

namespace

Eigen

;int

main

(),};

//只對實數賦值

Matrix2cf

Y,};

//只對實數賦值4

cout

<

;cout

<

輸出結果:

(1,0) (2,0)

(3,0) (4,0)

(1,0) (2,0)

(3,0) (4,0)

#include

#include

using

namespace

std;

using

namespace

Eigen

;int

main

()輸出結果

(1,1) (2,2)

(3,3) (4,4)

前面兩種方式對於比較大的矩陣賦值都比較麻煩,採用過載符號賦值個人感覺比較符號需求:

#include

#include

using

namespace

Eigen

;using

namespace

std;

intmain()}

cout

<

endl

<

;cout

<

endl

;return0;

}輸出結果:

(0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6) (0,7) (0,8) (0,9)

(1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9)

(2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9)

(3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9)

(4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9)

(5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7) (5,8) (5,9)

(6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6) (6,7) (6,8) (6,9)

(7,0) (7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7) (7,8) (7,9)

(8,0) (8,1) (8,2) (8,3) (8,4) (8,5) (8,6) (8,7) (8,8) (8,9)

(9,0) (9,1) (9,2) (9,3) (9,4) (9,5) (9,6) (9,7) (9,8) (9,9)

(0,-0) (0,-1) (0,-2) (0,-3) (0,-4) (0,-5) (0,-6) (0,-7) (0,-8) (0,-9)

(1,-0) (1,-1) (1,-2) (1,-3) (1,-4) (1,-5) (1,-6) (1,-7) (1,-8) (1,-9)

(2,-0) (2,-1) (2,-2) (2,-3) (2,-4) (2,-5) (2,-6) (2,-7) (2,-8) (2,-9)

(3,-0) (3,-1) (3,-2) (3,-3) (3,-4) (3,-5) (3,-6) (3,-7) (3,-8) (3,-9)

(4,-0) (4,-1) (4,-2) (4,-3) (4,-4) (4,-5) (4,-6) (4,-7) (4,-8) (4,-9)

(5,-0) (5,-1) (5,-2) (5,-3) (5,-4) (5,-5) (5,-6) (5,-7) (5,-8) (5,-9)

(6,-0) (6,-1) (6,-2) (6,-3) (6,-4) (6,-5) (6,-6) (6,-7) (6,-8) (6,-9)

(7,-0) (7,-1) (7,-2) (7,-3) (7,-4) (7,-5) (7,-6) (7,-7) (7,-8) (7,-9)

(8,-0) (8,-1) (8,-2) (8,-3) (8,-4) (8,-5) (8,-6) (8,-7) (8,-8) (8,-9)

(9,-0) (9,-1) (9,-2) (9,-3) (9,-4) (9,-5) (9,-6) (9,-7) (9,-8) (9,-9)

常用的加法、減法、乘法、共軛,轉置,求和,求特徵值...都沒有問題,但是要注意,求係數最大值、最小值的時候必須指定是實數部分還是虛數部分

下面通過乙個例子說明一下運算:

#include

#include

using

namespace

std;

using

namespace

Eigen

;int

main

()輸出結果:

加法:(2,2) (3,6)

(7,4) (9,5)

減法: (0,0) (1,-2)

(-1,2) (-1,3)

標量乘法:

(0.5,0.5) (1,1)

(1.5,1.5) (2,2)

矩陣乘法:

(6,12) (5,17)

(12,26) (7,39)

共軛:(1,-1) (2,-2)

(3,-3) (4,-4)

共軛轉置:

(1,-1) (3,-3)

(2,-2) (4,-4)

矩陣的跡:

(5,5)

矩陣的各元素之和

(10,10)

矩陣實數部分的最大係數,最小係數:

4位置在(1,1)

特徵值:

(-0.372281,-0.372281)

(5.37228,5.37228)

值得注意的是,Eigen庫裡面特別說明了複數特徵值、奇異值的求解都是非常慢的,如果有條件的話,還是把係數矩陣給化成兩個實數矩陣進行求解,以提高運算效率。

商業專案裡是如何進行評估的?

1 費用預算 所做的專案投資有多大,預計每個月的開銷是多少 3 所需要人力 需要多少人能完成專案的啟動及專案未來半年內需要的團隊人數 4 競爭 你要了解你即將面臨的競爭是誰,是否有調研過你的競爭目前的情況,你將用什麼方案去面對競爭。 求諸己 swot分析,pest分析等 一 費用效益分析法 主要是比...

如何理解矩陣的複數特徵值和特徵向量?

我們通常喜歡幾何想象的向量,座標值都是實數,可是如果是向量組成的向量呢,比如座標是複數,就沒法畫出來,也沒法想象,因為跟我們的空間方位感不是一一對應的。比如我們把2想象成兩個蘋果,可是 2,i2呢,想象成幾個蘋果?當然不能。所以不要依賴幾何直觀。要抓住本質。特徵向量特徵值的本質其實指的是,對這個特徵...

如何進行高效的閱讀?

鹽選推薦 從速度與質量上把握高效閱讀的關鍵。有的人一年可以閱讀上百本書,而我一本書要看上好幾個月。是什麼原因造成這種速度上的差異呢?就算是一字一句地仔細閱讀,過段時間我還是會忘記書中的內容,過目不忘式的閱讀方法究竟是怎樣練成的?我們讀書的目的在於獲取知識為我所用,而學習是乙個循序漸進的長期過程。盲目...