[Eigen中文文档] 稠密分解方法目录

简介: 本文介绍了 Eigen 提供的处理稠密矩阵分解方法的目录。

文档总目录

英文原文(Catalogue of dense decompositions)

本文介绍了 Eigen 提供的处理稠密矩阵分解方法的目录。有关线性求解器和分解的介绍,请查看 线性代数和分解 。要大致了解不同分解的真实相对速度,请查看 基准测试

Eigen 提供的分解方法目录

描述 对矩阵的要求 速度 算法可靠性和准确性 计算秩 允许的计算(除了线性求解) Eigen提供线性求解器 Eigen的成熟度 优化
PartialPivLU 可逆 取决于条件数 不支持 - 成熟 按块处理,隐式多线程
FullPivLU - Proven 支持 - 成熟 -
HouseholderQR - 取决于条件数 不支持 正交化 成熟 按块处理
ColPivHouseholderQR - 支持 正交化 成熟 -
FullPivHouseholderQR - Proven 支持 正交化 一般 -
CompleteOrthogonalDecomposition - 支持 正交化 成熟 -
LLT 正定 非常快 取决于条件数 不支持 - 成熟 按块处理
LDLT 半正定或半负定 非常快 不支持 - 成熟 按块处理(暂时未支持)

奇异值和特征值分解

BDCSVD (divide & conquer) 最快的 SVD 算法之一 很好 支持 奇异值/向量、最小二乘法 是(并且做最小二乘法) 成熟 按块处理,隐式多线程
JacobiSVD (two-sided) 慢(但对于小矩阵来说很快) Proven 支持 奇异值/向量、最小二乘法 是(并且做最小二乘法) 成熟 R-SVD
SelfAdjointEigenSolver 自伴随 平均很块 支持 特征值/向量 - 成熟 -
ComplexEigenSolver 方阵 非常慢 取决于条件数 支持 特征值/向量 - 一般 2x2 和 3x3 的封闭形式
EigenSolver 实方阵 平均很慢 取决于条件数 支持 特征值/向量 - 一般 -
GeneralizedSelfAdjointEigenSolver 方阵 平均很块 取决于条件数 不支持 广义特征值/向量 - -

辅助分解

RealSchur 实方阵 平均很慢 取决于条件数 支持 - - 一般 -
ComplexSchur 方阵 非常慢 取决于条件数 支持 - - 一般 -
Tridiagonalization 自伴随 - - - 按块处理(暂时未支持)
HessenbergDecomposition 实方阵 一般 - - - 按块处理(暂时未支持)

注意:

  • LDLT 算法存在两种变体。Eigen 产生一个纯对角矩阵,因此它不能处理不定矩阵,这与 Lapack 的产生块对角矩阵不同。
  • 特征值、SVD 和 Schur 分解依赖于迭代算法。它们的收敛速度取决于特征值的分离程度。
  • JacobiSVD 是双边的,可以为方阵提供经过验证的最佳精度。对于非方阵,必须先使用 QR 预处理器。默认选择的 ColPivHouseholderQR 已经非常可靠,但如果希望长期测试它,请改用 FullPivHouseholderQR

术语

  • 自伴随(Selfadjoint)

    对于实数矩阵,selfadjoint 是对称的同义词。对于复数矩阵,selfadjoint 是 hermitian 的同义词。更一般地,矩阵 A 是自伴随的当且仅当它等于它的伴随 $A^*$。伴随也称为共轭转置。

  • 正/负定(Positive/negative definite)

    如果对于任何非零向量 $v$,有 $v^∗Av>0$ ,则自伴矩阵 $A$ 是正定的。同样,如果对于任何非零向量 $v$,有 $v^∗Av<0$ ,则它是负定的。

  • 正/负半定(Positive/negative semidefinite)

    对于任何非零向量 $v$,如果 $v^∗Av≥0$,则自伴矩阵 $A$ 是半正定矩阵。同理,对于任何非零向量 $v$,若 $v^∗Av≤0$ 则为负半定。

  • 按块处理(Blocking)

    意味着该算法可以按块处理矩阵,从而保证了大型矩阵的性能良好扩展。

  • 隐式多线程(Implicit Multi Threading (MT))

    意味着该算法可以通过 OpenMP 利用多核处理器。“隐式”意味着算法本身不是并行的,而是依赖于并行化的矩阵-矩阵乘积例程。

  • 显式多线程(Explicit Multi Threading (MT))

    意味着该算法明确并行化以通过 OpenMP 利用多核处理器。

  • 元展开器(Meta-unroller)

    意味着该算法会针对非常小的固定大小矩阵自动且显式展开。

相关文章
|
编译器 索引
[Eigen中文文档] 块操作
本文介绍了块操作。块是matrix或array的部分矩形元素。块表达式既可以用作右值也可以用作左值。与Eigen表达式一样,如果让编译器进行优化,则块操作的运行时间成本为零。
581 0
|
缓存 测试技术 编译器
[Eigen中文文档] 稠密矩阵分解函数对比
本文介绍了 Eigen 为各种方阵和过约束问题提供的稠密矩阵分解的速度比较。
643 0
|
XML 并行计算 算法
[Eigen中文文档] 求解稀疏线性系统
在Eigen中,有多种方法可用于求解稀疏系数矩阵的线性系统。由于此类矩阵的特殊表示,必须特别小心以获得良好的性能。本文列出了Eigen中可用的稀疏求解器。还介绍了所有这些线性求解器共同的主要步骤。根据矩阵的属性、所需的准确度,最终用户可以调整这些步骤以提高其代码的性能。请注意,并不需要深入了解这些步骤背后的内容:最后一节介绍了一个基础例程,可轻松使用以获取所有可用求解器的性能洞察。
1209 0
|
存储 编译器 C语言
[Eigen中文文档] 对未对齐数组断言的解释
本文将解释程序因断言失败而终止的问题。
665 0
|
存储 算法 NoSQL
[Eigen中文文档] 稀疏矩阵操作
在许多应用中(例如,有限元方法),通常要处理非常大的矩阵,其中只有少数系数不为零。在这种情况下,可以通过使用仅存储非零系数的特殊表示来减少内存消耗并提高性能。这样的矩阵称为稀疏矩阵。
1149 0
|
存储 并行计算 算法
[Eigen中文文档] 概述(总目录)
Eigen是基于线性代数的C ++模板库,主要用于矩阵,向量,数值求解器和相关算法。常用的Ceres、G2O等项目均是基于Eigen库。 本系列文章将通过官方文档带你了解Eigen。
3774 1
[Eigen中文文档] 求解线性最小二乘系统
本文介绍如何使用 Eigen 求解线性最小二乘系统。 本文讨论三种方法 SVD 分解、QR 分解和正规方程。其中,SVD 分解通常最准确但最慢,正规方程式最快但最不准确,QR 分解介于两者之间。
829 0
|
安全 编译器 C++
[Eigen中文文档] 矩阵与向量运算
本文章旨在提供有关如何使用 Eigen 在矩阵、向量和标量之间执行算术操作的概述和一些详细信息。
1202 0
|
存储 NoSQL API
[Eigen中文文档] Matrix类
在Eigen中,所有矩阵和向量都是Matrix模板类的对象。向量只是行数或者列数为1的特殊矩阵。
1181 1
|
编译器 Linux C语言
[Eigen中文文档] 从入门开始...
这是一个非常简短的Eigen入门文章。该文章有两层目的。对于想要尽快开始编码的人来说,该文章是对Eigen库的最简单介绍。你可以把该文章作为教程的第一部分,这更加详细的解释了Eigen库。看完这个教程后可以继续阅读 The Matrix class教程。
1475 0