LU分解法解线性方程组
题目描述
给定一个线性方程组 \(A\mathbf{x} = \mathbf{b}\),其中 \(A\) 是一个 \(n \times n\) 的系数矩阵,\(\mathbf{b}\) 是常数向量。要求通过LU分解法求解未知向量 \(\mathbf{x}\)。LU分解的核心是将矩阵 \(A\) 分解为一个下三角矩阵 \(L\) 和一个上三角矩阵 \(U\) 的乘积,即 \(A = LU\),然后通过两次回代求解方程组。
解题过程
步骤1:LU分解的原理
LU分解要求矩阵 \(A\) 可分解为 \(L\) 和 \(U\),其中:
- \(L\) 是下三角矩阵(对角线元素全为1),
- \(U\) 是上三角矩阵。
分解后,原方程组变为:
\[L(U\mathbf{x}) = \mathbf{b} \]
令 \(U\mathbf{x} = \mathbf{y}\),则问题拆解为两步:
- 解 \(L\mathbf{y} = \mathbf{b}\)(前向代入),
- 解 \(U\mathbf{x} = \mathbf{y}\)(回代)。
步骤2:进行LU分解(以Doolittle方法为例)
假设 \(A = [a_{ij}]\),分解后 \(L\) 和 \(U\) 的元素通过以下公式计算(对 \(k = 1, 2, \dots, n\) 循环):
- 计算U的第k行(对 \(j = k, k+1, \dots, n\)):
\[u_{kj} = a_{kj} - \sum_{m=1}^{k-1} l_{km} u_{mj} \]
- 计算L的第k列(对 \(i = k+1, k+2, \dots, n\)):
\[l_{ik} = \frac{a_{ik} - \sum_{m=1}^{k-1} l_{im} u_{mk}}{u_{kk}} \]
示例:分解矩阵 \(A = \begin{bmatrix} 2 & 1 & 1 \\ 4 & 1 & 0 \\ -2 & 2 & 1 \end{bmatrix}\)。
- k=1:
\(u_{11} = a_{11} = 2\),
\(u_{12} = a_{12} = 1\),
\(u_{13} = a_{13} = 1\)。
\(l_{21} = a_{21}/u_{11} = 4/2 = 2\),
\(l_{31} = a_{31}/u_{11} = -2/2 = -1\)。 - k=2:
\(u_{22} = a_{22} - l_{21}u_{12} = 1 - 2\times1 = -1\),
\(u_{23} = a_{23} - l_{21}u_{13} = 0 - 2\times1 = -2\),
\(l_{32} = (a_{32} - l_{31}u_{12}) / u_{22} = (2 - (-1)\times1) / (-1) = -3\)。 - k=3:
\(u_{33} = a_{33} - l_{31}u_{13} - l_{32}u_{23} = 1 - (-1)\times1 - (-3)\times(-2) = -4\)。
最终得到:
\[L = \begin{bmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ -1 & -3 & 1 \end{bmatrix}, \quad U = \begin{bmatrix} 2 & 1 & 1 \\ 0 & -1 & -2 \\ 0 & 0 & -4 \end{bmatrix} \]
步骤3:解 \(L\mathbf{y} = \mathbf{b}\)(前向代入)
设 \(\mathbf{b} = \begin{bmatrix} 2 \\ 1 \\ 3 \end{bmatrix}\),解下三角方程组:
\[\begin{cases} y_1 = b_1 = 2 \\ l_{21}y_1 + y_2 = b_2 \Rightarrow 2\times2 + y_2 = 1 \Rightarrow y_2 = -3 \\ l_{31}y_1 + l_{32}y_2 + y_3 = b_3 \Rightarrow (-1)\times2 + (-3)\times(-3) + y_3 = 3 \Rightarrow y_3 = -4 \end{cases} \]
得到 \(\mathbf{y} = \begin{bmatrix} 2 \\ -3 \\ -4 \end{bmatrix}\)。
步骤4:解 \(U\mathbf{x} = \mathbf{y}\)(回代)
解上三角方程组:
\[\begin{cases} u_{33}x_3 = y_3 \Rightarrow -4x_3 = -4 \Rightarrow x_3 = 1 \\ u_{22}x_2 + u_{23}x_3 = y_2 \Rightarrow -1x_2 + (-2)\times1 = -3 \Rightarrow x_2 = 1 \\ u_{11}x_1 + u_{12}x_2 + u_{13}x_3 = y_1 \Rightarrow 2x_1 + 1\times1 + 1\times1 = 2 \Rightarrow x_1 = 0 \end{cases} \]
最终解为 \(\mathbf{x} = \begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix}\)。
总结
LU分解通过将复杂方程组拆解为两个三角方程组,避免了重复计算,尤其适用于需要多次求解不同 \(\mathbf{b}\) 的情况。关键点在于分解的稳定性(需主元非零),实际应用中常结合选主元(如PLU分解)以提高精度。