Eigen的简单使用说明

1 篇文章 0 订阅

参考文章:

https://blog.csdn.net/houjixin/article/details/8490941

Eigen矩阵运算开源库完全使用指南 - 程序员大本营 (pianshen.com)

帮助文档:https://pan.baidu.com/s/104CuzGo9KtW5Rtlvp5EuSg   sysu 

1. 前言

本篇文档主要目的为记录个人使用Eigen时遇到的一些问题以及使用心得等等,其实更多的是留给自己日后方便重新查看吧。目前遇到的最奇怪的问题就是动态矩阵相加报错的bug,如若遇到新的问题会再继续更新。

2. Eigen

Eigen库是一个开源的矩阵运算库,以矩阵为其基本数据类型,向量也是其中一种的特殊矩阵,所有矩阵数据类型都是由一个模板类Matrix生成的,其定义方式为:

Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols >

常用:

_Scalar:数值类型,支持用户自定义的数值类型。

_Rows:行数,或者 Dynamic,即动态输入。

_Cols:列数,或者 Dynamic,即动态输入。

不常用:

_Options:定义各类选项,包括行优先、列优先等。

_MaxRows:最大行数量。

_MaxCols:最大列数量。

3. 动态矩阵与静态矩阵

静态矩阵是指其大小在编译时确定,有以下几种定义方式:

Matrix3d a:表示元素类型为double,大小为3*3,其大小在编译时就知道。

Matrix b:其行列数不能以变量的形式输入。

动态矩阵是指其大小在运行时确定,有以下几种定义方式:

MatrixXd c(5, 2):虽然指定了矩阵的大小,但也是在运行时才确定,属动态矩阵。

Matrix d:赋值前需要先用resize()或者Random()函数进行初始化以确定其行列范围。

需注意:

  1. 固定大小的矩阵不能使用resize()来修改矩阵的大小。
  2. resize()函数会析构掉原来的数据,因此调用resize()函数之后将不能保证元素的值不改变。
  3. 使用”=”操作符操作动态矩阵时,如果左右两边的矩阵大小不等,则左边的动态矩阵的大小会被修改为右边的大小。
  4. Eigen重载了“<<”操作符,可用于对已初始化的矩阵进行赋值,赋值时会以行优先的顺序依次进行赋值,也可以使用矩阵或向量进行分块赋值,不过分块的大小不能超出矩阵的范围。
  5. 对于动态矩阵m,n与静态矩阵q,m + n会报错,m + q不会报错,m + n + q会报错,m + q + n, q + m + n不会报错。使用VectorXd定义的动态向量之间的加减运算不会报错。
  6. 对于动态矩阵m与静态矩阵q,2 * m不会报错,m * 2会报错,(m + q) * 2不会报错。

猜测:虽然动态矩阵已经是固定大小,但Eigen进行运算时对其行列的引用出错。

报错内容: 读取访问权限冲突。

4. 函数

基本还是很全面的,有需要的时候浏览帮助文档即可

  1. 对矩阵元素进行操作或计算的函数:cwisexxx系列。
  2. 各类基础矩阵计算函数等。
  3. 矩阵类型判断函数等。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值