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

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

  

 #include <iostream>
#include <eigen3/Eigen/Dense> using Eigen::MatrixXd; int main(int argc ,char** argv)
{
MatrixXd:: m(,);
m(,) = ;
m(,) = 2.5;
m(,) = -;
m(,) = m(,) + m(,);
std::cout<<m<<std::endl;
return ;
}

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

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

  最后输出矩阵。

  在系统中运行输出如下:

  

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

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

运行结果如下:

    

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

Eigen学习的更多相关文章

  1. Eigen学习之简单线性方程与矩阵分解

    Eigen提供了解线性方程的计算方法,包括LU分解法,QR分解法,SVD(奇异值分解).特征值分解等.对于一般形式如下的线性系统: 解决上述方程的方式一般是将矩阵A进行分解,当然最基本的方法是高斯消元 ...

  2. Eigen 学习之块操作

    Eigen 为 Matrix .Array 和  Vector提供了块操作方法.块区域可以被用作 左值 和 右值.在Eigen中最常用的块操作函数是 .block() . block() 方法的定义如 ...

  3. Eigen学习之Array类

    Eigen 不仅提供了Matrix和Vector结构,还提供了Array结构.区别如下,Matrix和Vector就是线性代数中定义的矩阵和向量,所有的数学运算都和数学上一致.但是存在一个问题是数学上 ...

  4. Eigen学习笔记2-Matrix类

    在Eigen中,所有的矩阵Matrix和向量Vector都是由Matrix类构造的.向量只不过是矩阵的特殊形式,只有一列(列向量)或者一行. Matrix模板类有6个参数,其中前三个参数是必须的.前三 ...

  5. Eigen学习笔记2:C++矩阵运算库Eigen介绍

    Eigen常规矩阵定义 1.使用 Eigen的使用在官网上有详细的介绍,这里对我学习过程中用到的基本操作进行介绍.首先是矩阵的定义.在矩阵类的模板参数共有6个.一般情况下我们只需要关注前三个参数即可. ...

  6. Eigen学习笔记1:在VS2015下Eigen(矩阵变换)的配置

    一.Eigen简介 Eigen是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法. Eigen适用范围广,支持包括固定大小.任意大小的所有矩阵操作,甚至是稀疏矩阵:支持 ...

  7. Eigen 学习笔记

    1.  初始化 //外部指针初始化 ]={...}; ] = ...; kernels[].mu = Vector3d(_mu0); kernels[].sigma_inv = Matrix3d(_s ...

  8. 数值优化(Numerical Optimization)学习系列-无梯度优化(Derivative-Free Optimization)

    数值优化(Numerical Optimization)学习系列-无梯度优化(Derivative-Free Optimization) 2015年12月27日 18:51:19 下一步 阅读数 43 ...

  9. Eigen 矩阵库学习笔记

    最近为了在C++中使用矩阵运算,简单学习了一下Eigen矩阵库.Eigen比Armadillo相对底层一点,但是只需要添加头文库即可使用,不使用额外的编译和安装过程. 基本定义 Matrix3f是3* ...

随机推荐

  1. C# WebBrowser设置代理

    WebBrowser控件是基于IE浏览器的,所以它的内核功能是依赖于IE. code: class IEProxy { //设置代理选项 private const int INTERNET_OPTI ...

  2. C#的async和awaiit的一些记录

    一,最近在学习abp的东西.发现其中作者在获取数据时,大量的使用了async和awaiit.好吧,因为不太懂,所以网上搜搜,在这里记录一下. 先来看一段代码.调用UpdateUserAsync会返回一 ...

  3. 小白学习之Code First(五)

    Fluent API:另一种配置实体类的方式,它比DataAnnorations提供了更多的配置 其中EntityTypeConfiguration这个类提供了重要的属性.方法来配置对应的实体类,可以 ...

  4. 微信小程序,关于设置data里面的数据。

    关于设置 data里面的数据 wxml: <view>{{userName}}</view> data: { userName:'张三', } 有两种方法 方法一:直接使用点关 ...

  5. hdu 1226

    超级密码 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  6. DHU 1788 Chinese remainder theorem again 中国剩余定理

    Chinese remainder theorem again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  7. Java开发中常用的设计模式(三)---建造者模式

    一. 模式结构 建造者模式主要包含四个角色: Product:产品角色. Builder:抽象建造者.它声明为创建一个Product对象的各个部件指定的抽象接口. ConcreteBuilder:具体 ...

  8. Linux:网络工具 nc

    虽然叫nc不过用起来非常方便. 选项 - Use IPv4 only - Use IPv6 only -U, --unixsock Use Unix domain sockets only -C, - ...

  9. CSS流体(自适应)布局下宽度分离原则——张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1463 一.简短的前言 ...

  10. 完善:HTML5表单新特征简介与举例——张鑫旭

    一.前言一撇 其实关于HTML5的表单特征早在去年“你必须知道的28个HTML5特征.窍门和技术”一文中就有所介绍(在第十一项),不过,有些遗憾的是,此部分的介绍是以视频形式展示的,其实,是视频还好啦 ...