特色技术

专业从事预应力结构体系的设计、施工一体化解决方案

资讯分类

线性代数计算库Eigen(一)

  • 分类:程序技术
  • 作者:
  • 来源:
  • 发布时间:2018-10-09 15:15
  • 访问量:

【概要描述】(一)概论:  撰写本文的初衷,是并不打算自己重新造轮子,希望能够为预应力结构计算分析软件的研制和开发提供一些有益的探索。  三年前为了解决一个预应力板的次内力问题,自己动手用C++写过一个很复杂的Cmatrix类,意图一劳永逸地解决矩阵计算问题,可在编程过程中发现有很多复杂的问题无法解决,而且陷入了越解决越复杂的怪圈之中。现在经过多年的编程实践,终于明白了毕竟计算机领域的一大优势就在于我们能通过

线性代数计算库Eigen(一)

【概要描述】(一)概论:  撰写本文的初衷,是并不打算自己重新造轮子,希望能够为预应力结构计算分析软件的研制和开发提供一些有益的探索。  三年前为了解决一个预应力板的次内力问题,自己动手用C++写过一个很复杂的Cmatrix类,意图一劳永逸地解决矩阵计算问题,可在编程过程中发现有很多复杂的问题无法解决,而且陷入了越解决越复杂的怪圈之中。现在经过多年的编程实践,终于明白了毕竟计算机领域的一大优势就在于我们能通过

  • 分类:程序技术
  • 作者:
  • 来源:
  • 发布时间:2018-10-09 15:15
  • 访问量:
详情

  (一)概论:

  撰写本文的初衷,是并不打算自己重新造轮子,希望能够为预应力结构计算分析软件的研制和开发提供一些有益的探索。

  三年前为了解决一个预应力板的次内力问题,自己动手用C++写过一个很复杂的Cmatrix类,意图一劳永逸地解决矩阵计算问题,可在编程过程中发现有很多复杂的问题无法解决,而且陷入了越解决越复杂的怪圈之中。现在经过多年的编程实践,终于明白了毕竟计算机领域的一大优势就在于我们能通过开源的优秀代码,站在别人的肩膀上更进一步。

  Eigen是一款著名的、开源的、高层次的、基于C++模板的线性代数库,也是一个非常强大的矩阵运算库,能有效地支持矩阵和矢量运算、数值分析及其相关的算法,能支持稠密矩阵(Dense Matrix)和稀疏矩阵(Sparse Matrix)运算,并内置实现了对两种矩阵的求解器(Solver)。Eigen的接口清晰,稳定高效,使用类似Matlab的方式操作矩阵,功能绝对强大。Eigen包含了绝大部分你能用到的矩阵算法,同时提供许多第三方的接口。 Eigen 的稠密矩阵运算在某些平台上的性能甚至接近 Intel MKL 。虽然 Eigen 的求解器从效率来讲并不算最好,但将其作为矩阵容器是一个很好的选择,在求解大型问题时再通过连向诸如 SuiteSparse 等顶级求解器即可。谷歌公司著名的人工智能机器学习算法开源库TensorFlow 即使用了Eigen,可见Eigen的强大。在 3.3版本之后,Eigen引入了对其他 BLAS 的接口,支持了包括 MKL,OpenBLAS 等高性能库,使得其性能还可能更进一步提高。

  Eigen的一个重要特点是没有什么依赖的库,本身仅由许多头文件组成,因此非常轻量而易于跨平台。你要做的就是把用到的头文件和你的代码放在一起就可以了。它直接将库下载后放在项目目录下,然后包含头文件就能使用,非常方便,如图一所示。

图一、Eigen库的配置

  (二)Eigen的一些特性:

  (1)使用方便,无需预编译,调用开销小。

  (2)函数丰富,风格有点近似MATLAB,易上手。

  (3)速度中规中矩,比opencv快,比MKL、openBLAS慢。

  (4)支持整数、浮点数、复数,使用模板编程,可以为特殊的数据结构提供矩阵操作。比如在用ceres-solver进行做优化问题(比如bundleadjustment)的时候,有时候需要用模板编程写一个目标函数,ceres可以将模板自动替换为内部的一个可以自动求微分的特殊的double类型。而如果要在这个模板函数中进行矩阵计算,使用Eigen就会非常方便。

  (5)支持逐元素、分块、和整体的矩阵操作。

  (6)内含大量矩阵分解算法包括LU,LDLT,QR、SVD等等。

  (7)支持使用Intel MKL加速。

  (8)部分功能支持多线程。

  (9)稀疏矩阵支持良好,自Eigen3.2开始已经自带了SparseLU、SparseQR、共轭梯度(ConjugateGradient solver)、bi conjugate gradient stabilized solver等解稀疏矩阵的功能。同时提供SPQR、UmfPack等外部稀疏矩阵库的接口。

  (10)支持常用几何运算,包括旋转矩阵、四元数、矩阵变换、AngleAxis(欧拉角与Rodrigues变换)等等。

  (11)更新活跃,用户众多(Google、WilliowGarage也在用),使用Eigen的比较著名的开源项目有ROS(机器人操作系统)、PCL(点云处理库)、Google Ceres(优化算法)。OpenCV自带到Eigen的接口。

  总体来讲,如果经常做一些比较复杂的矩阵计算,或者想要跨平台的话,Eigen非常值得一用。(未完待续)

扫二维码用手机看