国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C++矩陣處理工具——Eigen

2019-11-14 11:42:43
字體:
來源:轉載
供稿:網友

轉自http://blog.csdn.net/abcjennifer/article/details/7781936 

最近和一些朋友討論到了C++中數學工具的問題,以前總是很2地自己寫矩陣運算,或者有時候在matlab里計算了一些數據再往C程序里倒,唉~想想那些年,我們白寫的代碼啊……人家早已封裝好了!首先推薦幾個可以在C++中調用的數學平臺:eigen、bias、lapack、svd、CMatrix,本文著重eigen做以講解,希望對各位有所幫助。

下面是本文主線,主要圍繞下面幾點進行講解:

**********************************************************************************************

Eigen是什么?

Eigen3哪里下載?

Eigen3的配置

Eigen3 樣例代碼有沒有?

去哪里更深入學習?

**********************************************************************************************

Eigen是什么?

Eigen是C++中可以用來調用并進行矩陣計算的一個庫,里面封裝了一些類,需要的頭文件和功能如下:

Eigen的主頁上有一些更詳細的Eigen介紹。

Eigen3哪里下載?

這里是我下好的,這里是官網主頁,請自行下載,是個code包,不用安裝。

Eigen的配置

直接上圖了,附加包含目錄那里填上你放Eigen文件夾的位置即可。

Eigen的樣例代碼有沒有?

當然有,這篇文章重點就是這里!

以下是我整理的一些常用操作,基本的矩陣運算就在下面了,算是個入門吧~主要分以下幾部分:

建議大家放到編譯環境里去看,因為我這里有一些region的東西,編譯器下更方便看~

[cpp] view plain copyPRint?#include <iostream>  #include <Eigen/Dense>    //using Eigen::MatrixXd;  using namespace Eigen;  using namespace Eigen::internal;  using namespace Eigen::Architecture;    using namespace std;      int main()  {    #pragma region one_d_object        cout<<"*******************1D-object****************"<<endl;        Vector4d v1;      v1<< 1,2,3,4;      cout<<"v1=/n"<<v1<<endl;        VectorXd v2(3);      v2<<1,2,3;      cout<<"v2=/n"<<v2<<endl;        Array4i v3;      v3<<1,2,3,4;      cout<<"v3=/n"<<v3<<endl;        ArrayXf v4(3);      v4<<1,2,3;      cout<<"v4=/n"<<v4<<endl;    #pragma endregion    #pragma region two_d_object            cout<<"*******************2D-object****************"<<endl;      //2D objects:      MatrixXd m(2,2);        //method 1      m(0,0) = 3;      m(1,0) = 2.5;      m(0,1) = -1;      m(1,1) = m(1,0) + m(0,1);        //method 2      m<<3,-1,          2.5,-1.5;      cout <<"m=/n"<< m << endl;    #pragma endregion    #pragma region Comma_initializer        cout<<"*******************Initialization****************"<<endl;        int rows=5;      int cols=5;      MatrixXf m1(rows,cols);      m1<<( Matrix3f()<<1,2,3,4,5,6,7,8,9 ).finished(),          MatrixXf::Zero(3,cols-3),          MatrixXf::Zero(rows-3,3),          MatrixXf::Identity(rows-3,cols-3);      cout<<"m1=/n"<<m1<<endl;    #pragma endregion    #pragma region Runtime_info            cout<<"*******************Runtime Info****************"<<endl;        MatrixXf m2(5,4);      m2<<MatrixXf::Identity(5,4);      cout<<"m2=/n"<<m2<<endl;        MatrixXf m3;      m3=m1*m2;      cout<<"m3.rows()="<<m3.rows()<<"  ;  "               <<"m3.cols()="<< m3.cols()<<endl;            cout<<"m3=/n"<<m3<<endl;    #pragma endregion        #pragma region Resizing            cout<<"*******************Resizing****************"<<endl;        //1D-resize       v1.resize(4);      cout<<"Recover v1 to 4*1 array : v1=/n"<<v1<<endl;        //2D-resize      m.resize(2,3);      m.resize(Eigen::NoChange, 3);      m.resizeLike(m2);      m.resize(2,2);        #pragma endregion    #pragma region Coeff_access            cout<<"*******************Coefficient access****************"<<endl;        float tx=v1(1);      tx=m1(1,1);      cout<<endl;    #pragma endregion    #pragma  region Predefined_matrix        cout<<"*******************Predefined Matrix****************"<<endl;        //1D-object      typedef  Matrix3f   FixedXD;      FixedXD x;            x=FixedXD::Zero();      x=FixedXD::Ones();      x=FixedXD::Constant(tx);//tx is the value      x=FixedXD::Random();      cout<<"x=/n"<<x<<endl;        typedef ArrayXf Dynamic1D;      //或者 typedef VectorXf Dynamic1D      int size=3;      Dynamic1D xx;      xx=Dynamic1D::Zero(size);      xx=Dynamic1D::Ones(size);      xx=Dynamic1D::Constant(size,tx);      xx=Dynamic1D::Random(size);      cout<<"xx=/n"<<x<<endl;        //2D-object      typedef MatrixXf Dynamic2D;      Dynamic2D y;      y=Dynamic2D::Zero(rows,cols);      y=Dynamic2D::Ones(rows,cols);      y=Dynamic2D::Constant(rows,cols,tx);//tx is the value      y=Dynamic2D::Random(rows,cols);    #pragma endregion    #pragma region Arithmetic_Operators        cout<<"******************* Arithmetic_Operators****************"<<endl;        //add & sub      MatrixXf m4(5,4);      MatrixXf m5;      m4=m2+m3;      m3-=m2;        //product      m3=m1*m2;         //transposition      m5=m4.transpose();      //m5=m.adjoint();//伴隨矩陣             //dot product      double xtt;      cout<<"v1=/n"<<v1<<endl;      v2.resize(4);      v2<<VectorXd::Ones(4);      cout<<"v2=/n"<<v2<<endl;        cout<<"*************dot product*************"<<endl;      xtt=v1.dot(v2);      cout<<"v1.*v2="<<xtt<<endl;        //vector norm        cout<<"*************matrix norm*************"<<endl;      xtt=v1.norm();      cout<<"norm of v1="<<xtt<<endl;      xtt=v1.squaredNorm();      cout<<"SquareNorm of v1="<<xtt<<endl;    #pragma endregion    cout<<endl;  }  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博乐市| 获嘉县| 桃江县| 长海县| 鹰潭市| 武强县| 韩城市| 咸阳市| 肃南| 荥阳市| 新闻| 旅游| 巴马| 石景山区| 宽甸| 纳雍县| 库尔勒市| 银川市| 武鸣县| 安达市| 垣曲县| 宁都县| 庐江县| 延安市| 勃利县| 聊城市| 海林市| 香格里拉县| 皋兰县| 苏尼特左旗| 托克逊县| 黔江区| 兖州市| 汉沽区| 喀什市| 平湖市| 海宁市| 绥德县| 黄梅县| 亚东县| 普宁市|