当前位置: 首页 > news >正文

Eigen的主要类及其功能

Eigen 是一个高性能的 C++ 模板库,主要用于线性代数、矩阵和向量运算。它提供了许多类来支持各种数学运算,以下是 Eigen 的主要类及其功能分类。

1. 核心矩阵和向量类

这些是 Eigen 中最常用的类,用于表示矩阵和向量:

  • Matrix - 通用的动态或固定大小的矩阵类
    示例:Matrix<float, 3, 3>(3x3 浮点矩阵)、MatrixXd(动态大小的双精度矩阵)

  • Vector - 向量是矩阵的特例(列向量或行向量)
    示例:Vector3f(3 维单精度列向量)、VectorXd(动态大小的双精度列向量)

  • Array - 用于逐元素操作(非线性代数运算)
    示例:ArrayXXd(动态大小的双精度数组)

2. 矩阵和向量的初始化与操作

  • Map - 将现有 C/C++ 数组映射为 Eigen 对象(零拷贝操作)
    示例:Map<Vector3f>(data)(将 float[3] 转为 Eigen 向量)

  • Block - 表示矩阵或向量的子块
    示例:matrix.block<2,2>(1,1)(提取 2x2 的子矩阵)

  • Transpose - 矩阵转置视图

  • Conjugate - 共轭视图

  • Diagonal - 对角矩阵视图

3. 线性代数求解器

Eigen 提供了多种线性方程组求解器和分解方法:

  • 直接求解器(适用于稠密矩阵)

    • PartialPivLU - 部分主元 LU 分解

    • FullPivLU - 完全主元 LU 分解

    • HouseholderQR - QR 分解

    • ColPivHouseholderQR - 列主元 QR 分解

    • FullPivHouseholderQR - 完全主元 QR 分解

    • LLT - Cholesky 分解(正定矩阵)

    • LDLT - LDLT 分解(半正定矩阵)

  • 迭代求解器(适用于稀疏矩阵)

    • ConjugateGradient - 共轭梯度法

    • BiCGSTAB - 稳定双共轭梯度法

    • LeastSquaresConjugateGradient - 最小二乘共轭梯度法

4. 几何变换类

用于 2D/3D 几何变换(旋转、平移、缩放等):

  • Rotation2D - 2D 旋转

  • AngleAxis - 轴角表示的 3D 旋转

  • Quaternion - 四元数表示的旋转

  • Transform - 仿射或射影变换(4x4 矩阵)
    示例:Transform<float, 3, Affine>(3D 仿射变换)

5. 稀疏矩阵类

用于处理稀疏矩阵:

  • SparseMatrix - 稀疏矩阵表示(如 SparseMatrix<double>

  • SparseVector - 稀疏向量

  • 稀疏矩阵分解

    • SimplicialLLT / SimplicialLDLT - 稀疏 Cholesky 分解

    • SparseLU - 稀疏 LU 分解

    • SparseQR - 稀疏 QR 分解

6. 其他工具类

  • EigenBase - 所有矩阵/表达式的基类

  • DenseBase - 稠密矩阵的基类

  • IO - 矩阵的输入/输出(如 Eigen::IOFormat

  • STL 兼容接口 - 允许 Eigen 对象与 STL 容器交互

示例代码片段

cpp

#include <Eigen/Dense>
using namespace Eigen;Matrix3f A;                   // 3x3 浮点矩阵
Vector4f b;                   // 4 维浮点向量
A << 1, 2, 3, 4, 5, 6, 7, 8, 9; // 初始化
b = A.col(0);                 // 提取第一列// 解线性方程组 Ax = b
Vector3f x = A.partialPivLu().solve(b);// 几何变换
Transform<float, 3, Affine> t = AngleAxisf(M_PI/2, Vector3f::UnitZ());

Eigen 的模块化设计允许用户仅包含需要的头文件(如 <Eigen/Dense> 或 <Eigen/Sparse>)。具体文档可参考 Eigen 官方文档。

相关文章:

  • 《数据库系统工程师》-B站-视频截图整理-2021-23
  • JavaScript原生实现简单虚拟列表(列表不定高)
  • 【数据结构刷题】顺序表与ArrayList
  • 2025.04.26-美团春招笔试题-第一题
  • 使用 LangGraph 和 Elasticsearch 构建强大的 RAG 工作流
  • JDBC数据库操作中如何保证最后关闭了所占用的资源——try用法的细节控制
  • 【信息融合】卡尔曼滤波EKF毫米波雷达和红外数据信息融合
  • 参考平面的宽度-信号与电源完整性分析
  • uniapp开发03-轮播图组件swiper的简单使用案例
  • Webpack模块打包工具
  • [计算机科学#2]:从继电器到晶体管的电子计算机发展史(庞然大物的进化)
  • 计算机视觉与深度学习 | LSTM原理及与卡尔曼滤波的融合
  • 分享基于时间moment的时间快捷工具
  • Springboot基础篇
  • 物联网安全解决方案介绍:有效利用现有的下一代防火墙
  • Volcano 进阶实战 (二) - (网络拓扑/负载感知)调度
  • 反爬加密字体替换机制解析
  • 人形机器人:开启AI与物理世界交互新时代
  • springboot应用使用shell脚本打包成部署压缩包(支持xjar)
  • spring响应式编程系列:异步生产数据
  • 校长套取学生伙食费设小金库,重庆通报6起违反八项规定典型问题
  • 合肥一季度GDP为3003.88亿元,同比增长6.6%
  • 万能险新规落地:保险期限不得低于五年,明确万能险销售“负面清单”
  • 一季度煤价持续下探,多家煤炭巨头营收下滑、净利润降约两成
  • 官方披露:临汾昔日“明星官员”宿青平已于去年落马
  • 中国平安一季度净赚270亿降逾26%,营运利润增2.4%