c++處理矩陣操作:Eigen庫初步學習使用
阿新 • • 發佈:2019-01-09
Eigen 是一個線性算術的C++模板庫,包括:vectors, matrices, 開源以及相關演算法。功能強大、快速、優雅以及支援多平臺,可以使用該庫來方便處理一些矩陣的操作,達到類似matlab那樣的快捷。現在已經發展到Eigen3了,目前最新版本為Eigen 3.1.2。
Eigen使用預備工作:
然後當自己需要使用到Eigen時,在相應的整合開發環境下新增Eigen所在的標頭檔案目錄即可,比如我在Qt下開發,使用的是QtCreator,則需要在工程檔案*.pro下新增如下程式碼:
INCLUDEPATH += C:\Qt\eigen
其它的開發環境比如VS可以參考本文後面給出的參考資料(第一個)。
關於Eigen的一些基本特徵:
Eigen中的矩陣型別一般都是用類似MatrixXXX來表示,可以根據該名字來判斷其資料型別,比如說’d’代表double並不是用來表示整數的,;‘f’代表float; ‘i’代表整數;‘c’代表complex,即複數;’d’表示dynamic,即表示矩陣中有些維數是不確定的,動態的……舉例子比如說:Matrix2cd,表示的是2*2維的,其每個元素都是複數,複數的實部和虛部都為double型別。
Eigen中需要非常注意其資料型別,比如2個向量相乘如果得到一個矩陣,則向量中元素的型別和矩陣中元素的型別必須都相同,否則會出現錯誤。
下面舉個例子來簡單使用下Eigen庫,本例子非常簡單,主要是對Eigen的使用有個感性認識。實驗程式碼如下:
#include <iostream> #include <vector> #include <Eigen/Eigen> using namespace Eigen; using namespace std; int main() { Eigen::Vector2d v1, v2; //Eigen中的變數 v1 << 5, 6; //預設的向量為列向量 cout << "v1 = " << endl << v1 << endl; v2 << 4, 5 ; Matrix2d result = v1*v2.transpose(); cout << "result: " << endl << result << endl; }
實驗結果如下:
參考資料: