zoukankan      html  css  js  c++  java
  • Eigen学习

      Eigen 是一个基于C++的线性代数库,其中实现大量常用的线性代数算法,包括常规矩阵计算,矩阵变换,矩阵分解,矩阵块操作。Eigen 广泛地应用在开源项目中,例如OpenCV,PCL(Point Cloud Library),ROS等。其实Eigen中算法都可以在matlab中找到,但是由于matlab是半开源的。所以,如果想在自己的项目中使用,还是要义无反顾地选择Eigen。Eigen目前的版本是3.3.4(2018.4.21)。

      来看Eigen官网的第一个例子:

      

     1 #include <iostream>
     2 #include <eigen3/Eigen/Dense>
     3 
     4 using Eigen::MatrixXd;
     5 
     6 int main(int argc ,char** argv)
     7 {
     8     MatrixXd:: m(2,2);
     9     m(0,0) = 3;
    10     m(1,0) = 2.5;
    11     m(0,1) = -1;
    12     m(1,1) = m(1,0) + m(0,1);
    13     std::cout<<m<<std::endl;
    14     return 0;
    15 }

    首先,代码引入了eigen的头文件,这里Eigen/Dense 一次引入了多个常用的模块。

      程序首先定义了一个2 x 2的矩阵。根据Eigen的定义 ,MatrixXd,这个类型可以拆成三部分来看,Matrix-X-d,Matrix表示定义的是一个矩阵,X表示定义的矩阵维度不确定,d表示double,指矩阵中每一个元素都是double类型的。m(2,2)指定了矩阵的大小是2x2的。从第9 行到第12 行则为矩阵中的元素进行了赋值操作。

      最后输出矩阵。

      在系统中运行输出如下:

      

    来看第二个例子,区分一下矩阵(Matrix)和向量(Vector)的区别:

     1 #include <iostream>
     2 #include <eigen3/Eigen/Dense>
     3 
     4 using namespace Eigen;
     5 uisng namespace std;
     6 
     7 int main(int argc ,char** argv)
     8 {
        // 创建一个3 x 3的随机矩阵,每个元素的范围都在(-1,1)之间
    9 MatrixXd m = MatrixXd::Random(3,3);
        // 将每个元素的范围设置在 (10,110)之间,MatrixXd::Cosntant() 用于产生每个元素都相同的矩阵,这里每个元素都是1.2
    10 m = (m + MatrixXd::Constant(3,3,1.2)) * 50; 11 cout<<"m="<<endl<<m<<endl;
        //创建一个长度为 3 的向量,
    12 VectorXd v(3);
        //为向量元素赋值,这里Eigen 将 << 操作符重载了。
    13 v<<1,2,3;
        //矩阵和向量做乘法并输出结果
    14 cout<<"m*v"<<m*v<<endl; 15 16 return 0; 17 }

    运行结果如下:

        

     上面的例子展示生成矩阵和向量的不同方法,其实向量就是列数为1 的矩阵。

    pp
  • 相关阅读:
    119. Pascal's Triangle II
    118. Pascal's Triangle
    112. Path Sum
    111. Minimum Depth of Binary Tree
    110. Balanced Binary Tree
    108. Convert Sorted Array to Binary Search Tree
    88. Merge Sorted Array
    83. Remove Duplicates from Sorted List
    70. Climbing Stairs
    陌陌面试经历
  • 原文地址:https://www.cnblogs.com/wangxiaoyong/p/8902555.html
Copyright © 2011-2022 走看看