Eigen库的使用

在用C++写MPC控制算法的时候,由于MPC算法包括矩阵运算,c++对矩阵的运算支持不是很好,而Eigen(读作 ['aɪgən])是一个简单易用的用于矩阵运算的库。

1.安装

首先在官网下载Eigen库,下载地址

解压缩文件可以得到以下的文件

我们主要使用的是其中的Eigen文件夹,这其中就是主要的文件。

由于Eigen都是由头文件组成的,所以包含相应的库路径即可。

在VS2017运行环境下

首先包含相应的库路径

在项目上右键,找到属性,添加相应的库路径即可,注意我这里包含到路径到Eigen这个文件夹,所以在包含头文件时,#include<Dense>即可,不需要写#include<Eigen/Dense>

在ROS系统里面,在你的项目的CMakeLists中包含相应的库路径即可。

2.简单使用

在添加了相应的路径之后,在程序开头写这几行即可使用了

#include <iostream>    
#include <Dense>    
using Eigen::MatrixXd;
using namespace std;

声明一个矩阵:

MatrixXd P(3, 6);
MatrixXd s(3, 1);
MatrixXd v(6, 1);

第一行表示生成一个3行6列的矩阵

向矩阵输入数据,顺序输入即可

v << -3, -2, -1, 3, 2, 1;

输入常见矩阵

MatrixXf m1(3,4);   //动态矩阵,建立3行4列。
MatrixXf m2(4,3);	//4行3列,依此类推。
MatrixXf m3(3,3);
Vector3f v1;		//若是静态数组,则不用指定行或者列
/* 初始化 */
m1 = MatrixXf::Zero(3,4);		//用0矩阵初始化,要指定行列数
m2 = MatrixXf::Zero(4,3);
m3 = MatrixXf::Identity(3,3);	//用单位矩阵初始化
v1 = Vector3f::Zero();			//同理,若是静态的,不用指定行列数

矩阵的一些操作

m.transpose();//矩阵转置
m.inverse();//矩阵求逆
m.determinant();//求行列式

一个个人要用的操作,矩阵分块

//如果定义一个尾数较高的矩阵,由10*10个三行二列矩阵构成
MartixXd A(3*10,2*10);
MartixXd a(3,2);
//如果相对A矩阵块的某一个子矩阵赋值
A.block(2*3,4*2,3,2) = a;//第一个第二个参数是子矩阵的开头位置,后面两个表示子矩阵的大小
//这样就将第二行第四个子矩阵赋值

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值