奇异值分解(SVD)在矩阵伪逆计算中的应用
题目描述:
给定一个 \(m \times n\) 矩阵 \(A\)(可能非方阵或奇异),如何计算其伪逆(Moore-Penrose逆)\(A^+\)?要求通过奇异值分解(SVD)实现,并说明伪逆在求解病态线性方程组 \(A\mathbf{x} = \mathbf{b}\) 中的应用。
解题过程:
1. 伪逆的定义与性质
伪逆 \(A^+\) 是逆矩阵概念的扩展,适用于任意矩阵。它满足以下4个条件(Moore-Penrose条件):
- \(AA^+A = A\)
- \(A^+AA^+ = A^+\)
- \((AA^+)^T = AA^+\)(对称性)
- \((A^+A)^T = A^+A\)
若 \(A\) 可逆,则 \(A^+ = A^{-1}\)。
2. 奇异值分解(SVD)回顾
对任意矩阵 \(A \in \mathbb{R}^{m \times n}\),其SVD为:
\[A = U \Sigma V^T \]
其中:
- \(U \in \mathbb{R}^{m \times m}\) 是正交矩阵(左奇异向量)
- \(V \in \mathbb{R}^{n \times n}\) 是正交矩阵(右奇异向量)
- \(\Sigma \in \mathbb{R}^{m \times n}\) 是对角矩阵,元素为奇异值 \(\sigma_1 \geq \sigma_2 \geq \cdots \geq \sigma_r > 0\)(\(r = \text{rank}(A)\)),其余元素为0。
3. 通过SVD计算伪逆
步骤1:对 \(A\) 进行SVD
\[A = U \Sigma V^T \]
步骤2:构造伪逆 \(\Sigma^+\)
\(\Sigma\) 的伪逆 \(\Sigma^+ \in \mathbb{R}^{n \times m}\) 通过对角矩阵的转置+取倒数得到:
- 对每个非零奇异值 \(\sigma_i\),取其倒数 \(1/\sigma_i\);
- 零奇异值保持不变;
- 最后转置矩阵。
例如,若
\[\Sigma = \begin{bmatrix} \sigma_1 & 0 & 0 \\ 0 & \sigma_2 & 0 \\ 0 & 0 & 0 \end{bmatrix} \quad (m=3, n=3, r=2), \]
则
\[\Sigma^+ = \begin{bmatrix} 1/\sigma_1 & 0 & 0 \\ 0 & 1/\sigma_2 & 0 \\ 0 & 0 & 0 \end{bmatrix}^T = \begin{bmatrix} 1/\sigma_1 & 0 & 0 \\ 0 & 1/\sigma_2 & 0 \\ 0 & 0 & 0 \end{bmatrix}. \]
步骤3:计算 \(A^+\)
利用SVD的逆运算:
\[A^+ = V \Sigma^+ U^T \]
验证:
\[A^+A = V \Sigma^+ U^T U \Sigma V^T = V (\Sigma^+ \Sigma) V^T, \]
其中 \(\Sigma^+ \Sigma\) 是 \(n \times n\) 对角矩阵,前 \(r\) 个对角元为1,其余为0,满足伪逆的对称性条件。
4. 伪逆求解线性方程组 \(A\mathbf{x} = \mathbf{b}\)
当 \(A\) 不可逆或非方阵时,普通逆不存在。伪逆给出最小二乘解:
- 若方程组有解:\(\mathbf{x} = A^+ \mathbf{b}\) 是解中欧几里得范数最小的解。
- 若方程组无解:\(\mathbf{x} = A^+ \mathbf{b}\) 是最小化残差 \(\|A\mathbf{x} - \mathbf{b}\|_2\) 的解。
推导:
通过SVD将问题简化:
\[A\mathbf{x} = U \Sigma V^T \mathbf{x} = \mathbf{b} \implies \Sigma (V^T \mathbf{x}) = U^T \mathbf{b}. \]
令 \(\mathbf{y} = V^T \mathbf{x}\),\(\mathbf{c} = U^T \mathbf{b}\),则问题化为:
\[\Sigma \mathbf{y} = \mathbf{c}. \]
由于 \(\Sigma\) 是对角矩阵,其伪逆解为 \(\mathbf{y} = \Sigma^+ \mathbf{c}\),即:
\[\mathbf{x} = V \mathbf{y} = V \Sigma^+ U^T \mathbf{b} = A^+ \mathbf{b}. \]
5. 数值稳定性处理
若奇异值 \(\sigma_i\) 非常小(接近0),直接取倒数会导致数值不稳定。通常设置一个阈值 \(\epsilon\)(如 \(\epsilon = 10^{-12}\)),当 \(\sigma_i < \epsilon\) 时,视作0,在 \(\Sigma^+\) 中对应位置置0而非取倒数。
总结:
通过SVD计算伪逆,将复杂矩阵问题转化为对角矩阵的简单操作,适用于病态方程组、秩亏矩阵等场景,是数值线性代数中的核心工具。