1. 程式人生 > >c++處理矩陣操作:Eigen庫初步學習使用

c++處理矩陣操作:Eigen庫初步學習使用

  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; }
複製程式碼

  實驗結果如下:

  

  參考資料: