2.2 特殊方程组的求解 如果系数矩阵具有一定的特殊结构或性质, 则可以充分利用这些特殊结构或性质来设计高效的数值算法. 本节考虑以下特殊方程组的求解:
对称正定矩阵
对称不定矩阵
三对角矩阵
带状矩阵
Toeplitz 矩阵
2.2.1 对称正定线性方程组 考虑线性方程组
其中 A ∈ R n × n A\in \mathbb{R}^{n\times n} A ∈ R n × n 对称正定的
定理 2.7 (Cholesky 分解) 设 A ∈ R n × n A \in \mathbb{R}^{n \times n} A ∈ R n × n 对称正定, 则存在唯一的对角线元素为正的下三角矩阵 L L L , 使得
A = L L ⊺ . A = L L ^ {\intercal}. A = L L ⊺ . 该分解称为Cholesky分解.
(板书)
证明. 首先证明存在性, 用数学归纳法
当 n = 1 n = 1 n = 1 时, 由 A A A 的对称正定性可知 a 11 > 0 a_{11} > 0 a 11 > 0 . 取 l 11 = a 11 l_{11} = \sqrt{a_{11}} l 11 = a 11 即可.
假定结论对所有不超过 n − 1 n - 1 n − 1 阶的对称正定矩阵都成立. 设 A ∈ R n × n A \in \mathbb{R}^{n \times n} A ∈ R n × n 是 n n n 阶对称正定, 则 A A A 可分解为
A = [ a 11 A 12 A 12 T A 22 ] = [ a 11 0 1 a 11 A 12 T I ] [ 1 0 0 A ~ 22 ] [ a 11 0 1 a 11 A 12 T I ] T , A = \left[ \begin{array}{c c} a _ {1 1} & A _ {1 2} \\ A _ {1 2} ^ {\mathsf {T}} & A _ {2 2} \end{array} \right] = \left[ \begin{array}{c c} \sqrt {a _ {1 1}} & 0 \\ \frac {1}{\sqrt {a _ {1 1}}} A _ {1 2} ^ {\mathsf {T}} & I \end{array} \right] \left[ \begin{array}{c c} 1 & 0 \\ 0 & \tilde {A} _ {2 2} \end{array} \right] \left[ \begin{array}{c c} \sqrt {a _ {1 1}} & 0 \\ \frac {1}{\sqrt {a _ {1 1}}} A _ {1 2} ^ {\mathsf {T}} & I \end{array} \right] ^ {\mathsf {T}}, A = [ a 11 A 12 T A 12 A 22 ] = [ a 11 a 11 1 A 12 T 0 I ] [ 1 0 0 A ~ 22 ] [ a 11 a 11 1 A 12 T 0 I ] T , 其中 A ~ 22 = A 22 − A 12 T A 12 / a 11 \tilde{A}_{22} = A_{22} - A_{12}^{\mathrm{T}}A_{12} / a_{11} A ~ 22 = A 22 − A 12 T A 12 / a 11 . 由于 A A A 对称正定, 所以 [ 1 0 0 A ~ 22 ] \left[ \begin{array}{cc}1 & 0\\ 0 & \tilde{A}_{22} \end{array} \right] [ 1 0 0 A ~ 22 ] 也对称正定, 故 A ~ 22 \tilde{A}_{22} A ~ 22 是 n − 1 n - 1 n − 1 阶对称正定矩阵. 根据归纳假设, 存在唯一的对角线元素为正的下三角矩阵 L ~ \tilde{L} L ~ , 使得 A ~ 22 = L ~ L ~ T \tilde{A}_{22} = \tilde{L}\tilde{L}^{\mathrm{T}} A ~ 22 = L ~ L ~ T . 令
L = [ a 11 0 1 a 11 A 12 T I ] [ 1 0 0 L ~ ] = [ a 11 0 1 a 11 A 12 T L ~ ] . L = \left[ \begin{array}{c c} \sqrt {a _ {1 1}} & 0 \\ \frac {1}{\sqrt {a _ {1 1}}} A _ {1 2} ^ {\mathsf {T}} & I \end{array} \right] \left[ \begin{array}{c c} 1 & 0 \\ 0 & \tilde {L} \end{array} \right] = \left[ \begin{array}{c c} \sqrt {a _ {1 1}} & 0 \\ \frac {1}{\sqrt {a _ {1 1}}} A _ {1 2} ^ {\mathsf {T}} & \tilde {L} \end{array} \right]. L = [ a 11 a 11 1 A 12 T 0 I ] [ 1 0 0 L ~ ] = [ a 11 a 11 1 A 12 T 0 L ~ ] . 易知, L L L 是对角线元素均为正的下三角矩阵, 且
L L T = [ a 11 0 1 a 11 A 12 T I ] [ 1 0 0 L ~ ] [ 1 0 0 L ~ T ] [ a 11 0 1 a 11 A 12 T I ] T = A . L L ^ {\mathsf {T}} = \left[ \begin{array}{c c} \sqrt {a _ {1 1}} & 0 \\ \frac {1}{\sqrt {a _ {1 1}}} A _ {1 2} ^ {\mathsf {T}} & I \end{array} \right] \left[ \begin{array}{c c} 1 & 0 \\ 0 & \tilde {L} \end{array} \right] \left[ \begin{array}{c c} 1 & 0 \\ 0 & \tilde {L} ^ {\mathsf {T}} \end{array} \right] \left[ \begin{array}{c c} \sqrt {a _ {1 1}} & 0 \\ \frac {1}{\sqrt {a _ {1 1}}} A _ {1 2} ^ {\mathsf {T}} & I \end{array} \right] ^ {\mathsf {T}} = A. L L T = [ a 11 a 11 1 A 12 T 0 I ] [ 1 0 0 L ~ ] [ 1 0 0 L ~ T ] [ a 11 a 11 1 A 12 T 0 I ] T = A . 由归纳法可知, 对任意对称正定实矩阵 A A A , 都存在一个对角线元素为正的下三角矩阵 L L L , 使得
A = L L ⊺ . A = L L ^ {\intercal}. A = L L ⊺ . 唯一性可以采用反证法, 留做练习.
A 该定理也可以通过 LU 分解的存在唯一性来证明.
Cholesky分解的实现 我们利用待定系数法来计算对称正定矩阵的Cholesky分解.设 A = L L T A = LL^{\mathsf{T}} A = L L T ,即
[ a 11 a 12 … a 1 n a 21 a 22 … a 2 n ⋮ ⋱ ⋮ a n 1 a n 2 … a n n ] = [ l 11 l 21 l 22 ⋮ ⋮ ⋱ l n 1 l n 2 … l n n ] [ l 11 l 21 … l n 1 l 22 … l n 2 ⋱ ⋮ l n n ] . \left[ \begin{array}{c c c c} a _ {1 1} & a _ {1 2} & \dots & a _ {1 n} \\ a _ {2 1} & a _ {2 2} & \dots & a _ {2 n} \\ \vdots & & \ddots & \vdots \\ a _ {n 1} & a _ {n 2} & \dots & a _ {n n} \end{array} \right] = \left[ \begin{array}{c c c c} l _ {1 1} & & & \\ l _ {2 1} & l _ {2 2} & & \\ \vdots & \vdots & \ddots & \\ l _ {n 1} & l _ {n 2} & \dots & l _ {n n} \end{array} \right] \left[ \begin{array}{c c c c} l _ {1 1} & l _ {2 1} & \dots & l _ {n 1} \\ & l _ {2 2} & \dots & l _ {n 2} \\ & & \ddots & \vdots \\ & & & l _ {n n} \end{array} \right]. a 11 a 21 ⋮ a n 1 a 12 a 22 a n 2 … … ⋱ … a 1 n a 2 n ⋮ a nn = l 11 l 21 ⋮ l n 1 l 22 ⋮ l n 2 ⋱ … l nn l 11 l 21 l 22 … … ⋱ l n 1 l n 2 ⋮ l nn . 直接比较等式两边的元素可得
a i j = ∑ k = 1 n l i k l j k = l j j l i j + ∑ k = 1 j − 1 l i k l j k , i , j = 1 , 2 , … , n . a _ {i j} = \sum_ {k = 1} ^ {n} l _ {i k} l _ {j k} = l _ {j j} l _ {i j} + \sum_ {k = 1} ^ {j - 1} l _ {i k} l _ {j k}, \quad i, j = 1, 2, \dots , n. a ij = k = 1 ∑ n l ik l jk = l jj l ij + k = 1 ∑ j − 1 l ik l jk , i , j = 1 , 2 , … , n . 先计算 l 11 = a 11 l_{11} = \sqrt{a_{11}} l 11 = a 11 ,然后计算 L L L 第1列的其他元素:
l i 1 = a i 1 l 11 , i = 2 , 3 , … , n . l _ {i 1} = \frac {a _ {i 1}}{l _ {1 1}}, \quad i = 2, 3, \dots , n. l i 1 = l 11 a i 1 , i = 2 , 3 , … , n . 依此类推, 可逐次计算出 L L L 的第 2, 3, … , n \ldots, n … , n 列. 具体算法描述如下.
算法2.9.Cholesky分解 1: for j = 1 j = 1 j = 1 to n n n do 2: l j j = ( a j j − ∑ k = 1 j − 1 l j k 2 ) 1 / 2 % l_{jj} = \left(a_{jj} - \sum_{k=1}^{j-1} l_{jk}^2\right)^{1/2} \quad \% l jj = ( a jj − ∑ k = 1 j − 1 l jk 2 ) 1/2 % 先计算对角线元素 3: for i = j + 1 i = j + 1 i = j + 1 to n n n do 4: l i j = 1 l j j ( a i j − ∑ k = 1 j − 1 l i k l j k ) % l_{ij} = \frac{1}{l_{jj}}\left(a_{ij} - \sum_{k=1}^{j-1} l_{ik} l_{jk}\right) \quad \% l ij = l jj 1 ( a ij − ∑ k = 1 j − 1 l ik l jk ) % 计算 L L L 的第 j j j 列 5: end for 6: end for
关于Cholesky算法的几点说明 与 LU 分解一样, 可以利用 A A A 的下三角部分来存储 L L L ;
Cholesky 分解算法的运算量: 乘法次数 1 6 n 3 + 1 6 n = 1 3 n 3 + O ( n 2 ) \frac{1}{6} n^{3} + \frac{1}{6} n = \frac{1}{3} n^{3} + \mathcal{O}(n^{2}) 6 1 n 3 + 6 1 n = 3 1 n 3 + O ( n 2 ) , 加法次数 1 6 n 3 + 1 6 n = 1 3 n 3 + O ( n 2 ) \frac{1}{6} n^{3} + \frac{1}{6} n = \frac{1}{3} n^{3} + \mathcal{O}(n^{2}) 6 1 n 3 + 6 1 n = 3 1 n 3 + O ( n 2 ) , 除法次数 1 2 n 2 − 1 2 n \frac{1}{2} n^{2} - \frac{1}{2} n 2 1 n 2 − 2 1 n , 开方次数 n n n .
Cholesky 分解算法是稳定的(稳定性与全主元 Gauss 消去法相当),故不需要选主元。
利用Cholesky分解求解对称正定线性方程组的算法也称为平方根法.
例2.3 已知矩阵 A = [ 4 2 8 0 2 10 10 9 8 10 21 6 0 9 6 34 ] A = \begin{bmatrix} 4 & 2 & 8 & 0\\ 2 & 10 & 10 & 9\\ 8 & 10 & 21 & 6\\ 0 & 9 & 6 & 34 \end{bmatrix} A = 4 2 8 0 2 10 10 9 8 10 21 6 0 9 6 34 ,计算 A A A 的Cholesky分解. (板书)
解. 设 A A A 的Cholesky分解为 A = L L ⊤ A = LL^{\top} A = L L ⊤ , 即
A = [ 4 2 8 0 2 10 10 9 8 10 21 6 0 9 6 34 ] = [ l 11 l 21 l 22 l 31 l 32 l 33 l 41 l 42 l 43 l 44 ] [ l 11 l 21 l 22 l 31 l 32 l 33 l 41 l 42 l 43 l 44 ] T . A = \left[ \begin{array}{c c c c} 4 & 2 & 8 & 0 \\ 2 & 1 0 & 1 0 & 9 \\ 8 & 1 0 & 2 1 & 6 \\ 0 & 9 & 6 & 3 4 \end{array} \right] = \left[ \begin{array}{c c c c} l _ {1 1} & & & \\ l _ {2 1} & l _ {2 2} & & \\ l _ {3 1} & l _ {3 2} & l _ {3 3} & \\ l _ {4 1} & l _ {4 2} & l _ {4 3} & l _ {4 4} \end{array} \right] \left[ \begin{array}{c c c c} l _ {1 1} & & & \\ l _ {2 1} & l _ {2 2} & & \\ l _ {3 1} & l _ {3 2} & l _ {3 3} & \\ l _ {4 1} & l _ {4 2} & l _ {4 3} & l _ {4 4} \rule {0 pt} {12.5 pt} \end{array} \right] ^ {\mathsf {T}}. A = 4 2 8 0 2 10 10 9 8 10 21 6 0 9 6 34 = l 11 l 21 l 31 l 41 l 22 l 32 l 42 l 33 l 43 l 44 l 11 l 21 l 31 l 41 l 22 l 32 l 42 l 33 l 43 l 44 T . 比较等式两边的第一行可得
l 11 2 = 4 ⟹ l 11 = 2 , ( l 11 > 0 ) l _ {1 1} ^ {2} = 4 \Longrightarrow l _ {1 1} = 2, \quad (l _ {1 1} > 0) l 11 2 = 4 ⟹ l 11 = 2 , ( l 11 > 0 ) l 11 l 21 = 2 ⟹ l 21 = 1 , l _ {1 1} l _ {2 1} = 2 \Longrightarrow l _ {2 1} = 1, l 11 l 21 = 2 ⟹ l 21 = 1 , l 11 l 31 = 8 ⟹ l 21 = 4 , l _ {1 1} l _ {3 1} = 8 \Longrightarrow l _ {2 1} = 4, l 11 l 31 = 8 ⟹ l 21 = 4 , l 11 l 41 = 0 ⟹ l 21 = 0. l _ {1 1} l _ {4 1} = 0 \Longrightarrow l _ {2 1} = 0. l 11 l 41 = 0 ⟹ l 21 = 0. 比较等式两边的第二行可得
l 21 2 + l 22 2 = 10 ⟹ l 22 2 = 9 ⟹ l 22 = 3 , ( l 22 > 0 ) l _ {2 1} ^ {2} + l _ {2 2} ^ {2} = 1 0 \Longrightarrow l _ {2 2} ^ {2} = 9 \Longrightarrow l _ {2 2} = 3, \quad (l _ {2 2} > 0) l 21 2 + l 22 2 = 10 ⟹ l 22 2 = 9 ⟹ l 22 = 3 , ( l 22 > 0 ) l 21 l 31 + l 22 l 32 = 10 ⟹ l 32 = ( 10 − 4 ) / 3 = 2 , l _ {2 1} l _ {3 1} + l _ {2 2} l _ {3 2} = 1 0 \Longrightarrow l _ {3 2} = (1 0 - 4) / 3 = 2, l 21 l 31 + l 22 l 32 = 10 ⟹ l 32 = ( 10 − 4 ) /3 = 2 , l 21 l 41 + l 22 l 42 = 9 ⟹ l 42 = ( 9 − 0 ) / 3 = 3. l _ {2 1} l _ {4 1} + l _ {2 2} l _ {4 2} = 9 \Longrightarrow l _ {4 2} = (9 - 0) / 3 = 3. l 21 l 41 + l 22 l 42 = 9 ⟹ l 42 = ( 9 − 0 ) /3 = 3. 比较等式两边的第三行可得
l 31 2 + l 32 2 + l 33 2 = 21 ⟹ l 33 2 = 21 − 16 − 4 = 1 ⟹ l 33 = 1 ( l 33 > 0 ) l _ {3 1} ^ {2} + l _ {3 2} ^ {2} + l _ {3 3} ^ {2} = 2 1 \Longrightarrow l _ {3 3} ^ {2} = 2 1 - 1 6 - 4 = 1 \Longrightarrow l _ {3 3} = 1 \quad (l _ {3 3} > 0) l 31 2 + l 32 2 + l 33 2 = 21 ⟹ l 33 2 = 21 − 16 − 4 = 1 ⟹ l 33 = 1 ( l 33 > 0 ) l 31 l 41 + l 32 l 42 + l 33 l 43 = 6 ⟹ l 43 = ( 6 − 0 − 6 ) / 1 = 0. l _ {3 1} l _ {4 1} + l _ {3 2} l _ {4 2} + l _ {3 3} l _ {4 3} = 6 \Longrightarrow l _ {4 3} = (6 - 0 - 6) / 1 = 0. l 31 l 41 + l 32 l 42 + l 33 l 43 = 6 ⟹ l 43 = ( 6 − 0 − 6 ) /1 = 0. 比较等式两边的第四行可得
l 41 2 + l 42 2 + l 43 2 + l 44 2 = 34 ⟹ l 44 2 = 34 − 0 − 9 − 0 = 25 ⟹ l 44 = 5. ( l 44 > 0 ) l _ {4 1} ^ {2} + l _ {4 2} ^ {2} + l _ {4 3} ^ {2} + l _ {4 4} ^ {2} = 3 4 \Longrightarrow l _ {4 4} ^ {2} = 3 4 - 0 - 9 - 0 = 2 5 \Longrightarrow l _ {4 4} = 5. (l _ {4 4} > 0) l 41 2 + l 42 2 + l 43 2 + l 44 2 = 34 ⟹ l 44 2 = 34 − 0 − 9 − 0 = 25 ⟹ l 44 = 5. ( l 44 > 0 ) 所以 A A A 的Cholesky分解为
A = [ 2 1 3 4 2 1 0 3 0 5 ] [ 2 1 3 4 2 1 0 3 0 5 ] T . A = \left[ \begin{array}{c c c c} 2 & & & \\ 1 & 3 & & \\ 4 & 2 & 1 & \\ 0 & 3 & 0 & 5 \end{array} \right] \left[ \begin{array}{c c c c} 2 & & & \\ 1 & 3 & & \\ 4 & 2 & 1 & \\ 0 & 3 & 0 & 5 \end{array} \right] ^ {\mathsf {T}}. A = 2 1 4 0 3 2 3 1 0 5 2 1 4 0 3 2 3 1 0 5 T . LDL
为了避免开方运算, 我们可以将 A A A 分解为: A = L D L ⊤ A = L D L ^{\top} A = L D L ⊤ , 即
[ a 11 a 12 … a 1 n a 21 a 22 … a 2 n ⋮ ⋱ ⋮ a n 1 a n 2 … a n n ] = [ 1 l 21 1 ⋮ ⋱ l n 1 … l n , n − 1 1 ] [ d 1 d 2 ⋱ d n ] [ 1 l 21 … l n 1 1 … l n 2 ⋱ ⋮ 1 ] . \left[ \begin{array}{c c c c} a _ {1 1} & a _ {1 2} & \dots & a _ {1 n} \\ a _ {2 1} & a _ {2 2} & \dots & a _ {2 n} \\ \vdots & & \ddots & \vdots \\ a _ {n 1} & a _ {n 2} & \dots & a _ {n n} \end{array} \right] = \left[ \begin{array}{c c c c} 1 & & & \\ l _ {2 1} & 1 & & \\ \vdots & & \ddots & \\ l _ {n 1} & \dots & l _ {n, n - 1} & 1 \end{array} \right] \left[ \begin{array}{c c c c} d _ {1} & & & \\ & d _ {2} & & \\ & & \ddots & \\ & & & d _ {n} \end{array} \right] \left[ \begin{array}{c c c c} 1 & l _ {2 1} & \dots & l _ {n 1} \\ & 1 & \dots & l _ {n 2} \\ & & \ddots & \vdots \\ & & & 1 \end{array} \right]. a 11 a 21 ⋮ a n 1 a 12 a 22 a n 2 … … ⋱ … a 1 n a 2 n ⋮ a nn = 1 l 21 ⋮ l n 1 1 … ⋱ l n , n − 1 1 d 1 d 2 ⋱ d n 1 l 21 1 … … ⋱ l n 1 l n 2 ⋮ 1 . 通过待定系数法可得
a i j = ∑ k = 1 n l i k d k l j k = d j l i j + ∑ k = 1 j − 1 l i k d k l j k , j = 1 , 2 , … , n , i = j + 1 , j + 2 , … , n . a _ {i j} = \sum_ {k = 1} ^ {n} l _ {i k} d _ {k} l _ {j k} = d _ {j} l _ {i j} + \sum_ {k = 1} ^ {j - 1} l _ {i k} d _ {k} l _ {j k}, \quad j = 1, 2, \dots , n, \quad i = j + 1, j + 2, \dots , n. a ij = k = 1 ∑ n l ik d k l jk = d j l ij + k = 1 ∑ j − 1 l ik d k l jk , j = 1 , 2 , … , n , i = j + 1 , j + 2 , … , n . 因此我们也可以依次计算出 D D D 和 L L L 的各个元素, 这就是 L D L ⊤ \mathrm{LDL}^{\top} LDL ⊤ 分解.
基于 L D L T \mathbf{LDL}^{\mathsf{T}} LDL T 分解求解对称正定线性方程组的算法称为改进的平方根法, 其优点是不需要计算平方根.
算法2.10.改进的平方根法 1: % 先计算 LDL+ 分解 2: for j = 1 j = 1 j = 1 to n n n do
3: d j = a j j − ∑ k = 1 j − 1 l j k 2 d k d_{j} = a_{jj} - \sum_{k = 1}^{j - 1}l_{jk}^{2}d_{k} d j = a jj − ∑ k = 1 j − 1 l jk 2 d k 4: for i = j + 1 i = j + 1 i = j + 1 to n n n do 5: l i j = ( a i j − ∑ k = 1 j − 1 l i k d k l j k ) / d j l_{ij} = (a_{ij} - \sum_{k=1}^{j-1} l_{ik} d_k l_{jk}) / d_j l ij = ( a ij − ∑ k = 1 j − 1 l ik d k l jk ) / d j 6: end for 7: end for 8: % \% % 解方程组: L y = b Ly = b L y = b 和 D L ⊤ x = y DL^{\top}x = y D L ⊤ x = y 9: y 1 = b 1 y_{1} = b_{1} y 1 = b 1 10: for i = 2 i = 2 i = 2 to n n n do 11: y i = b i − ∑ k = 1 i − 1 l i k y k y_{i} = b_{i} - \sum_{k = 1}^{i - 1}l_{ik}y_{k} y i = b i − ∑ k = 1 i − 1 l ik y k 12: end for 13: x n = y n / d n x_{n} = y_{n} / d_{n} x n = y n / d n 14: for i = n − 1 i = n - 1 i = n − 1 to 1 do 15: x i = y i / d i − ∑ k = i + 1 n l k i x k x_{i} = y_{i} / d_{i} - \sum_{k = i + 1}^{n}l_{ki}x_{k} x i = y i / d i − ∑ k = i + 1 n l ki x k 16: end for
2.2.2 对称不定线性方程组 设 A ∈ R n × n A \in \mathbb{R}^{n \times n} A ∈ R n × n 是非奇异的对称不定矩阵. 若 A A A 存在 LU 分解, 即 A = L U A = LU A = LU , 则可写成
A = L D L T , A = L D L ^ {\mathsf {T}}, A = L D L T , 其中 D D D 是由 U U U 的对角线元素构成的对角矩阵. 然而, 当 A A A 不定时, 其 LU 分解不一定存在. 若采用选主元 LU 分解, 则其对称性将被破坏. 为了保持对称性, 在选主元时必须对行和列进行同样的置换, 即选取置换矩阵 P P P , 使得
P A P ⊺ = L D L ⊺ . (2.4) P A P ^ {\intercal} = L D L ^ {\intercal}. \tag {2.4} P A P ⊺ = L D L ⊺ . ( 2.4 ) 通常称 (2.4) 为对称矩阵的 L D L T \mathbf{LDL}^{\mathsf{T}} LDL T 分解。但遗憾的是,这样的置换矩阵可能不一定存在,即分解 (2.4) 不一定存在。
例2.4 设对称矩阵
A = [ 0 1 1 1 0 1 1 1 0 ] . A = \left[ \begin{array}{c c c} 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \end{array} \right]. A = 0 1 1 1 0 1 1 1 0 . 由于 A A A 的对角线元素都是0, 对任意置换矩阵 P P P , 矩阵 P A P T PAP^{\mathsf{T}} P A P T 的对角线元素仍然都是0. 因此, 矩阵 A A A 不存在 L D L T \mathrm{LDL}^{\mathsf{T}} LDL T 分解 (2.4).
块 L D L ⊤ \mathbf{LDL}^{\top} LDL ⊤ 分解 由于对称不定矩阵不一定存在 L D L T \mathbf{LDL}^{\mathsf{T}} LDL T 分解, 于是人们提出了块 L D L T \mathbf{LDL}^{\mathsf{T}} LDL T 分解, 不再要求 D D D 是对角矩阵, 它可以是拟对角矩阵 (即块对角矩阵, 而且对角块至多是 2 阶的).
人们发现, 对于一个对称非奇异矩阵 A ∈ R n × n A \in \mathbb{R}^{n \times n} A ∈ R n × n , 总存在置换矩阵 P P P 使得 (见习题 2.9)
P A P T = [ B E T E C ] , P A P ^ {\mathsf {T}} = \left[ \begin{array}{c c} B & E ^ {\mathsf {T}} \\ E & C \end{array} \right], P A P T = [ B E E T C ] , 其中 B ∈ R B \in \mathbb{R} B ∈ R 或 B ∈ R 2 × 2 B \in \mathbb{R}^{2 \times 2} B ∈ R 2 × 2 , 且非奇异. 因此可以对 P A P ⊤ PAP^{\top} P A P ⊤ 进行块对角化, 即
P A P T = [ I 0 E B − 1 I ] [ B 0 0 C − E B − 1 E T ] [ I B − 1 E T 0 I ] , P A P ^ {\mathsf {T}} = \left[ \begin{array}{c c} I & 0 \\ E B ^ {- 1} & I \end{array} \right] \left[ \begin{array}{c c} B & 0 \\ 0 & C - E B ^ {- 1} E ^ {\mathsf {T}} \end{array} \right] \left[ \begin{array}{c c} I & B ^ {- 1} E ^ {\mathsf {T}} \\ 0 & I \end{array} \right], P A P T = [ I E B − 1 0 I ] [ B 0 0 C − E B − 1 E T ] [ I 0 B − 1 E T I ] , 其中 C − E B − 1 E ⊤ C - EB^{-1}E^{\top} C − E B − 1 E ⊤ 是Schur补
不断重复以上过程, 就可以得到 A A A 的块 L D L ⊤ \mathbf{LDL}^{\top} LDL ⊤ 分解:
P A P ⊺ = L D ~ L ⊺ , P A P ^ {\intercal} = L \tilde {D} L ^ {\intercal}, P A P ⊺ = L D ~ L ⊺ , 其中 D ~ \tilde{D} D ~ 是拟对角矩阵
与选主元 LU 分解类似, 我们需要考虑块 L D L ⊤ \mathrm{LDL}^{\top} LDL ⊤ 分解的选主元策略, 即如何选取置换矩阵 P P P . 一方面使得分解可以进行下去, 另一方面提高算法的稳定性. Kahan 于 1965 年首先考虑了选主元块 L D L ⊤ \mathrm{LDL}^{\top} LDL ⊤ 分解. 目前常用的策略有
全主元策略 (Bunch-Parlett 策略): Bunch 和 Parlett [22] 于 1971 年提出了全主元策略来选取置换矩阵, 并证明了其稳定性, 指出其向后误差上界与全主元 Gauss 消去法几乎一样 [20]. 但需要进行 n 3 / 6 n^{3} / 6 n 3 /6 次比较运算, 代价比较昂贵.
部分选主元策略 (Bunch-Kaufman 策略): 为了减少比较运算, Bunch 和 Kaufman [21] 于 1977 年提出了部分选主元策略. 这种策略在每次选主元时, 只需搜索两列, 因此将比较运算复杂度降低到了 O ( n 2 ) \mathcal{O}(n^{2}) O ( n 2 ) 量级. 而且这种选主元策略具有较满意的向后稳定性 [69, 70], 运算量为
1 3 n 3 + O ( n 2 ) \frac{1}{3} n^{3} + \mathcal{O}(n^{2}) 3 1 n 3 + O ( n 2 ) ,因此被广泛使用.著名的程序库LAPACK一开始就采用了这种策略.具体实施也可以参见[70],或31 .
Rook 策略: 采用 Bunch-Kaufman 策略得到的矩阵 L L L 的元素不能得到很好的控制. 为了克服由此带来的不稳定性, Ashcraft, Grimes 和 Lewis [4] 于 1998 年提出采用对称的 Rook 选主元策略,以潜在的高比较运算量, 可以将矩阵 L L L 的元素控制在 1 左右. 这种对称的 Rook 选主元策略最先用在 Gauss 消去法中 [96]. Rook 策略整体上与 Bunch-Kaufman 策略类似, 但在选主元时加了一层迭代, 从而能够提供更高的精度. Cheng 在其博士论文 [25] 中对这两种策略进行了数值测试, 给出了两种例子, 分别说明 Rook 策略和 Bunch-Kaufman 策略各有优势. LAPACK 从 3.5.0 版本开始增加了 Rook 策略.
目前大部分软件都采用部分选主元块 L D L ⊤ \mathbf{LDL}^{\top} LDL ⊤ 分解来求解对称线性方程组. 关于 Aasen 算法和块 L D L ⊤ \mathbf{LDL}^{\top} LDL ⊤ 分解比较也可参见 [4, 12]. 以上算法是针对稠密的对称不定线性方程组. 对于稀疏的对称不定矩阵, 可以采用Duff和Reid的多波前法(Multifrontal) [39, 40], 或者Liu提出的稀疏阈值算法[93].
Aasen算法 Aasen[1]于1971年提出了下面的分解
P A P ⊺ = L T L ⊺ , (2.5) P A P ^ {\intercal} = L T L ^ {\intercal}, \tag {2.5} P A P ⊺ = L T L ⊺ , ( 2.5 ) 其中 P P P 为置换矩阵, L L L 为单位下三角矩阵, T T T 为对称三对角矩阵. 分解 (2.5) 本质上与部分选主元 LU 分解是一样的, 具体实施细节可参见 [70, 150].
2011年,Rozloznik,Shklarski和Toledo[107]给出了基于现代化计算机结构和BLAS-3的分块三对角化算法.该算法本质上是Aasen算法的分块形式.
Aasen算法不如的块 L D L ⊤ \mathsf{LDL}^{\top} LDL ⊤ 分解使用广泛.2016年12月,LAPACK发行了更新版本3.7.0,由Yamazaki加入了Aasen算法(http://www.netlib.org/lapack/lapack-3.7.0.html ).
2.2.3 三对角线性方程组 考虑三对角线性方程组 A x = f Ax = f A x = f ,其中 A A A 是三对角矩阵:
A = [ b 1 c 1 a 1 ⋱ ⋱ ⋱ ⋱ c n − 1 a n − 1 b n ] . A = \left[ \begin{array}{c c c c} b _ {1} & c _ {1} & & \\ a _ {1} & \ddots & \ddots & \\ & \ddots & \ddots & c _ {n - 1} \\ & & a _ {n - 1} & b _ {n} \end{array} \right]. A = b 1 a 1 c 1 ⋱ ⋱ ⋱ ⋱ a n − 1 c n − 1 b n . 我们假定
∣ b 1 ∣ > ∣ c 1 ∣ > 0 , ∣ b n ∣ > ∣ a n − 1 ∣ > 0 , ∣ b i ∣ ≥ ∣ a i − 1 ∣ + ∣ c i ∣ , i = 2 , … , n − 1. (2.6) \left| b _ {1} \right| > \left| c _ {1} \right| > 0, \quad \left| b _ {n} \right| > \left| a _ {n - 1} \right| > 0, \quad \left| b _ {i} \right| \geq \left| a _ {i - 1} \right| + \left| c _ {i} \right|, \quad i = 2, \dots , n - 1. \tag {2.6} ∣ b 1 ∣ > ∣ c 1 ∣ > 0 , ∣ b n ∣ > ∣ a n − 1 ∣ > 0 , ∣ b i ∣ ≥ ∣ a i − 1 ∣ + ∣ c i ∣ , i = 2 , … , n − 1. ( 2.6 ) 且
a i c i ≠ 0 , i = 1 , … , n − 1. (2.7) a _ {i} c _ {i} \neq 0, \quad i = 1, \dots , n - 1. \tag {2.7} a i c i = 0 , i = 1 , … , n − 1. ( 2.7 ) 即 A A A 是不可约弱对角占优的. 此时, 我们可以得到下面的三角分解
A = [ b 1 c 1 a 1 ⋱ ⋱ ⋱ ⋱ c n − 1 a n − 1 b n ] = [ α 1 a 1 α 2 ⋱ ⋱ a n − 1 α n ] [ 1 β 1 1 ⋱ ⋱ β n − 1 1 ] ≜ L U . (2.8) A = \left[ \begin{array}{c c c c} b _ {1} & c _ {1} & & \\ a _ {1} & \ddots & \ddots & \\ & \ddots & \ddots & c _ {n - 1} \\ & & a _ {n - 1} & b _ {n} \end{array} \right] = \left[ \begin{array}{c c c c} \alpha_ {1} & & & \\ a _ {1} & \alpha_ {2} & & \\ & \ddots & \ddots & \\ & & a _ {n - 1} & \alpha_ {n} \end{array} \right] \left[ \begin{array}{c c c c} 1 & \beta_ {1} & & \\ & 1 & \ddots & \\ & & \ddots & \beta_ {n - 1} \\ & & & 1 \end{array} \right] \triangleq L U. \tag {2.8} A = b 1 a 1 c 1 ⋱ ⋱ ⋱ ⋱ a n − 1 c n − 1 b n = α 1 a 1 α 2 ⋱ ⋱ a n − 1 α n 1 β 1 1 ⋱ ⋱ β n − 1 1 ≜ LU . ( 2.8 ) 由待定系数法, 我们可以得到递推公式:
α 1 = b 1 , β 1 = c 1 / α 1 = c 1 / b 1 , { α i = b i − a i − 1 β i − 1 , β i = c i / α i = c i / ( b i − a i − 1 β i − 1 ) , i = 2 , 3 , … , n − 1 α n = b n − a n − 1 β n − 1 . \begin{array}{l} \alpha_ {1} = b _ {1}, \quad \beta_ {1} = c _ {1} / \alpha_ {1} = c _ {1} / b _ {1}, \\ \left\{ \begin{array}{l} \alpha_ {i} = b _ {i} - a _ {i - 1} \beta_ {i - 1}, \\ \beta_ {i} = c _ {i} / \alpha_ {i} = c _ {i} / (b _ {i} - a _ {i - 1} \beta_ {i - 1}), \quad i = 2, 3, \ldots , n - 1 \end{array} \right. \\ \alpha_ {n} = b _ {n} - a _ {n - 1} \beta_ {n - 1}. \\ \end{array} α 1 = b 1 , β 1 = c 1 / α 1 = c 1 / b 1 , { α i = b i − a i − 1 β i − 1 , β i = c i / α i = c i / ( b i − a i − 1 β i − 1 ) , i = 2 , 3 , … , n − 1 α n = b n − a n − 1 β n − 1 . 为了使得算法能够顺利进行下去,我们需要证明 α i ≠ 0 \alpha_{i}\neq 0 α i = 0
定理2.8 设三对角矩阵 A A A 满足条件(2.6)和(2.7).则 A A A 非奇异,且
(1) ∣ α 1 ∣ = ∣ b 1 ∣ > 0 |\alpha_{1}| = |b_{1}| > 0 ∣ α 1 ∣ = ∣ b 1 ∣ > 0 (2) 0 < ∣ β i ∣ < 1 , i = 1 , 2 , … , n − 1 ; 0 < |\beta_{i}| < 1, i = 1,2,\ldots ,n - 1; 0 < ∣ β i ∣ < 1 , i = 1 , 2 , … , n − 1 ; (3) 0 < ∣ c i ∣ ≤ ∣ b i ∣ − ∣ a i − 1 ∣ < ∣ α i ∣ < ∣ b i ∣ + ∣ a i − 1 ∣ , i = 2 , 3 , … , n . 0 < |c_{i}|\leq |b_{i}| - |a_{i - 1}| < |\alpha_{i}| < |b_{i}| + |a_{i - 1}|,\quad i = 2,3,\ldots ,n. 0 < ∣ c i ∣ ≤ ∣ b i ∣ − ∣ a i − 1 ∣ < ∣ α i ∣ < ∣ b i ∣ + ∣ a i − 1 ∣ , i = 2 , 3 , … , n . (板书)
证明. 由于 A A A 是不可约且弱对角占优, 所以 A A A 非奇异. (见定理 1.61)
结论 (1) 是显然的.
下面我们证明结论 (2) 和 (3).
由于 0 < ∣ c 1 ∣ < ∣ b 1 ∣ 0 < |c_{1}| < |b_{1}| 0 < ∣ c 1 ∣ < ∣ b 1 ∣ , 且 β 1 = c 1 / b 1 \beta_{1} = c_{1} / b_{1} β 1 = c 1 / b 1 , 所以 0 < ∣ β 1 ∣ < 1 0 < |\beta_{1}| < 1 0 < ∣ β 1 ∣ < 1 . 又 α 2 = b 2 − a 1 β 1 \alpha_{2} = b_{2} - a_{1}\beta_{1} α 2 = b 2 − a 1 β 1 , 所以
∣ α 2 ∣ ≥ ∣ b 2 ∣ − ∣ a 1 ∣ ⋅ ∣ β 1 ∣ > ∣ b 2 ∣ − ∣ a 1 ∣ ≥ ∣ c 2 ∣ > 0 , (2.9) \left| \alpha_ {2} \right| \geq \left| b _ {2} \right| - \left| a _ {1} \right| \cdot \left| \beta_ {1} \right| > \left| b _ {2} \right| - \left| a _ {1} \right| \geq \left| c _ {2} \right| > 0, \tag {2.9} ∣ α 2 ∣ ≥ ∣ b 2 ∣ − ∣ a 1 ∣ ⋅ ∣ β 1 ∣ > ∣ b 2 ∣ − ∣ a 1 ∣ ≥ ∣ c 2 ∣ > 0 , ( 2.9 ) ∣ α 2 ∣ ≤ ∣ b 2 ∣ + ∣ a 1 ∣ ⋅ ∣ β 1 ∣ < ∣ b 2 ∣ + ∣ a 1 ∣ . (2.10) \left| \alpha_ {2} \right| \leq \left| b _ {2} \right| + \left| a _ {1} \right| \cdot \left| \beta_ {1} \right| < \left| b _ {2} \right| + \left| a _ {1} \right|. \tag {2.10} ∣ α 2 ∣ ≤ ∣ b 2 ∣ + ∣ a 1 ∣ ⋅ ∣ β 1 ∣ < ∣ b 2 ∣ + ∣ a 1 ∣ . ( 2.10 ) 再由结论 ( \ref e q : 2 ) (\ref{eq:2}) ( \ref e q : 2 ) 和 β 2 \beta_{2} β 2 的计算公式可知 0 < ∣ β 2 ∣ < 1 0 < |\beta_2| < 1 0 < ∣ β 2 ∣ < 1 . 类似于 ( \ref e q : 3 ) (\ref{eq:3}) ( \ref e q : 3 ) 和 ( \ref e q : 4 ) (\ref{eq:4}) ( \ref e q : 4 ) , 我们可以得到
∣ α 3 ∣ ≥ ∣ b 3 ∣ − ∣ a 2 ∣ ⋅ ∣ β 2 ∣ > ∣ b 3 ∣ − ∣ a 2 ∣ ≥ ∣ c 3 ∣ > 0 , \left| \alpha_ {3} \right| \geq \left| b _ {3} \right| - \left| a _ {2} \right| \cdot \left| \beta_ {2} \right| > \left| b _ {3} \right| - \left| a _ {2} \right| \geq \left| c _ {3} \right| > 0, ∣ α 3 ∣ ≥ ∣ b 3 ∣ − ∣ a 2 ∣ ⋅ ∣ β 2 ∣ > ∣ b 3 ∣ − ∣ a 2 ∣ ≥ ∣ c 3 ∣ > 0 , ∣ α 3 ∣ ≤ ∣ b 3 ∣ + ∣ a 2 ∣ ⋅ ∣ β 2 ∣ < ∣ b 3 ∣ + ∣ a 2 ∣ . \left| \alpha_ {3} \right| \leq \left| b _ {3} \right| + \left| a _ {2} \right| \cdot \left| \beta_ {2} \right| < \left| b _ {3} \right| + \left| a _ {2} \right|. ∣ α 3 ∣ ≤ ∣ b 3 ∣ + ∣ a 2 ∣ ⋅ ∣ β 2 ∣ < ∣ b 3 ∣ + ∣ a 2 ∣ . 依此类推, 我们就可以证明结论 (2) 和 (3).
由定理2.8可知,分解(2.8)是存在的.因此,原方程就转化为求解 L y = f Ly = f L y = f 和 U x = y . Ux = y. Ux = y . 由此便可得求解三对角线性方程组的追赶法也称为Thomas算法(1949),其运算量大约为 8 n − 6 8n - 6 8 n − 6
算法2.11.追赶法
1 : α 1 = b 1 1: \alpha_ {1} = b _ {1} 1 : α 1 = b 1 2: β 1 = c 1 / b 1 \beta_{1} = c_{1} / b_{1} β 1 = c 1 / b 1 3: y 1 = f 1 / b 1 y_{1} = f_{1} / b_{1} y 1 = f 1 / b 1 4: for i = 2 i = 2 i = 2 to n − 1 n - 1 n − 1 do 5: α i = b i − a i − 1 β i − 1 \alpha_{i} = b_{i} - a_{i - 1}\beta_{i - 1} α i = b i − a i − 1 β i − 1 6: β i = c i / α i \beta_{i} = c_{i} / \alpha_{i} β i = c i / α i 7: y i = ( f i − a i − 1 y i − 1 ) / α i y_{i} = (f_{i} - a_{i - 1}y_{i - 1}) / \alpha_{i} y i = ( f i − a i − 1 y i − 1 ) / α i 8: end for 9: α n = b n − a n − 1 β n − 1 \alpha_{n} = b_{n} - a_{n - 1}\beta_{n - 1} α n = b n − a n − 1 β n − 1 10: y n = ( f n − a n − 1 y n − 1 ) / α n y_{n} = (f_{n} - a_{n - 1}y_{n - 1}) / \alpha_{n} y n = ( f n − a n − 1 y n − 1 ) / α n 11: x n = y n x_{n} = y_{n} x n = y n 12: for i = n − 1 i = n - 1 i = n − 1 to 1 do 13: x i = y i − β i x i + 1 x_{i} = y_{i} - \beta_{i}x_{i + 1} x i = y i − β i x i + 1 14: end for
具体计算时, 由于求解 L y = f Ly = f L y = f 与矩阵 LU 分解是同时进行的, 因此, α i \alpha_{i} α i 可以不用存储. 由于 ∣ β i ∣ < 1 |\beta_i| < 1 ∣ β i ∣ < 1 ,因此在回代求解 x i x_{i} x i 时,误差可以得到有效控制
需要指出的是, 我们也可以考虑下面的分解
A = [ b 1 c 1 a 1 ⋱ ⋱ ⋱ ⋱ c n − 1 a n − 1 b n ] = [ 1 γ 1 1 ⋱ ⋱ γ n − 1 1 ] [ α 1 c 1 α 2 ⋱ ⋱ c n − 1 α n ] . (2.11) A = \left[ \begin{array}{c c c c} b _ {1} & c _ {1} & & \\ a _ {1} & \ddots & \ddots & \\ & \ddots & \ddots & c _ {n - 1} \\ & & a _ {n - 1} & b _ {n} \end{array} \right] = \left[ \begin{array}{c c c c} 1 & & & \\ \gamma_ {1} & 1 & & \\ & \ddots & \ddots & \\ & & \gamma_ {n - 1} & 1 \end{array} \right] \left[ \begin{array}{c c c c} \alpha_ {1} & c _ {1} & & \\ & \alpha_ {2} & \ddots & \\ & & \ddots & c _ {n - 1} \\ & & & \alpha_ {n} \end{array} \right]. \tag {2.11} A = b 1 a 1 c 1 ⋱ ⋱ ⋱ ⋱ a n − 1 c n − 1 b n = 1 γ 1 1 ⋱ ⋱ γ n − 1 1 α 1 c 1 α 2 ⋱ ⋱ c n − 1 α n . ( 2.11 ) 但此时 ∣ γ i ∣ |\gamma_i| ∣ γ i ∣ 可能大于1.比如 γ 1 = a 1 / b 1 \gamma_1 = a_1 / b_1 γ 1 = a 1 / b 1 ,因此当 ∣ b 1 ∣ < ∣ a 1 ∣ |b_{1}| < |a_{1}| ∣ b 1 ∣ < ∣ a 1 ∣ 时, ∣ γ 1 ∣ > 1. |\gamma_1| > 1. ∣ γ 1 ∣ > 1. 所以在回代求解时,误差可能得不到有效控制.另外一方面,计算 γ i \gamma_{i} γ i 时也可能会产生较大的舍入误差(大数除以小数).但如果 A A A 是列对角占优,则可以保证 ∣ γ i ∣ < 1 |\gamma_i| < 1 ∣ γ i ∣ < 1
如果 A A A 是 (行) 对角占优, 则采用分解 (2.8); 如果 A A A 是列对角占优, 则采用分解 (2.9).
2.2.4 带状线性方程组 设系数矩阵 A ∈ R n × n A \in \mathbb{R}^{n \times n} A ∈ R n × n 是带状矩阵, 其下带宽为 b l b_{l} b l , 上带宽为 b u b_{u} b u , 即
当 i > j + b l i > j + b_{l} i > j + b l 或 i < j − b u i < j - b_u i < j − b u 时,有 a i j = 0 a_{ij} = 0 a ij = 0
其形状如右图所示
对于带状矩阵, 不带选主元的 LU 分解算法如下.
算法2.12.带状矩阵的LU分解
1: for $k = 1$ to $n - 1$ do
2: for $i = k + 1$ to $\min(b_l, n)$ do
3: $a_{ik} = a_{ik} / a_{kk}$
4: for $j = k + 1$ to $\min(k + b_u, n)$ do
5: $a_{ij} = a_{ij} - a_{ik}a_{kj}$
6: end for
7: end for
8: end for如果 A A A 存在LU分解, 则可以验证, L L L 和 U U U 也是带状矩阵.
定理2.9 设 A ∈ R n × n A \in \mathbb{R}^{n \times n} A ∈ R n × n 是带状矩阵, 其下带宽为 b l b_{l} b l , 上带宽为 b u b_{u} b u . 若 A A A 存在不带选主元的 LU 分解 A = L U A = LU A = LU , 则 L L L 为下带宽 b l b_{l} b l 的带状矩阵, U U U 为上带宽 b u b_{u} b u 的带状矩阵. (留作课外自习)
若采用部分选主元的 LU 分解, 则 L L L 和 U U U 会有所变化, 但仍具有一定的特殊结构.
定理2.10 设 A ∈ R n × n A \in \mathbb{R}^{n \times n} A ∈ R n × n 是带状矩阵, 其下带宽为 b l b_{l} b l , 上带宽为 b u b_{u} b u . 设 P A = L U PA = LU P A = LU 是 A A A 的部分选主元LU分解, 则 U U U 为上带宽不超过 b l + b u b_{l} + b_{u} b l + b u 的带状矩阵, L L L 为下带宽为 b l b_{l} b l 的“基本带状矩阵”, 即 L L L 每列的非零元素不超过 b l + 1 b_{l} + 1 b l + 1 个. (留作课外自习)
思考:分别统计带状矩阵 LU 分解和部分选主元 LU 分解的运算量.
2.2.5 Toeplitz线性方程组 设 T n ∈ R n × n T_{n}\in \mathbb{R}^{n\times n} T n ∈ R n × n 是Toeplitz矩阵,即
T n = [ t 0 t − 1 … t − n + 1 t 1 ⋱ ⋱ ⋮ ⋮ ⋱ ⋱ t − 1 t n − 1 … t 1 t 0 ] . T _ {n} = \left[ \begin{array}{c c c c} t _ {0} & t _ {- 1} & \dots & t _ {- n + 1} \\ t _ {1} & \ddots & \ddots & \vdots \\ \vdots & \ddots & \ddots & t _ {- 1} \\ t _ {n - 1} & \dots & t _ {1} & t _ {0} \end{array} \right]. T n = t 0 t 1 ⋮ t n − 1 t − 1 ⋱ ⋱ … … ⋱ ⋱ t 1 t − n + 1 ⋮ t − 1 t 0 . 可知 Toeplitz 矩阵是反向对称 (persymmetric) 矩阵, 即关于东北-西南对角线对称. 记 J n J_{n} J n 为 n n n 阶反向单位矩阵, 即
J n = [ 1 1 ⋱ 1 ] . J _ {n} = \left[ \begin{array}{c c c c} & & & 1 \\ & & 1 & \\ & \ddots & & \\ 1 & & & \end{array} \right]. J n = 1 ⋱ 1 1 . 易知 J n ⊤ = J n − 1 = J n , J n 2 = I n J_{n}^{\top} = J_{n}^{-1} = J_{n},J_{n}^{2} = I_{n} J n ⊤ = J n − 1 = J n , J n 2 = I n
引理2.11 矩阵 A ∈ R n × n A \in \mathbb{R}^{n \times n} A ∈ R n × n 是反向对称矩阵当且仅当
A = J n A T J n 或 J n A = A T J n . A = J _ {n} A ^ {\mathsf {T}} J _ {n} \quad \text {或} \quad J _ {n} A = A ^ {\mathsf {T}} J _ {n}. A = J n A T J n 或 J n A = A T J n . 若 A A A 可逆,则可得
A − 1 = J n − 1 ( A T ) − 1 J n − 1 = J n ( A − 1 ) T J n , A ^ {- 1} = J _ {n} ^ {- 1} \left(A ^ {\mathsf {T}}\right) ^ {- 1} J _ {n} ^ {- 1} = J _ {n} \left(A ^ {- 1}\right) ^ {\mathsf {T}} J _ {n}, A − 1 = J n − 1 ( A T ) − 1 J n − 1 = J n ( A − 1 ) T J n , 即反向对称矩阵的逆也是反向对称矩阵
Toeplitz 矩阵的逆是反向对称矩阵, 但不一定是 Toeplitz 矩阵.
一般情况下,Toeplitz 矩阵的乘积不再是一个 Toeplitz 矩阵,但如果是两个上三角或下三角 Toeplitz 矩阵相乘,则乘积仍然是 Toeplitz 矩阵。
定理2.12 设 T , S ∈ R n × n T, S \in \mathbb{R}^{n \times n} T , S ∈ R n × n 是上三角 Toeplitz 矩阵, 则 T S TS TS 也是上三角 Toeplitz 矩阵. 进一步, 若 T T T 非奇异, 则 T − 1 T^{-1} T − 1 也是上三角 Toeplitz 矩阵.
Yule-Walker方程组 我们先考虑一类特殊右端项的线性方程组. 设 T n T_{n} T n 对称正定, 考虑线性方程组
T n y = − t ( n ) , (2.12) T _ {n} y = - t ^ {(n)}, \tag {2.12} T n y = − t ( n ) , ( 2.12 ) 其中 t ( n ) = [ t 1 , t 2 , … , t n − 1 , t n ] ⊤ t^{(n)} = [t_1, t_2, \ldots, t_{n-1}, t_n]^\top t ( n ) = [ t 1 , t 2 , … , t n − 1 , t n ] ⊤ , 即右端项的前 n − 1 n-1 n − 1 个分量为 T n T_n T n 第一列的后 n − 1 n-1 n − 1 个元素, t n t_n t n 任意. 这类线性方程组称为 Yule-Walker 方程组.
由于 T n T_{n} T n 对称正定, 所以 t 0 > 0 t_0 > 0 t 0 > 0 . 因此我们可以对 T n T_{n} T n 的对角线元素进行单位化处理. 不失一般性, 我们假定 T n T_{n} T n 的对角线元素为1, 即
T n = [ 1 t 1 … t n − 1 t 1 ⋱ ⋱ ⋮ ⋮ ⋱ ⋱ t 1 t n − 1 … t 1 1 ] . T _ {n} = \left[ \begin{array}{c c c c} 1 & t _ {1} & \dots & t _ {n - 1} \\ t _ {1} & \ddots & \ddots & \vdots \\ \vdots & \ddots & \ddots & t _ {1} \\ t _ {n - 1} & \dots & t _ {1} & 1 \end{array} \right]. T n = 1 t 1 ⋮ t n − 1 t 1 ⋱ ⋱ … … ⋱ ⋱ t 1 t n − 1 ⋮ t 1 1 . 由于方程组右端项的特殊性, 我们可以不进行矩阵分解, 而是通过递推方法来求解.
记 T k T_{k} T k 为 T n T_{n} T n 的 k k k 阶顺序主子矩阵, t ( k ) t^{(k)} t ( k ) 为 t ( n ) t^{(n)} t ( n ) 的前 k k k 个分量组成的向量. 设 y ( k ) y^{(k)} y ( k ) 是 T k y = − t ( k ) T_{k}y = -t^{(k)} T k y = − t ( k ) 的解, 下面通过递推方法来计算 T k + 1 y = − t ( k + 1 ) T_{k + 1}y = -t^{(k + 1)} T k + 1 y = − t ( k + 1 ) 的解 y ( k + 1 ) y^{(k + 1)} y ( k + 1 ) . 记
y ( k + 1 ) = [ u ( k ) α k ] , y ^ {(k + 1)} = \left[ \begin{array}{c} u ^ {(k)} \\ \alpha_ {k} \end{array} \right], y ( k + 1 ) = [ u ( k ) α k ] , 则 T k + 1 y ( k + 1 ) = − t ( k + 1 ) T_{k + 1}y^{(k + 1)} = -t^{(k + 1)} T k + 1 y ( k + 1 ) = − t ( k + 1 ) 可写为
[ T k J k t ( k ) ( t ( k ) ) T J k 1 ] [ u ( k ) α k ] = − [ t ( k ) t k + 1 ] , \left[ \begin{array}{c c} T _ {k} & J _ {k} t ^ {(k)} \\ \left(t ^ {(k)}\right) ^ {\mathsf {T}} J _ {k} & 1 \end{array} \right] \left[ \begin{array}{c} u ^ {(k)} \\ \alpha_ {k} \end{array} \right] = - \left[ \begin{array}{c} t ^ {(k)} \\ t _ {k + 1} \end{array} \right], [ T k ( t ( k ) ) T J k J k t ( k ) 1 ] [ u ( k ) α k ] = − [ t ( k ) t k + 1 ] , 即
{ T k u ( k ) = − t ( k ) − α k J k t ( k ) , ( t ( k ) ) ⊤ J k u ( k ) + α k = − t k + 1 . (2.13) \left\{ \begin{array}{l} T _ {k} u ^ {(k)} = - t ^ {(k)} - \alpha_ {k} J _ {k} t ^ {(k)}, \\ \left(t ^ {(k)}\right) ^ {\top} J _ {k} u ^ {(k)} + \alpha_ {k} = - t _ {k + 1}. \end{array} \right. \tag {2.13} { T k u ( k ) = − t ( k ) − α k J k t ( k ) , ( t ( k ) ) ⊤ J k u ( k ) + α k = − t k + 1 . ( 2.13 ) 由于 T k T_{k} T k 既是反向对称矩阵, 也是对称矩阵, 因此有 T k − 1 J k = J k T k − 1 T_{k}^{-1}J_{k} = J_{k}T_{k}^{-1} T k − 1 J k = J k T k − 1 . 所以根据 (2.11) 可得
u ( k ) = T k − 1 ( − t ( k ) − α k J k t ( k ) ) = y ( k ) − α k T k − 1 J k t ( k ) = y ( k ) − α k J k T k − 1 t ( k ) = y ( k ) + α k J k y ( k ) . u ^ {(k)} = T _ {k} ^ {- 1} (- t ^ {(k)} - \alpha_ {k} J _ {k} t ^ {(k)}) = y ^ {(k)} - \alpha_ {k} T _ {k} ^ {- 1} J _ {k} t ^ {(k)} = y ^ {(k)} - \alpha_ {k} J _ {k} T _ {k} ^ {- 1} t ^ {(k)} = y ^ {(k)} + \alpha_ {k} J _ {k} y ^ {(k)}. u ( k ) = T k − 1 ( − t ( k ) − α k J k t ( k ) ) = y ( k ) − α k T k − 1 J k t ( k ) = y ( k ) − α k J k T k − 1 t ( k ) = y ( k ) + α k J k y ( k ) . 代入 (2.12) 可得
( 1 + ( t ( k ) ) T y ( k ) ) α k = − t k + 1 − ( t ( k ) ) T J k y ( k ) . \left(1 + \left(t ^ {(k)}\right) ^ {\mathsf {T}} y ^ {(k)}\right) \alpha_ {k} = - t _ {k + 1} - \left(t ^ {(k)}\right) ^ {\mathsf {T}} J _ {k} y ^ {(k)}. ( 1 + ( t ( k ) ) T y ( k ) ) α k = − t k + 1 − ( t ( k ) ) T J k y ( k ) . 又
[ I J k y ( k ) 0 1 ] T [ T k J k t ( k ) ( t ( k ) ) T J k 1 ] [ I J k y ( k ) 0 1 ] = [ T k 0 0 1 + ( t ( k ) ) T y ( k ) ] , \left[ \begin{array}{c c} I & J _ {k} y ^ {(k)} \\ 0 & 1 \end{array} \right] ^ {\mathsf {T}} \left[ \begin{array}{c c} T _ {k} & J _ {k} t ^ {(k)} \\ \big (t ^ {(k)} \big) ^ {\mathsf {T}} J _ {k} & 1 \end{array} \right] \left[ \begin{array}{c c} I & J _ {k} y ^ {(k)} \\ 0 & 1 \end{array} \right] = \left[ \begin{array}{c c} T _ {k} & 0 \\ 0 & 1 + \big (t ^ {(k)} \big) ^ {\mathsf {T}} y ^ {(k)} \end{array} \right], [ I 0 J k y ( k ) 1 ] T [ T k ( t ( k ) ) T J k J k t ( k ) 1 ] [ I 0 J k y ( k ) 1 ] = [ T k 0 0 1 + ( t ( k ) ) T y ( k ) ] , 由 T k + 1 T_{k + 1} T k + 1 的对称正定性可知 1 + ( t ( k ) ) ⊤ y ( k ) > 0. 1 + \left(t^{(k)}\right)^{\top}y^{(k)} > 0. 1 + ( t ( k ) ) ⊤ y ( k ) > 0. 于是可得 y ( k + 1 ) y^{(k + 1)} y ( k + 1 ) 的计算公式
α k = − t k + 1 − ( t ( k ) ) T J k y ( k ) 1 + ( t ( k ) ) T y ( k ) , u ( k ) = y ( k ) + α k J k y ( k ) , k = 1 , 2 , … , (2.15) \alpha_ {k} = \frac {- t _ {k + 1} - \left(t ^ {(k)}\right) ^ {\mathsf {T}} J _ {k} y ^ {(k)}}{1 + \left(t ^ {(k)}\right) ^ {\mathsf {T}} y ^ {(k)}}, \quad u ^ {(k)} = y ^ {(k)} + \alpha_ {k} J _ {k} y ^ {(k)}, \quad k = 1, 2, \dots , \tag {2.15} α k = 1 + ( t ( k ) ) T y ( k ) − t k + 1 − ( t ( k ) ) T J k y ( k ) , u ( k ) = y ( k ) + α k J k y ( k ) , k = 1 , 2 , … , ( 2.15 ) 运算量为 O ( k ) \mathcal{O}(k) O ( k ) . 因此, 我们就可以从一阶 Yule-Walker 方程出发, 利用递推公式 (2.13) 逐步计算出 T n y = − r n T_{n}y = -r_{n} T n y = − r n 的解. 总的运算量大约为 3 n 2 3n^{2} 3 n 2 .
为了进一步减少运算量, 我们引入一个辅助变量. 记 τ k ≜ 1 + ( t ( k ) ) ⊤ y ( k ) \tau_k \triangleq 1 + (t^{(k)})^\top y^{(k)} τ k ≜ 1 + ( t ( k ) ) ⊤ y ( k ) , 则
τ k + 1 = 1 + ( t ( k + 1 ) ) ⊤ y ( k + 1 ) = 1 + [ ( t ( k ) ) T t k + 1 ] [ y ( k ) + α k J k y ( k ) α k ] = 1 + ( t ( k ) ) T y ( k ) + α k ( t k + 1 + ( t ( k ) ) T J k y ( k ) ) = ( 1 − α k 2 ) τ k . \begin{array}{l} \tau_ {k + 1} = 1 + \left(t ^ {(k + 1)}\right) ^ {\top} y ^ {(k + 1)} \\ = 1 + \left[ \begin{array}{c c} \left(t ^ {(k)}\right) ^ {\mathsf {T}} & t _ {k + 1} \end{array} \right] \left[ \begin{array}{c} y ^ {(k)} + \alpha_ {k} J _ {k} y ^ {(k)} \\ \alpha_ {k} \end{array} \right] \\ = 1 + \left(t ^ {(k)}\right) ^ {\mathsf {T}} y ^ {(k)} + \alpha_ {k} \left(t _ {k + 1} + \left(t ^ {(k)}\right) ^ {\mathsf {T}} J _ {k} y ^ {(k)}\right) \\ = (1 - \alpha_ {k} ^ {2}) \tau_ {k}. \\ \end{array} τ k + 1 = 1 + ( t ( k + 1 ) ) ⊤ y ( k + 1 ) = 1 + [ ( t ( k ) ) T t k + 1 ] [ y ( k ) + α k J k y ( k ) α k ] = 1 + ( t ( k ) ) T y ( k ) + α k ( t k + 1 + ( t ( k ) ) T J k y ( k ) ) = ( 1 − α k 2 ) τ k . 于是可得求解 Yule-Walker 方程组的 Levinson-Durbin 算法 [37, 89] (由 Levinson 和 Durbin 分别于 1946 年和 1960 年独立提出 [81]), 总运算量大约为 2 n 2 2n^{2} 2 n 2 .
算法2.13.求解Yule-Walker方程组的Levinson-Durbin算法 1: 输入数据: t = [ t 1 , t 2 , … , t n ] % t = \left\lbrack {{t}_{1},{t}_{2},\ldots ,{t}_{n}}\right\rbrack \% t = [ t 1 , t 2 , … , t n ] % 注: 这里假定 t 0 = 1 {t}_{0} = 1 t 0 = 1 2: y ( 1 ) = − t 1 , τ = 1 , α = − t 1 y(1) = -t_1, \tau = 1, \alpha = -t_1 y ( 1 ) = − t 1 , τ = 1 , α = − t 1 3: for k = 1 k = 1 k = 1 to n − 1 n - 1 n − 1 do 4: τ = ( 1 − α 2 ) τ \tau = (1 - \alpha^2)\tau τ = ( 1 − α 2 ) τ 5: α = − 1 τ ( t k + 1 + ∑ i = 1 k t i y ( k + 1 − i ) ) \alpha = -\frac{1}{\tau}\left(t_{k + 1} + \sum_{i = 1}^{k}t_{i}y(k + 1 - i)\right) α = − τ 1 ( t k + 1 + ∑ i = 1 k t i y ( k + 1 − i ) ) 6: y ( 1 : k ) = y ( 1 : k ) + α y ( k : − 1 : 1 ) y(1:k) = y(1:k) + \alpha y(k: -1:1) y ( 1 : k ) = y ( 1 : k ) + α y ( k : − 1 : 1 ) 7: y ( k + 1 ) = α y(k + 1) = \alpha y ( k + 1 ) = α 8: end for
由(2.13)可知,只要 T k + 1 T_{k + 1} T k + 1 非奇异,就能确保 1 + ( t ( k ) ) ⊤ y ( k ) ≠ 0 1 + \left(t^{(k)}\right)^{\top}y^{(k)}\neq 0 1 + ( t ( k ) ) ⊤ y ( k ) = 0 ,算法就能顺利进行下去所以Levinson-Durbin算法有意义的充要条件是 T n T_{n} T n 的所有顺序主子式非零,此时我们称 T n T_{n} T n 是强正则(strongly regular)的.
一般右端项的对称正定Toeplitz线性方程组 考虑一般右端项的方程组
T n x = b , T _ {n} x = b, T n x = b , 其中 T n T_{n} T n 是对称正定 Toeplitz 矩阵, b = [ b 1 , b 2 , … , b n ] T b = [b_{1}, b_{2}, \ldots, b_{n}]^{\mathsf{T}} b = [ b 1 , b 2 , … , b n ] T . 与求解 Yule-Walker 方程组类似, 我们利用递推方法来求解.
假定 x ( k ) x^{(k)} x ( k ) 和 y ( k ) y^{(k)} y ( k ) 分别是方程组
T k x = [ b 1 , b 2 , … , b k ] T ≜ b ( k ) 和 T k y = − [ t 1 , t 2 , … , t k ] T ≜ − t ( k ) T _ {k} x = \left[ b _ {1}, b _ {2}, \dots , b _ {k} \right] ^ {\mathsf {T}} \triangleq b ^ {(k)} \quad \text {和} \quad T _ {k} y = - \left[ t _ {1}, t _ {2}, \dots , t _ {k} \right] ^ {\mathsf {T}} \triangleq - t ^ {(k)} T k x = [ b 1 , b 2 , … , b k ] T ≜ b ( k ) 和 T k y = − [ t 1 , t 2 , … , t k ] T ≜ − t ( k ) 的解, 即 x ( k ) = T k − 1 b ( k ) , y ( k ) = − T k − 1 t ( k ) x^{(k)} = T_k^{-1}b^{(k)}, y^{(k)} = -T_k^{-1}t^{(k)} x ( k ) = T k − 1 b ( k ) , y ( k ) = − T k − 1 t ( k ) . 设 x ( k + 1 ) = [ v ( k ) β k ] x^{(k + 1)} = \left[ \begin{array}{c} v^{(k)} \\ \beta_k \end{array} \right] x ( k + 1 ) = [ v ( k ) β k ] 是 T k + 1 x = b ( k + 1 ) T_{k + 1}x = b^{(k + 1)} T k + 1 x = b ( k + 1 ) 的解, 即
[ T k J k t ( k ) ( t ( k ) ) T J k 1 ] [ v ( k ) β k ] = [ b ( k ) b k + 1 ] . \left[ \begin{array}{c c} T _ {k} & J _ {k} t ^ {(k)} \\ \left(t ^ {(k)}\right) ^ {\mathsf {T}} J _ {k} & 1 \end{array} \right] \left[ \begin{array}{c} v ^ {(k)} \\ \beta_ {k} \end{array} \right] = \left[ \begin{array}{c} b ^ {(k)} \\ b _ {k + 1} \end{array} \right]. [ T k ( t ( k ) ) T J k J k t ( k ) 1 ] [ v ( k ) β k ] = [ b ( k ) b k + 1 ] . 通过计算可得
{ v ( k ) = T k − 1 b ( k ) − β k T k − 1 J k t ( k ) = x ( k ) − β k J k T k − 1 t ( k ) = x ( k ) + β k J k y ( k ) , β k = b k + 1 − ( t ( k ) ) T J k x ( k ) 1 + ( t ( k ) ) T y ( k ) . \left\{ \begin{array}{l} v ^ {(k)} = T _ {k} ^ {- 1} b ^ {(k)} - \beta_ {k} T _ {k} ^ {- 1} J _ {k} t ^ {(k)} = x ^ {(k)} - \beta_ {k} J _ {k} T _ {k} ^ {- 1} t ^ {(k)} = x ^ {(k)} + \beta_ {k} J _ {k} y ^ {(k)}, \\ \beta_ {k} = \frac {b _ {k + 1} - \left(t ^ {(k)}\right) ^ {\mathsf {T}} J _ {k} x ^ {(k)}}{1 + \left(t ^ {(k)}\right) ^ {\mathsf {T}} y ^ {(k)}}. \end{array} \right. ⎩ ⎨ ⎧ v ( k ) = T k − 1 b ( k ) − β k T k − 1 J k t ( k ) = x ( k ) − β k J k T k − 1 t ( k ) = x ( k ) + β k J k y ( k ) , β k = 1 + ( t ( k ) ) T y ( k ) b k + 1 − ( t ( k ) ) T J k x ( k ) . 所以, 我们可以先计算 T k x = b ( k ) T_{k}x = b^{(k)} T k x = b ( k ) 和 T k x = − t ( k ) T_{k}x = -t^{(k)} T k x = − t ( k ) 的解, 然后利用上述公式得到 T k + 1 x = b ( k + 1 ) T_{k+1}x = b^{(k+1)} T k + 1 x = b ( k + 1 ) 的解, 这就是Levinson-Durbin算法, 该算法的总运算量大约为 4 n 2 4n^{2} 4 n 2 .
算法2.14.求解对称正定Toeplitz线性方程组的Levinson-Durbin算法 1: 输入数据: t = [ t 1 , t 2 , … , t n − 1 ] t = \left[t_{1}, t_{2}, \ldots, t_{n-1}\right] t = [ t 1 , t 2 , … , t n − 1 ] 和 b = [ b 1 , b 2 , … , b n ] % b = \left[b_{1}, b_{2}, \ldots, b_{n}\right] \quad \% b = [ b 1 , b 2 , … , b n ] % 这里假定 t 0 = 1 t_{0} = 1 t 0 = 1 2: y ( 1 ) = − t 1 , x ( 1 ) = b 1 , τ = 1 , α = − t 1 y(1) = -t_{1}, x(1) = b_{1}, \tau = 1, \alpha = -t_{1} y ( 1 ) = − t 1 , x ( 1 ) = b 1 , τ = 1 , α = − t 1 3: for k = 1 k = 1 k = 1 to n − 1 n - 1 n − 1 do 4: τ = ( 1 − α 2 ) τ \tau = (1 - \alpha^{2})\tau τ = ( 1 − α 2 ) τ 5: β = 1 τ ( b k + 1 − ∑ i = 1 k t i x ( k + 1 − i ) ) \beta = \frac{1}{\tau}\left(b_{k + 1} - \sum_{i = 1}^{k}t_{i}x(k + 1 - i)\right) β = τ 1 ( b k + 1 − ∑ i = 1 k t i x ( k + 1 − i ) ) 6: x ( 1 : k ) = x ( 1 : k ) + β y ( k : − 1 : 1 ) x(1:k) = x(1:k) + \beta y(k: - 1:1) x ( 1 : k ) = x ( 1 : k ) + β y ( k : − 1 : 1 ) 7: x ( k + 1 ) = β x(k + 1) = \beta x ( k + 1 ) = β 8: if k < n − 1 k < n - 1 k < n − 1 then 9: α = − 1 τ ( t k + 1 + ∑ i = 1 k t i y ( k + 1 − i ) ) \alpha = -\frac{1}{\tau}\left(t_{k + 1} + \sum_{i = 1}^{k}t_{i}y(k + 1 - i)\right) α = − τ 1 ( t k + 1 + ∑ i = 1 k t i y ( k + 1 − i ) ) 10: y ( 1 : k ) = y ( 1 : k ) + α y ( k : − 1 : 1 ) y(1:k) = y(1:k) + \alpha y(k: - 1:1) y ( 1 : k ) = y ( 1 : k ) + α y ( k : − 1 : 1 ) 11: y ( k + 1 ) = α y(k + 1) = \alpha y ( k + 1 ) = α 12: end if 13: end for
通过Levinson-Durbin算法也可以得到 T n T_{n} T n 的 L D L T \mathrm{LDL}^{\mathsf{T}} LDL T 分解[81],因此对称正定Toeplitz矩阵的 L D L T \mathrm{LDL}^{\mathsf{T}} LDL T 分解运算量为 O ( n 2 ) \mathcal{O}(n^{2}) O ( n 2 )
注记 在数学与工程的许多应用中都会出现 Toeplitz 线性方程组, 如样条插值, 时间序列分析, Markov 链, 排队论, 信号与图像处理等. Levinson-Durbin 算法最早用于求解线性预测问题中的 Toeplitz 线性方程组 (即 Yule-Walker 方程组) [89]
T n + 1 [ x 1 ] = [ 0 n E n ] , T _ {n + 1} \left[ \begin{array}{c} x \\ 1 \end{array} \right] = \left[ \begin{array}{c} 0 _ {n} \\ E _ {n} \end{array} \right], T n + 1 [ x 1 ] = [ 0 n E n ] , 其中 x ∈ R n x \in \mathbb{R}^n x ∈ R n 和 E n ∈ R E_n \in \mathbb{R} E n ∈ R 是未知量, 0 n 0_n 0 n 表示长度为 n n n 的零向量. 显然该线性方程组等价于求解方程组 (2.10). 在线性预测模型中, T n + 1 T_{n+1} T n + 1 表示相关矩阵 (correlation matrix), E n E_n E n 表示 (均方根) 预测误差 (root mean square prediction error).
非对称 Toeplitz 线性方程组 考虑非对称 Toeplitz 线性方程组 T n x = b T_{n}x = b T n x = b ,其中
T n = [ 1 t 1 … t n − 1 s 1 ⋱ ⋱ ⋮ ⋮ ⋱ ⋱ t 1 s n − 1 … s 1 1 ] , b = [ b 1 b 2 ⋮ b n ] . T _ {n} = \left[ \begin{array}{c c c c} 1 & t _ {1} & \dots & t _ {n - 1} \\ s _ {1} & \ddots & \ddots & \vdots \\ \vdots & \ddots & \ddots & t _ {1} \\ s _ {n - 1} & \dots & s _ {1} & 1 \end{array} \right], \quad b = \left[ \begin{array}{c} b _ {1} \\ b _ {2} \\ \vdots \\ b _ {n} \end{array} \right]. T n = 1 s 1 ⋮ s n − 1 t 1 ⋱ ⋱ … … ⋱ ⋱ s 1 t n − 1 ⋮ t 1 1 , b = b 1 b 2 ⋮ b n . 假定 T n T_{n} T n 的所有顺序主子矩阵都非奇异, 与Levinson-Durbin算法类似, 我们可以通过递归方式来计算 T n x = b T_{n}x = b T n x = b 的解, 但此时需要用到两个辅组线性方程组.
假定 x ( k ) , y ( k ) x^{(k)},y^{(k)} x ( k ) , y ( k ) 和 z ( k ) z^{(k)} z ( k ) 分别是方程组
T k x = b ( k ) , T k ⊤ y = − t ( k ) 和 T k z = − s ( k ) ≜ − [ s 1 , s 2 , … , s k ] ⊤ T _ {k} x = b ^ {(k)}, \quad T _ {k} ^ {\top} y = - t ^ {(k)} \quad \text {和} \quad T _ {k} z = - s ^ {(k)} \triangleq - [ s _ {1}, s _ {2}, \dots , s _ {k} ] ^ {\top} T k x = b ( k ) , T k ⊤ y = − t ( k ) 和 T k z = − s ( k ) ≜ − [ s 1 , s 2 , … , s k ] ⊤ 的解.设 x ( k + 1 ) = [ v ( k ) β k ] x^{(k + 1)} = \left[ \begin{array}{c}v^{(k)}\\ \beta_k \end{array} \right] x ( k + 1 ) = [ v ( k ) β k ] 是 T k + 1 x = b ( k + 1 ) T_{k + 1}x = b^{(k + 1)} T k + 1 x = b ( k + 1 ) 的解,则可得
[ T k J k t ( k ) ( t ( k ) ) T J k 1 ] [ v ( k ) β k ] = [ b ( k ) b k + 1 ] . \left[ \begin{array}{c c} T _ {k} & J _ {k} t ^ {(k)} \\ \left(t ^ {(k)}\right) ^ {\mathsf {T}} J _ {k} & 1 \end{array} \right] \left[ \begin{array}{c} v ^ {(k)} \\ \beta_ {k} \end{array} \right] = \left[ \begin{array}{c} b ^ {(k)} \\ b _ {k + 1} \end{array} \right]. [ T k ( t ( k ) ) T J k J k t ( k ) 1 ] [ v ( k ) β k ] = [ b ( k ) b k + 1 ] . 通过计算可得
{ v ( k ) = T k − 1 b ( k ) − β k T k − 1 J k t ( k ) = x ( k ) − β k J k T k − 1 t ( k ) = x ( k ) + β k J k y ( k ) , β k = b k + 1 − ( s ( k ) ) ⊤ J k x ( k ) 1 + ( s ( k ) ) ⊤ y ( k ) . (2.16) \left\{ \begin{array}{l} v ^ {(k)} = T _ {k} ^ {- 1} b ^ {(k)} - \beta_ {k} T _ {k} ^ {- 1} J _ {k} t ^ {(k)} = x ^ {(k)} - \beta_ {k} J _ {k} T _ {k} ^ {- 1} t ^ {(k)} = x ^ {(k)} + \beta_ {k} J _ {k} y ^ {(k)}, \\ \beta_ {k} = \frac {b _ {k + 1} - \left(s ^ {(k)}\right) ^ {\top} J _ {k} x ^ {(k)}}{1 + \left(s ^ {(k)}\right) ^ {\top} y ^ {(k)}}. \end{array} \right. \tag {2.16} ⎩ ⎨ ⎧ v ( k ) = T k − 1 b ( k ) − β k T k − 1 J k t ( k ) = x ( k ) − β k J k T k − 1 t ( k ) = x ( k ) + β k J k y ( k ) , β k = 1 + ( s ( k ) ) ⊤ y ( k ) b k + 1 − ( s ( k ) ) ⊤ J k x ( k ) . ( 2.16 ) 下面考虑 y ( k + 1 ) y^{(k + 1)} y ( k + 1 ) 的计算.类似地,设 y ( k + 1 ) = [ u ( k ) α k ] , y^{(k + 1)} = \left[ \begin{array}{c}u^{(k)}\\ \alpha_k \end{array} \right], y ( k + 1 ) = [ u ( k ) α k ] , 代入 T k + 1 T y ( k + 1 ) = − t ( k + 1 ) T_{k + 1}^{\mathsf{T}}y^{(k + 1)} = -t^{(k + 1)} T k + 1 T y ( k + 1 ) = − t ( k + 1 ) ,整理后可得
{ u ( k ) = y ( k ) − α k J k T k − 1 s ( k ) = y ( k ) + α k J k z ( k ) , α k = − t k + 1 − ( t ( k ) ) ⊤ J k y ( k ) 1 + ( t ( k ) ) ⊤ z ( k ) . (2.17) \left\{ \begin{array}{l} u ^ {(k)} = y ^ {(k)} - \alpha_ {k} J _ {k} T _ {k} ^ {- 1} s ^ {(k)} = y ^ {(k)} + \alpha_ {k} J _ {k} z ^ {(k)}, \\ \alpha_ {k} = \frac {- t _ {k + 1} - \left(t ^ {(k)}\right) ^ {\top} J _ {k} y ^ {(k)}}{1 + \left(t ^ {(k)}\right) ^ {\top} z ^ {(k)}}. \end{array} \right. \tag {2.17} ⎩ ⎨ ⎧ u ( k ) = y ( k ) − α k J k T k − 1 s ( k ) = y ( k ) + α k J k z ( k ) , α k = 1 + ( t ( k ) ) ⊤ z ( k ) − t k + 1 − ( t ( k ) ) ⊤ J k y ( k ) . ( 2.17 ) 同样, 设 z ( k + 1 ) = [ w ( k ) γ k ] , z^{(k + 1)} = \left[ \begin{array}{c}w^{(k)}\\ \gamma_k \end{array} \right], z ( k + 1 ) = [ w ( k ) γ k ] , 代入 T k + 1 T z ( k + 1 ) = − s ( k + 1 ) T_{k + 1}^{\mathsf{T}}z^{(k + 1)} = -s^{(k + 1)} T k + 1 T z ( k + 1 ) = − s ( k + 1 ) ,整理后可得
{ w ( k ) = z ( k ) − γ k J k ( T k ⊤ ) − 1 t ( k ) = z ( k ) + γ k J k y ( k ) , γ k = − s k + 1 − ( s ( k ) ) ⊤ J k y ( k ) 1 + ( s ( k ) ) ⊤ y ( k ) . (2.18) \left\{ \begin{array}{l} w ^ {(k)} = z ^ {(k)} - \gamma_ {k} J _ {k} \left(T _ {k} ^ {\top}\right) ^ {- 1} t ^ {(k)} = z ^ {(k)} + \gamma_ {k} J _ {k} y ^ {(k)}, \\ \gamma_ {k} = \frac {- s _ {k + 1} - \left(s ^ {(k)}\right) ^ {\top} J _ {k} y ^ {(k)}}{1 + \left(s ^ {(k)}\right) ^ {\top} y ^ {(k)}}. \end{array} \right. \tag {2.18} ⎩ ⎨ ⎧ w ( k ) = z ( k ) − γ k J k ( T k ⊤ ) − 1 t ( k ) = z ( k ) + γ k J k y ( k ) , γ k = 1 + ( s ( k ) ) ⊤ y ( k ) − s k + 1 − ( s ( k ) ) ⊤ J k y ( k ) . ( 2.18 ) 由此, 就可以根据更新公式 (2.14), (2.15), (2.16) 得到 x ( k + 1 ) , y ( k + 1 ) x^{(k + 1)}, y^{(k + 1)} x ( k + 1 ) , y ( k + 1 ) 和 z ( k + 1 ) z^{(k + 1)} z ( k + 1 ) . 这样, 我们就可以设计出求解非对称 Toeplitz 线性方程组的递推算法.