因為要把matlab的演算法寫成c++的程式,涉及到的矩陣運算較多,所以需要找個好用的矩陣運算庫。現成的矩陣運算庫很多,但是使用的難易程度和計算效能差別很大。如果乙個庫安裝比較方便,並且符號規則和matlab相似,那就最好了。最終看到
這裡有個推薦,發現了eigen這個庫。
eigen的最大優勢是使用方便,且跨平台。它本身僅有許多標頭檔案組成,使用時做的就是把用到的標頭檔案和**放在一起就可以了。另外使用者眾多(如google),這樣有問題時查詢也比較方便。它本身也有個wiki,因此說明性文件也算全面。
[cpp]view plain
copy
#include
using
namespace
eigen;
即可使用。
eigen中常用的資料型別是matrix和vector,對於浮點運算,eigen 支援float和double。另外,matrix和vector分為固定大小(fixed size)和動態大小(dynamic size)兩種。以matrix為例,做如下定義:
[cpp]view plain
copy
matrix3f a;
matrixxf b;
matrixxf c(10,15);
即定義了乙個3-by-3的方陣a,其中的資料型別是float,乙個動態長度的矩陣b,其當前大小為0-by-0,但可以被賦值為任意大小,以及乙個10-by-15的矩陣c。如果使用double,則將matrixxf 替換為matrixxd。vector的定義方法類似。
通過官網上一段完整的程式,可以了解使用eigen以及定義matrix或vector的基本方法。
[cpp]view plain
copy
#include
#include
using
namespace
eigen;
intmain()
輸出結果為:
[plain]view plain
copy
here is the matrix m:
3 -1
2.5 1.5
here is the vector v:
4 3
當固定大小vector小於4個變數時,可以採用如下方法初始化:
[cpp]view plain
copy
vector2d a(5.0, 6.0);
vector3d b(5.0, 6.0, 7.0);
vector4d c(5.0, 6.0, 7.0, 8.0);
一般而言,eigen提供了用逗號初始化的語法格式:
[cpp]view plain
copy
matrix3f m;
m << 1, 2, 3,
4, 5, 6,
7, 8, 9;
這樣m為:
[plain]view plain
copy
1 2 3
4 5 6
7 8 9
除此之外,和matlab類似,eigen也支援初始化為特殊矩陣或向量,這裡簡單總結如下:
matlab
eigen
zeros()
setzero()
rand()
setrandom()
eye()
setidentity()
ones()
setones()
**:
enfp工具箱怎麼用 隱喻 你的工具箱
分享一些在心理諮詢中好用的隱喻。在幫助家庭學習新的溝通方式時,我喜歡 工具箱 這個隱喻。顧名思義,工具箱裡裝著各種各樣的工具,不同工具適用於不同場合。有些工具你裝備了未必用得上,但你不會嫌工具太多。學習一種新的方式,彷彿就要替換掉舊的方式。他會擔心失去一些東西,喚起取捨的焦慮。比如,教乙個人拒絕別人...
3 C 工具箱 容器
容器特點 把控制項放到容器裡,移動容器控制項也會跟著移動。1 flowlayoutpanel 流布局控制項 放入控制項後,會自動垂直或水平排列 拉長布局,控制項自動跑到一行 2 groupbox 組合框 給視覺上是一組資料 3 panle 1 可以組合使用panle裡再放幾個panle 設定內部pa...
大資料 工具箱
當前,整個網際網路正在從it時代向dt時代演進,大資料技術也正在助力企業和公眾敲開dt世界大門。當今 大資料 一詞的重點其實已經不僅在於資料規模的定義,它更代表著資訊科技發展進入了乙個新的時代,代表著 性的資料資訊給傳統的計算技術和資訊科技帶來的技術挑戰和困難,代表著大資料處理所需的新的技術和方法,...