创建5a 网站建设要求,如何做一个网站赚钱,微信上做网站编辑,教育培训网站制作专栏系列文章如下#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 本章将介绍视觉SLAM的基本问题之一#xff1a;如何描述刚体在三维空间中的运动#xff1f; Eigen…专栏系列文章如下 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 本章将介绍视觉SLAM的基本问题之一如何描述刚体在三维空间中的运动 Eigen
Eigen是一个C开源线性代数库。它提供了快速的有关矩阵的线性代数运算还包括解方程等功能。
请输入以下命令进行安装
sudo apt-get install libeigen3-dev与其他库相比Eigen的特殊之处在于它是一个纯用头文件搭建起来的库这意味着你只能找到它的头文件而没有类似.so或者.a的二进制文件。在使用时只需引入Eigen的头文件即可不需要链接库文件因为它没有库文件。接下来对这个库的使用做一些示例
#include iostreamusing namespace std;#include ctime
// Eigen 核心部分
#include Eigen/Core
// 稠密矩阵的代数运算逆特征值等
#include Eigen/Denseusing namespace Eigen;int main(int argc, char **argv) {// Eigen 中所有向量和矩阵都是Eigen::Matrix它是一个模板类。它的前三个参数为数据类型行列// 声明一个2*3的float矩阵Matrixfloat, 2, 3 matrix_23;// 同时Eigen 通过 typedef 提供了许多内置类型不过底层仍是Eigen::Matrix// 例如 Vector3d 实质上是 Eigen::Matrixdouble, 3, 1即三维向量Vector3d v_3d;// 这是一样的Matrixfloat, 3, 1 vd_3d;// Matrix3d 实质上是 Eigen::Matrixdouble, 3, 3Matrix3d matrix_33 Matrix3d::Zero(); //初始化为零// 如果不确定矩阵大小可以使用动态大小的矩阵Matrixdouble, Dynamic, Dynamic matrix_dynamic;// 更简单的MatrixXd matrix_x;// 这种类型还有很多我们不一一列举// 下面是对Eigen阵的操作// 输入数据初始化matrix_23 1, 2, 3, 4, 5, 6;// 输出cout matrix 2x3 from 1 to 6: \n matrix_23 endl;// 用()访问矩阵中的元素cout print matrix 2x3: endl;for (int i 0; i 2; i) {for (int j 0; j 3; j) cout matrix_23(i, j) \t;cout endl;}return 0;
}输出结果
matrix 2x3 from 1 to 6:
1 2 3
4 5 6
print matrix 2x3:
1 2 3
4 5 6 矩阵运算
#include iostreamusing namespace std;#include ctime
#include Eigen/Core
#include Eigen/Denseusing namespace Eigen;int main(int argc, char **argv) {// Eigen 中所有向量和矩阵都是Eigen::Matrix它是一个模板类。它的前三个参数为数据类型行列// 声明一个2*3的float矩阵Matrixfloat, 2, 3 matrix_23;Vector3d v_3d;Matrixfloat, 3, 1 vd_3d;// Matrix3d 实质上是 Eigen::Matrixdouble, 3, 3Matrix3d matrix_33 Matrix3d::Zero(); //初始化为零// 下面是对Eigen阵的操作// 输入数据初始化matrix_23 1, 2, 3, 4, 5, 6;// 矩阵和向量相乘实际上仍是矩阵和矩阵v_3d 3, 2, 1;vd_3d 4, 5, 6;// 但是在Eigen里你不能混合两种不同类型的矩阵像这样是错的// Matrixdouble, 2, 1 result_wrong_type matrix_23 * v_3d;// 应该显式转换Matrixdouble, 2, 1 result matrix_23.castdouble() * v_3d;cout [1,2,3;4,5,6]*[3,2,1] result.transpose() endl;Matrixfloat, 2, 1 result2 matrix_23 * vd_3d;cout [1,2,3;4,5,6]*[4,5,6]: result2.transpose() endl;// 一些矩阵运算// 四则运算就不演示了直接用-*/即可。matrix_33 Matrix3d::Random(); // 随机数矩阵cout random matrix: \n matrix_33 endl;cout transpose: \n matrix_33.transpose() endl; // 转置cout sum: matrix_33.sum() endl; // 各元素和cout trace: matrix_33.trace() endl; // 迹cout times 10: \n 10 * matrix_33 endl; // 数乘cout inverse: \n matrix_33.inverse() endl; // 逆cout det: matrix_33.determinant() endl; // 行列式// 特征值// 实对称矩阵可以保证对角化成功SelfAdjointEigenSolverMatrix3d eigen_solver(matrix_33.transpose() * matrix_33);cout Eigen values \n eigen_solver.eigenvalues() endl;cout Eigen vectors \n eigen_solver.eigenvectors() endl;return 0;
} 输出结果
[1,2,3;4,5,6]*[3,2,1]10 28
[1,2,3;4,5,6]*[4,5,6]: 32 77
random matrix: 0.680375 0.59688 -0.329554
-0.211234 0.823295 0.5364590.566198 -0.604897 -0.444451
transpose: 0.680375 -0.211234 0.5661980.59688 0.823295 -0.604897
-0.329554 0.536459 -0.444451
sum: 1.61307
trace: 1.05922
times 10: 6.80375 5.9688 -3.29554
-2.11234 8.23295 5.364595.66198 -6.04897 -4.44451
inverse:
-0.198521 2.22739 2.83571.00605 -0.555135 -1.41603-1.62213 3.59308 3.28973
det: 0.208598
Eigen values
0.02428990.9921541.80558
Eigen vectors
-0.549013 -0.735943 0.3961980.253452 -0.598296 -0.760134
-0.796459 0.316906 -0.514998解方程
#include iostream
#include ctime
#include Eigen/Core
#include Eigen/Dense
using namespace std;
using namespace Eigen;#define MATRIX_SIZE 50int main(int argc, char **argv) {// 解方程// 我们求解 matrix_NN * x v_Nd 这个方程// N的大小在前边的宏里定义它由随机数生成// 直接求逆自然是最直接的但是求逆运算量大Matrixdouble, MATRIX_SIZE, MATRIX_SIZE matrix_NN MatrixXd::Random(MATRIX_SIZE, MATRIX_SIZE);matrix_NN matrix_NN * matrix_NN.transpose(); // 保证半正定Matrixdouble, MATRIX_SIZE, 1 v_Nd MatrixXd::Random(MATRIX_SIZE, 1);clock_t time_stt clock(); // 计时// 直接求逆Matrixdouble, MATRIX_SIZE, 1 x matrix_NN.inverse() * v_Nd;cout time of normal inverse is 1000 * (clock() - time_stt) / (double) CLOCKS_PER_SEC ms endl;cout x x.transpose() endl;// 通常用矩阵分解来求例如QR分解速度会快很多time_stt clock();x matrix_NN.colPivHouseholderQr().solve(v_Nd);cout time of Qr decomposition is 1000 * (clock() - time_stt) / (double) CLOCKS_PER_SEC ms endl;cout x x.transpose() endl;// 对于正定矩阵还可以用cholesky分解来解方程time_stt clock();x matrix_NN.ldlt().solve(v_Nd);cout time of ldlt decomposition is 1000 * (clock() - time_stt) / (double) CLOCKS_PER_SEC ms endl;cout x x.transpose() endl;return 0;
}结果如下
time of normal inverse is 2.606ms
x -55.7896 -298.793 130.113 -388.455 -159.312 160.654 -40.0416 -193.561 155.844 181.144 185.125 -62.7786 19.8333 -30.8772 -200.746 55.8385 -206.604 26.3559 -14.6789 122.719 -221.449 26.233 -318.95 -78.6931 50.1446 87.1986 -194.922 132.319 -171.78 -4.19736 11.876 -171.779 48.3047 84.1812 -104.958 -47.2103 -57.4502 -48.9477 -19.4237 28.9419 111.421 92.1237 -288.248 -23.3478 -275.22 -292.062 -92.698 5.96847 -93.6244 109.734
time of Qr decomposition is 3.419ms
x -55.7896 -298.793 130.113 -388.455 -159.312 160.654 -40.0416 -193.561 155.844 181.144 185.125 -62.7786 19.8333 -30.8772 -200.746 55.8385 -206.604 26.3559 -14.6789 122.719 -221.449 26.233 -318.95 -78.6931 50.1446 87.1986 -194.922 132.319 -171.78 -4.19736 11.876 -171.779 48.3047 84.1812 -104.958 -47.2103 -57.4502 -48.9477 -19.4237 28.9419 111.421 92.1237 -288.248 -23.3478 -275.22 -292.062 -92.698 5.96847 -93.6244 109.734
time of ldlt decomposition is 1.38ms
x -55.7896 -298.793 130.113 -388.455 -159.312 160.654 -40.0416 -193.561 155.844 181.144 185.125 -62.7786 19.8333 -30.8772 -200.746 55.8385 -206.604 26.3559 -14.6789 122.719 -221.449 26.233 -318.95 -78.6931 50.1446 87.1986 -194.922 132.319 -171.78 -4.19736 11.876 -171.779 48.3047 84.1812 -104.958 -47.2103 -57.4502 -48.9477 -19.4237 28.9419 111.421 92.1237 -288.248 -23.3478 -275.22 -292.062 -92.698 5.96847 -93.6244 109.734这个例程演示了Eigen矩阵的基本操作与运算。要编译它需要在CMakeLists.txt里指定Eigen的头文件目录
#添加头文件
include_directories(/usr/include/eigen3)因为Eigen库只有头文件所以不需要再用target_link_libraries语句将程序链接到库上。 文章转载自: http://www.morning.mzskr.cn.gov.cn.mzskr.cn http://www.morning.sskhm.cn.gov.cn.sskhm.cn http://www.morning.zzgtdz.cn.gov.cn.zzgtdz.cn http://www.morning.fbmrz.cn.gov.cn.fbmrz.cn http://www.morning.hdtcj.cn.gov.cn.hdtcj.cn http://www.morning.tqrxm.cn.gov.cn.tqrxm.cn http://www.morning.rmyqj.cn.gov.cn.rmyqj.cn http://www.morning.rldph.cn.gov.cn.rldph.cn http://www.morning.jxmjr.cn.gov.cn.jxmjr.cn http://www.morning.mljtx.cn.gov.cn.mljtx.cn http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn http://www.morning.yrbp.cn.gov.cn.yrbp.cn http://www.morning.rqfkh.cn.gov.cn.rqfkh.cn http://www.morning.xjnjb.cn.gov.cn.xjnjb.cn http://www.morning.lqrpk.cn.gov.cn.lqrpk.cn http://www.morning.dzgyr.cn.gov.cn.dzgyr.cn http://www.morning.zxdhp.cn.gov.cn.zxdhp.cn http://www.morning.wmrgp.cn.gov.cn.wmrgp.cn http://www.morning.coffeedelsol.com.gov.cn.coffeedelsol.com http://www.morning.mqwnp.cn.gov.cn.mqwnp.cn http://www.morning.wdrxh.cn.gov.cn.wdrxh.cn http://www.morning.ypzsk.cn.gov.cn.ypzsk.cn http://www.morning.hrrmb.cn.gov.cn.hrrmb.cn http://www.morning.xwbld.cn.gov.cn.xwbld.cn http://www.morning.tztgq.cn.gov.cn.tztgq.cn http://www.morning.zfhzx.cn.gov.cn.zfhzx.cn http://www.morning.fylsz.cn.gov.cn.fylsz.cn http://www.morning.lwtfx.cn.gov.cn.lwtfx.cn http://www.morning.mlwhd.cn.gov.cn.mlwhd.cn http://www.morning.jjrsk.cn.gov.cn.jjrsk.cn http://www.morning.bksbx.cn.gov.cn.bksbx.cn http://www.morning.vjwkb.cn.gov.cn.vjwkb.cn http://www.morning.qmbtn.cn.gov.cn.qmbtn.cn http://www.morning.lrwsk.cn.gov.cn.lrwsk.cn http://www.morning.lwsct.cn.gov.cn.lwsct.cn http://www.morning.jhrtq.cn.gov.cn.jhrtq.cn http://www.morning.mmjyk.cn.gov.cn.mmjyk.cn http://www.morning.lhrxq.cn.gov.cn.lhrxq.cn http://www.morning.yltnl.cn.gov.cn.yltnl.cn http://www.morning.wgkz.cn.gov.cn.wgkz.cn http://www.morning.mwns.cn.gov.cn.mwns.cn http://www.morning.sdktr.com.gov.cn.sdktr.com http://www.morning.mcwgn.cn.gov.cn.mcwgn.cn http://www.morning.ktmnq.cn.gov.cn.ktmnq.cn http://www.morning.lktjj.cn.gov.cn.lktjj.cn http://www.morning.ccpnz.cn.gov.cn.ccpnz.cn http://www.morning.hmwjk.cn.gov.cn.hmwjk.cn http://www.morning.bmmyx.cn.gov.cn.bmmyx.cn http://www.morning.dmthy.cn.gov.cn.dmthy.cn http://www.morning.lqpzb.cn.gov.cn.lqpzb.cn http://www.morning.tgtrk.cn.gov.cn.tgtrk.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.rnqyy.cn.gov.cn.rnqyy.cn http://www.morning.sbczr.cn.gov.cn.sbczr.cn http://www.morning.kkwbw.cn.gov.cn.kkwbw.cn http://www.morning.zkqsc.cn.gov.cn.zkqsc.cn http://www.morning.qtyfb.cn.gov.cn.qtyfb.cn http://www.morning.brbnc.cn.gov.cn.brbnc.cn http://www.morning.ztnmc.cn.gov.cn.ztnmc.cn http://www.morning.tgczj.cn.gov.cn.tgczj.cn http://www.morning.krlsz.cn.gov.cn.krlsz.cn http://www.morning.sqgsx.cn.gov.cn.sqgsx.cn http://www.morning.fksdd.cn.gov.cn.fksdd.cn http://www.morning.rwqj.cn.gov.cn.rwqj.cn http://www.morning.psqs.cn.gov.cn.psqs.cn http://www.morning.jqlx.cn.gov.cn.jqlx.cn http://www.morning.knqck.cn.gov.cn.knqck.cn http://www.morning.cznsq.cn.gov.cn.cznsq.cn http://www.morning.rpwck.cn.gov.cn.rpwck.cn http://www.morning.ljcjc.cn.gov.cn.ljcjc.cn http://www.morning.bqrd.cn.gov.cn.bqrd.cn http://www.morning.thrgp.cn.gov.cn.thrgp.cn http://www.morning.zwwhq.cn.gov.cn.zwwhq.cn http://www.morning.mnrqq.cn.gov.cn.mnrqq.cn http://www.morning.jbpodhb.cn.gov.cn.jbpodhb.cn http://www.morning.qddtd.cn.gov.cn.qddtd.cn http://www.morning.kflbf.cn.gov.cn.kflbf.cn http://www.morning.fjzlh.cn.gov.cn.fjzlh.cn http://www.morning.brlcj.cn.gov.cn.brlcj.cn http://www.morning.lxkhx.cn.gov.cn.lxkhx.cn