直接法 读书笔记 01 第1章 引言

第 1 章 引言

本书阐述了用于直接求解稀疏线性系统的稀疏矩阵算法基础,内容涵盖从理论到算法、数据结构乃至实际可运行代码。本书选取算法时遵循以下目标:**算法必须体现稀疏矩阵算法背后的重要理论;算法必须在运行时间和内存使用上达到渐进最优,或在实际应用中快速高效;**算法必须简洁明了,易于理解,且篇幅足够简短以便在本书完整呈现;算法必须涵盖广泛的矩阵运算;算法必须精确且稳健

本书算法以伪代码、MATLAB 和 C 语言的混合形式呈现,因此假定读者具备这些知识。同时,还要求具备线性代数、图论、算法和数据结构的基础知识。这些背景知识将在下文及关于 C 语言的附录中进行回顾。

第 2 章介绍基本的数据结构和算法,包括矩阵乘法、加法、转置和数据结构操作。第 3 章讨论三角方程组的求解。第 4 至第 6 章介绍三种最常用的分解:Cholesky 分解、QR 分解和 LU 分解。专门针对对称不定矩阵的分解方法不在讨论之列。4.10 节介绍在低秩更新后,对稀疏 Cholesky 分解进行更新和降级的方法。第 7 章讨论能够减少计算量和内存需求的排序方法。第 8 章利用第 1 至第 7 章介绍的理论和算法来求解稀疏线性系统 ,其中 A 可以是对称正定、非对称或矩形的,类似于 MATLAB 中的反斜杠运算符 x=A\b(当 A 稀疏且 b 是稠密列向量时)。第 9 章总结了 CSparse 稀疏矩阵软件包。最后,第 10 章解释如何在 MATLAB 中使用稀疏矩阵

为避免打断论述的流畅性,各章节正文中极少引用文献。相关讨论置于每章末尾的"延伸阅读"部分,该部分概述了与该章节相关的软件、书籍和论文。书中陈述的定理是此规则的特例。每章的最后一部分是该章的习题。

1.1 线性代数

下文简要描述线性代数的定义和符号。一个 m×n 矩阵用大写字母表示,,其中 表示元素为实数的 m×n 矩阵集合。对应的小写字母加下标 表示矩阵 A 的第 i 行、第 j 列的元素。它也可以表示 A 的行向量、列向量或块子矩阵(如下所述),但在这种情况下,i 和 j 通常是较小的常数(例如 )。L 是下三角矩阵,U 和 R 是上三角矩阵,I 表示单位矩阵(除了 外其他元素为零)。若当 ,则矩阵 A 是下三角矩阵;若当 i > j 时 ,则是上三角矩阵。小写字母表示向量 ,但是字母 i 到 n 则始终表示整数标量。行向量用上标表示,。带有下标时, 可以表示标量或向量,具体取决于上下文。小写希腊字母 表示标量。矩阵 A 的第 j 列记为 ,或在 MATLAB 中记为 A(:,j)。类似地,表示 A 的第 i 行,或在 MATLAB 中记为 A(i,:)

实数矩阵 A 的转置 定义为 。矩阵加法 定义为 。标量可以与矩阵相乘; 定义为 。矩阵乘法,,定义为:

其中 。矩阵乘法要求 A 的列数等于 B 的行数。两个向量 x 和 y 的点积是标量 。两个向量 x 和 y 的外积是矩阵 ;计算 称为秩 1 更新。如果 X 和 Y 是具有 k 列的矩阵, 被称为秩 k 外积(即使 X 和 Y 的数值秩不为 k,也常用此术语)。计算 称为秩 k 更新。

分块矩阵是指每个元素可以是矩阵、向量或标量的矩阵。假设 m×n 矩阵 A 的行被划分为 r 个子集,列被划分为 c 个子集;A 可以写成一个 r×c 的分块矩阵,

其中如果 是第 i 个行子集 的大小,是第 j 个列子集 的大小,则 的矩阵。两个分块矩阵如果划分方式完全相同,则可以相加 。两个分块矩阵可以相乘,如果 A 的列的划分方式与 B 的行的划分方式完全相同;C 的行与 A 的行的划分方式相同,C 的列与 B 的列的划分方式相同。如果 C(此处 C 应理解为划分的数量,为免混淆,假设 A 的列和 B 的行被划分为 N 块)是 A 的列和 B 的行的划分数,则矩阵乘法公式变为:

一组向量 线性无关,当且仅当 " 意味着所有 为零 "。一组向量的张成空间是可以写成该组向量的线性组合的所有向量的集合:

矩阵 A 的值域是其列向量的张成空间。矩阵 A 的秩是其列向量中线性无关子集的最大规模。一个 n×n 矩阵如果秩小于 n,则是奇异的。一个 m×n 矩阵如果秩小于 min(m, n),则是秩亏的 ;否则,它是满秩的

列向量 或行向量 1-范数,其 2-范数,其 -范数是 。矩阵的 1-范数是其列向量 1-范数中的最大值 。矩阵的 -范数是其行向量 1-范数中的最大值

矩阵 的逆是 ,其中 。仅当 是方阵且非奇异时才存在。两个向量 如果 ,则是正交的。矩阵 如果满足 ,则是标准正交的。一个实数方阵标准正交矩阵 称为正交矩阵,此时 (即,若 正交,则 )。如果 是正交矩阵,向量 的 2-范数与其乘积 的 2-范数相同

m×n 矩阵 第 k 条对角线是一个向量 d,由满足 j - i = k 的元素集合 组成。术语"对角线"单独使用时,指第 0 条对角线或主对角线。 的第 k 个对角元是

矩阵或向量中非零元素(简称非零元)的数量记为 ,而 表示标量 的绝对值。

置换矩阵 是单位矩阵的行置换列置换 的任意给定行或列包含一个等于 1 的非零元。一个方阵非奇异矩阵 LU 分解形式为 ,其中 是下三角矩阵, 是上三角矩阵。带有部分选主元和行交换时,分解为 矩阵 是正定的,当且仅当对于所有非零向量 ,都有 。如果 ,则是半正定的。一个方阵对称正定矩阵 的 Cholesky 分解形式为 ,其中 下三角矩阵且对角元为正。出于稳定性考虑不需要选主元。一个方阵 按行对角占优,如果对所有 i 满足 。如果对所有 i 满足 ,则是严格按行对角占优。如果 是(严格)按行对角占优,则 是(严格)按列对角占优一个严格对角占优的方阵是非奇异的对于任何对角占优矩阵(按行或按列),无需选主元的高斯消元法(LU 分解的一种形式)是稳定的

一个矩形矩阵 的 QR 分解是 ,其中 是正交矩阵, 是上三角矩阵。对于一个方阵 对特征值 及其特征向量 成立。

集合用花体字母表示:, , , , , , , , 。这些通常来源于相应矩阵或向量的非零元模式。例如,。当下文明确时,下标中的 * 号可以省略。

术语"稠密"和"稀疏"指用于存储矩阵的数据结构。一个矩阵 如果是作为具有 mn 个元素的 m 行 n 列的完整数组存储,则是稠密的。这在 MATLAB 中称为满矩阵。所有元素都被存储,即使其中一些为零。稀疏矩阵存储在一个可以利用稀疏性的数据结构中,不存储数值为零的元素。数值为零的元素也可能存储在稀疏矩阵中,通常是由于数值消去造成的。

1.2 图论、算法和数据结构

由节点集 和连接这些节点的边集 组成。

在无向图中, 是同一条边;在有向图中,它们是不同的边。在有向图中,可以存在边 而没有边

节点 的邻居,或者说 的邻接集,是 。对于有向图,这是节点 的出邻接。节点 的入邻接是 。在无向图中,节点的出邻接和入邻接是相同的。

的邻接矩阵 是一个二进制的 n×n 矩阵,如果 ,否则 。如果 是无向的,则 对称;否则可能不对称。图也可以用一组 n 个邻接表来表示,。这建立了 n×n 矩阵 的稀疏模式与其对应的无向或有向图 之间的联系。对角元 是自环边 ;它通常从 中排除。无向图中节点的度是其邻接表的大小,。如果两个图可以通过对其节点重新编号而变得相同,则它们是同构的。

如果 a = i 或 b = i,则节点 i 与边 (a, b) 关联;边 (a, b) 也被称为与节点 i 关联。图 的节点诱导子图 由节点子集 定义,其中 。边诱导子图 由边集 定义,其中节点集 是所有与 中任何边关联的节点。

如果一个图满足 ,即每对节点之间都有边,则该图是完全连通的。一个团就是一个完全连通的子图。

长度为 k 的路径 是一个节点序列 ,其中序列中每对相邻节点之间存在边 。如果没有任何节点出现超过一次,则该路径是简单的。如果图中存在路径 ,则节点 j 可以从节点 i 到达。在图 中从节点 i 可到达的所有节点集合是 。如果一个图中存在从任何节点到任何其他节点的路径,则该图是强连通的。也就是说,对于任何节点 i, 是整个图。如果一个图的底层无向图是强连通的,则该图是连通的。图 的底层无向图与 G 相同,但忽略所有边的方向。

一个圈是一条路径 i → ... → i,其中第一个和最后一个节点相同。如果除了 i 本身之外,没有任何边或节点出现超过一次,则它是一个简单圈。没有圈的图是无环的。有向无环图常简称为 DAG。无向无环图是森林。树是连通的森林。在树中,每对节点之间存在唯一的简单路径。在有根树中,指定一个节点为根 r。在路径 i → r 中,跟在节点 i 后面的那个唯一节点称为 i 的父节点 p;根节点本身没有父节点。节点 i 是 p 的子节点;一个节点最多有一个父节点,但可以有多个子节点。没有子节点的节点是叶子节点。路径 i → ... → r 是节点 i 的祖先集合。节点 i 是所有在路径 i → ... → r 上的节点的后代。节点 i 的真祖先或真后代集合不包括节点 i 本身。以节点 i 为根的子树由节点 i 及其后代诱导的子图构成。在后序排序的树中,任何节点 k 的 d 个真后代是节点 k-d 到 k-1。

二分图是一种无向图,其节点被划分为两个子集,并且每条边都连接两个不同子集中的节点。节点分离器是图 G = (V, E) 的节点子集 S ⊆ V,使得由节点 V \ S 诱导的图是不连通的。边分离器是图 G = (V, E) 的边子集 S ⊆ E,使得图 G' = (V, E \ S) 是不连通的。节点覆盖是节点集 S ⊆ V,使得所有边 E 都至少与 S 中的一个节点关联。

非正式地说,渐进符号描述了函数 f(x) 的本质:它作为 x 的函数增长有多快。标量因子和低阶项被忽略。例如,所有二次多项式 都是 ,除非 。更正式地说,函数 ,如果存在正常数 c 和 ,使得对于所有 ,有 。这提供了一个渐进上界。渐进下界的定义类似。函数 ,如果存在正常数 c 和 ,使得对于所有 ,有 。如果 同时是 ,那么它有一个紧的渐进界

算法分析指的是确定算法运行时间、内存使用等方面渐进界的方法。运行时间和其他统计量通常表示为输入大小的函数。最坏情况分析找到一个总是成立的上界(O(...)),无论输入如何。平均情况分析着眼于典型情况。这两者通常是相同的,但并非总是如此。算法的时间复杂度是其运行时间的渐进界。

摊还分析考虑一系列相关操作的总运行时间。如果 n 次操作的时间是 T(n),那么一次操作的摊还时间是 T(n)/n。例如,如果一个函数被调用 n 次,n-1 次花费 1 个单位时间,但有一次花费 n+1 个单位时间,则对于该函数的任何一次使用,最坏情况时间复杂度是 O(n)。然而,如果将 n 次操作的所有开销加在一起,并分摊到所有操作上,每次操作的平均开销仅为 2,即 O(1)。后者是序列中一次操作时间复杂度的更有用的描述。

摊还时间复杂度有用的一个例子是动态表算法。考虑一个初始大小为 k = 1 的表,以及一个在表末尾插入项的操作。如果表的大小 k 不足,则将其大小加倍,花费 时间来制作更大的副本。对于 n 次插入,可能看起来总时间会是 ,但情况并非如此。即使有复制表这项额外工作,单次插入的摊还成本也是 ,因为只有在 i 是 2 的幂加 1 时的第 i 次插入才需要完整地复制表。对于 n 次插入,时间为:

其中 是不大于 的最大整数。n 次插入的总时间小于或等于 3n。任何一次插入的摊还时间至多为 3。

图算法的一个常见类别是遍历图节点和边的方法。图的深度优先搜索从节点 j 开始,找到所有可以从节点 j 到达的节点。它通过总是检查刚访问过的最新节点 i 的出边来递归地探索。当 i 的所有边都被探索后,它回溯到首次发现 i 的节点。节点被标记以避免被重复搜索。深度优先搜索的时间为 ,其中 ,e 是由 s 诱导的子图中的边数。通过其构建方式,该子图是连通的。以深度优先方式遍历整个图需要重复遍历直到访问所有节点。深度优先搜索会产生 DAG 节点的拓扑顺序列表;如果 i → j 是 G 中的一条路径,则 i 出现在 j 之前。

广度优先搜索以不同的顺序遍历图。从节点 i 开始,它首先检查所有与 i 相邻的节点。接下来,它检查那些最短路径 i → j 长度为 2 的节点,然后是长度为 3 的节点,依此类推。与深度优先搜索一样,它也遍历 中的所有节点。与深度优先搜索不同,它按照从 i 出发的最短路径顺序遍历这些节点,而不是拓扑顺序。

图用 G 或 g 表示,T 表示树或森林。E 表示第 7 章讨论的最小度排序算法中的元素列表。

1.3 延伸阅读

Golub 和 Van Loan [114] 深入涵盖了稠密和结构化矩阵的数值线性代数和矩阵计算;Strang [193] 提供了线性代数的介绍。Moler [157] 介绍了数值计算,并着重于 MATLAB。Stewart 深入探讨了矩阵分解 [190] 和特征值问题 [191]。Higham [135] 讨论了有限精度算术中数值算法的行为。

Cormen, Leiserson 和 Rivest [23] 讨论了算法和数据结构及其分析,包括图算法。Kernighan 和 Ritchie [141] 简明地介绍了 C 编程语言。Higham 和 Higham [133]、Davis 和 Sigmon [38] 或 MATLAB 的在线文档是学习 MATLAB 的好资源。

Duff, Erisman 和 Reid [53] 以及 George 和 Liu [89] 的著作都涉及稀疏矩阵的直接解法;后者专注于对称正定矩阵。Gilbert [101] 和 Liu [150] 概述了与稀疏直接方法相关的许多图论内容。Stewart [192] 提供了稀疏 Cholesky 分解的教程级描述。Gould, Hu 和 Scott [116] 调查了用于稀疏对称矩阵分解的各种软件包。稀疏线性系统的迭代方法及其依赖的不完全分解方法由 Saad [178]、Greenbaum [117] 和 Barrett 等人 [15] 讨论。Bjorck [17] 介绍了稀疏最小二乘问题的直接和迭代方法。Parlett [164] 深入研究了稀疏矩阵的对称特征值问题。Demmel [39] 交织讨论了数值线性代数及其在稀疏和稠密问题相关软件方面的描述。

相关推荐
xsc-xyc1 小时前
RuntimeError: Dataset ‘/data.yaml‘ error ❌ ‘_lz
人工智能·深度学习·yolo·计算机视觉·视觉检测
川西胖墩墩2 小时前
垂直模型价值:专业领域超越通用模型的竞争
大数据·人工智能
小润nature2 小时前
# Moltbot/OpenClaw 架构解读与二次开发完全指南
人工智能
AEIC学术交流中心2 小时前
【快速EI检索 | SPIE出版】2026年机器学习与大模型国际学术会议(ICMLM 2026)
人工智能·机器学习
咕噜签名-铁蛋2 小时前
无偿安利一款企业签名分发工具
人工智能
偷吃的耗子2 小时前
【CNN算法理解】:卷积神经网络 (CNN) 数值计算与传播机制
人工智能·算法·cnn
AI周红伟2 小时前
周红伟: DeepSeek大模型微调和部署实战:大模型全解析、部署及大模型训练微调代码实战
人工智能·深度学习
HAREWORK_FFF2 小时前
近几年,非技术岗转向AI岗位的现实可能性
人工智能
weixin_6682 小时前
深度分析:多模态、全模态、VLM、ASR、TTS、STT、OCR- AI分析分享
人工智能