Krylov子空间方法在求解Sylvester方程中的应用
题目描述:
Sylvester方程是形如 \(AX + XB = C\) 的矩阵方程,其中 \(A \in \mathbb{R}^{m \times m}\), \(B \in \mathbb{R}^{n \times n}\), \(C \in \mathbb{R}^{m \times n}\) 是已知矩阵,\(X \in \mathbb{R}^{m \times n}\) 是未知矩阵。当 \(m\) 和 \(n\) 较大时,直接求解(如 Bartels-Stewart 算法)计算量过大。本题要求利用 Krylov 子空间方法,通过投影技术将原问题约化到低维子空间上迭代求解,适用于 \(A\) 和 \(B\) 为大型稀疏矩阵的情况。
解题过程循序渐进讲解:
步骤 1:将 Sylvester 方程转化为线性系统
Sylvester 方程 \(AX + XB = C\) 可以写为线性算子形式:
定义线性算子 \(\mathcal{L}(X) = AX + XB\),则方程等价于 \(\mathcal{L}(X) = C\)。
利用向量化运算 \(\text{vec}(\cdot)\)(将矩阵按列堆叠成向量),并利用性质 \(\text{vec}(AXB) = (B^T \otimes A) \text{vec}(X)\),其中 \(\otimes\) 表示 Kronecker 积,原方程可转化为:
\[(I_n \otimes A + B^T \otimes I_m) \text{vec}(X) = \text{vec}(C) \]
这是一个 \(mn \times mn\) 的线性系统。当 \(m, n\) 很大时,该矩阵维度极高,直接求解不可行。Krylov 子空间方法避免显式构造 Kronecker 矩阵,而是直接在矩阵空间迭代。
步骤 2:构造 Krylov 子空间
Krylov 子空间方法的核心是构建低维子空间来近似解。对于 Sylvester 方程,常用全局 Krylov 子空间,即对矩阵 \(X\) 整体进行投影。
定义初始残差 \(R_0 = C - AX_0 - X_0 B\),其中 \(X_0\) 是初始猜测(常取零矩阵)。
我们构建两个 Krylov 子空间:
- 关于 \(A\) 的子空间:\(\mathcal{K}_k(A, v) = \text{span}\{v, Av, A^2v, \dots, A^{k-1}v\}\)
- 关于 \(B^T\) 的子空间:\(\mathcal{K}_l(B^T, w)\)
但更有效的是构建块 Krylov 子空间,因为残差是矩阵形式。
常用方法是双边 Arnoldi 过程:
- 对矩阵 \(A\) 和 \(B\) 分别构建 Krylov 子空间基。
- 计算 \(A\) 的 Krylov 子空间 \(\mathcal{K}_k(A, U_1)\),其中 \(U_1\) 是 \(R_0\) 的列空间的正交基(或直接用 \(R_0\) 的某一列)。
- 计算 \(B^T\) 的 Krylov 子空间 \(\mathcal{K}_l(B^T, V_1)\),其中 \(V_1\) 是 \(R_0^T\) 的列空间的正交基。
实际上,更直接的方法是采用全局 Arnoldi 过程,将矩阵视为向量,但为保持矩阵结构,通常采用以下投影方法。
步骤 3:投影到低维子空间
设我们已构造出两个标准正交基矩阵:
- \(U_k \in \mathbb{R}^{m \times k}\),其列张成子空间 \(\mathcal{U}_k\)(近似关于 \(A\) 的搜索空间)。
- \(V_l \in \mathbb{R}^{n \times l}\),其列张成子空间 \(\mathcal{V}_l\)(近似关于 \(B\) 的搜索空间)。
我们寻找近似解 \(X_k = U_k Y_k V_l^T\),其中 \(Y_k \in \mathbb{R}^{k \times l}\) 是小规模矩阵。
将 \(X_k\) 代入原方程,并要求残差与子空间 \(\mathcal{U}_k \otimes \mathcal{V}_l\) 正交(Galerkin 条件),得到投影方程:
\[U_k^T (A U_k Y_k V_l^T + U_k Y_k V_l^T B) V_l = U_k^T C V_l \]
利用 \(U_k\) 和 \(V_l\) 的正交性,定义 \(H_k = U_k^T A U_k\)(\(A\) 在 \(\mathcal{U}_k\) 上的投影),\(G_l = V_l^T B^T V_l\)(注意 \(V_l^T B^T V_l\) 与 \(V_l^T B V_l\) 的关系需转置,更准确处理如下)。
步骤 4:推导低维 Sylvester 方程
由投影方程:
左边第一项:\(U_k^T A U_k Y_k V_l^T V_l = H_k Y_k I_l = H_k Y_k\)
左边第二项:\(U_k^T U_k Y_k V_l^T B V_l = I_k Y_k (V_l^T B V_l) = Y_k \tilde{G}_l\),其中 \(\tilde{G}_l = V_l^T B V_l\)
右边:\(C_k = U_k^T C V_l\)
因此得到低维 Sylvester 方程:
\[H_k Y_k + Y_k \tilde{G}_l = C_k \]
这是一个 \(k \times l\) 维的 Sylvester 方程,由于 \(k, l \ll m, n\),可用直接法(如 Bartels-Stewart 算法)高效求解 \(Y_k\)。
步骤 5:构造子空间基的 Arnoldi 过程
如何构造 \(U_k\) 和 \(V_l\)?常用块 Arnoldi 过程,但针对 Sylvester 方程,常用双边 Arnoldi:
- 对 \(A\) 从初始向量 \(u_1 = R_0 v_1 / \|R_0 v_1\|\)(\(v_1\) 可任取,如 \(R_0\) 的第一列)开始,运行 Arnoldi 过程得到 \(U_k\) 和上 Hessenberg 矩阵 \(H_k\)。
- 对 \(B^T\) 从初始向量 \(v_1 = R_0^T u_1 / \|R_0^T u_1\|\) 开始,运行 Arnoldi 过程得到 \(V_l\) 和上 Hessenberg 矩阵 \(\tilde{G}_l^T\)。
但更实用的方法是Galerkin 投影与残差控制:先固定 \(l=1\) 或交替扩展 \(U_k\) 和 \(V_l\),例如扩展 \(U_k\) 直到残差满足条件,再扩展 \(V_l\)。
步骤 6:算法流程(简化版本)
一种常见算法(基于全局 Krylov 子空间)的步骤:
- 初始化:选择 \(X_0 = 0\),计算 \(R_0 = C - A X_0 - X_0 B\),设 \(U_1\) 为 \(R_0\) 的列空间的一组标准正交基(或取 \(R_0\) 的第一列归一化)。
- 对 \(j=1,2,\dots\) 直到收敛:
a. 扩展 \(U_j\) 到 \(U_{j+1}\) 通过 Arnoldi 过程作用于 \(A\),得到 \(H_j\)。
b. 类似地,对 \(B^T\) 构建 \(V_j\)(可基于当前残差调整)。
c. 求解小规模 Sylvester 方程 \(H_j Y_j + Y_j \tilde{G}_j = C_j\)。
d. 计算近似解 \(X_j = U_j Y_j V_j^T\) 和残差 \(R_j = C - A X_j - X_j B\)。
e. 检查 \(\|R_j\|_F\) 是否小于容忍误差,若是则停止;否则继续扩展子空间。
步骤 7:残差控制与重启策略
由于子空间维数 \(k\) 增大会增加内存和计算量,当 \(k\) 达到最大值时,可采用隐式重启技术:保留当前近似解 \(X_k\),用 \(X_k\) 作为新的初始猜测,重新计算残差 \(R_0\),并重新构建子空间。这能控制子空间规模,同时保持收敛性。
总结:
该方法利用 Krylov 子空间将大规模 Sylvester 方程投影到低维空间,通过求解小规模方程迭代逼近解。它避免了 \(mn\) 维大系统,特别适合 \(A\) 和 \(B\) 稀疏的情形。实际实现中需注意子空间构建的数值稳定性(如采用 modified Gram-Schmidt 正交化)和收敛性判断。