Eigen学习
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学习的更多相关文章
- Eigen学习之简单线性方程与矩阵分解
Eigen提供了解线性方程的计算方法,包括LU分解法,QR分解法,SVD(奇异值分解).特征值分解等.对于一般形式如下的线性系统: 解决上述方程的方式一般是将矩阵A进行分解,当然最基本的方法是高斯消元 ...
- Eigen 学习之块操作
Eigen 为 Matrix .Array 和 Vector提供了块操作方法.块区域可以被用作 左值 和 右值.在Eigen中最常用的块操作函数是 .block() . block() 方法的定义如 ...
- Eigen学习之Array类
Eigen 不仅提供了Matrix和Vector结构,还提供了Array结构.区别如下,Matrix和Vector就是线性代数中定义的矩阵和向量,所有的数学运算都和数学上一致.但是存在一个问题是数学上 ...
- Eigen学习笔记2-Matrix类
在Eigen中,所有的矩阵Matrix和向量Vector都是由Matrix类构造的.向量只不过是矩阵的特殊形式,只有一列(列向量)或者一行. Matrix模板类有6个参数,其中前三个参数是必须的.前三 ...
- Eigen学习笔记2:C++矩阵运算库Eigen介绍
Eigen常规矩阵定义 1.使用 Eigen的使用在官网上有详细的介绍,这里对我学习过程中用到的基本操作进行介绍.首先是矩阵的定义.在矩阵类的模板参数共有6个.一般情况下我们只需要关注前三个参数即可. ...
- Eigen学习笔记1:在VS2015下Eigen(矩阵变换)的配置
一.Eigen简介 Eigen是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法. Eigen适用范围广,支持包括固定大小.任意大小的所有矩阵操作,甚至是稀疏矩阵:支持 ...
- Eigen 学习笔记
1. 初始化 //外部指针初始化 ]={...}; ] = ...; kernels[].mu = Vector3d(_mu0); kernels[].sigma_inv = Matrix3d(_s ...
- 数值优化(Numerical Optimization)学习系列-无梯度优化(Derivative-Free Optimization)
数值优化(Numerical Optimization)学习系列-无梯度优化(Derivative-Free Optimization) 2015年12月27日 18:51:19 下一步 阅读数 43 ...
- Eigen 矩阵库学习笔记
最近为了在C++中使用矩阵运算,简单学习了一下Eigen矩阵库.Eigen比Armadillo相对底层一点,但是只需要添加头文库即可使用,不使用额外的编译和安装过程. 基本定义 Matrix3f是3* ...
随机推荐
- 程序使用suid应注意的策略
安全要求程序应使用最小权限执行,然而有的程序由于特殊性,往往在执行某段代码的时候需要提高权限. 由于suid的容易使用特性,很多编程人员往往会直接使用它来实现提高权限的功能,而不是去做代码权限分离.这 ...
- MYSQL 中的日期操作(不包含跨年问题)
先从一个简单的SQL说起 当前week的第一天:select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 1 DAY): DATE_SUB() 函 ...
- Disconf 学习系列之Disconf 的模块架构图
不多说,直接上干货! Disconf 的模块架构主要包括: Disconf-Tools . Disconf-Web. Disconf-client 和 Disconf-Core. 每个模块的简单介 ...
- java的NIO和AIO
1. 什么是NIO NIO是New I/O的简称,与旧式的基于流的I/O方法相对,从名字看,它表示新的一套Java I/O标 准.它是在Java 1.4中被纳入到JDK中的,并具有以下特性: NIO是 ...
- mysql时间字符串按年/月/天/时分组查询 -- date_format
SELECT DATE_FORMAT( deteline, "%Y-%m-%d %H" ) , COUNT( * ) FROM test GROUP BY DATE_FORMAT( ...
- IOS项目之弹出动画一
小区宝首页导航栏左边有一个物业按钮,点击时会出现一个视图动画,之前用的是一个POP第三方,想着几个POP动画就要引用一堆的第三方有点麻烦,就试着自己写了一下,功能实现了,下一步就是优化将其封装一下.下 ...
- ubuntu18---安装python3.6下的virtualenv15.1.0
动态语言Python有着自己的虚拟环境,虚拟环境是程序执行时的独立执行环境,在同一台服务器中可以创建不同的虚拟环境供不同的系统使用,项目之间的运行环境保持独立性而相互不受影响.例如项目A可以在基于Py ...
- spring 下载地址及相关概念解析
http://www.springsource.org/download/community Release Candidate(RC)候选版本,用于指软件或操作系统的发布,一般与Debug版本相对应 ...
- cv程序员的日常_1
某天pom文件粘贴报红 然后我就问我同事 然后我就百度 https://blog.csdn.net/guoyiyun_tz/article/details/82115024 看完之后…emmmm没错啊 ...
- 高并发第十二弹:并发容器J.U.C -- Executor组件FutureTask、ForkJoin
从本章开始就要说 Executor 的东西了.本次讲的是一个很常用的FutureTask,和一个不是那么常用的ForkJoin,我们现在就来介绍吧 引言 大部分时候创建线程的2种方式,一种是直接继承T ...