2.2_特殊方程组的求解

2.2 特殊方程组的求解

如果系数矩阵具有一定的特殊结构或性质, 则可以充分利用这些特殊结构或性质来设计高效的数值算法. 本节考虑以下特殊方程组的求解:

  • 对称正定矩阵

  • 对称不定矩阵

  • 三对角矩阵

  • 带状矩阵

  • Toeplitz 矩阵

2.2.1 对称正定线性方程组

考虑线性方程组

Ax=bA x = b

其中 ARn×nA\in \mathbb{R}^{n\times n} 对称正定的

定理 2.7 (Cholesky 分解) 设 ARn×nA \in \mathbb{R}^{n \times n} 对称正定, 则存在唯一的对角线元素为正的下三角矩阵 LL , 使得

A=LL.A = L L ^ {\intercal}.

该分解称为Cholesky分解.

(板书)

证明. 首先证明存在性, 用数学归纳法

n=1n = 1 时, 由 AA 的对称正定性可知 a11>0a_{11} > 0 . 取 l11=a11l_{11} = \sqrt{a_{11}} 即可.

假定结论对所有不超过 n1n - 1 阶的对称正定矩阵都成立. 设 ARn×nA \in \mathbb{R}^{n \times n}nn 阶对称正定, 则 AA 可分解为

A=[a11A12A12TA22]=[a1101a11A12TI][100A~22][a1101a11A12TI]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~22=A22A12TA12/a11\tilde{A}_{22} = A_{22} - A_{12}^{\mathrm{T}}A_{12} / a_{11} . 由于 AA 对称正定, 所以 [100A~22]\left[ \begin{array}{cc}1 & 0\\ 0 & \tilde{A}_{22} \end{array} \right] 也对称正定, 故 A~22\tilde{A}_{22}n1n - 1 阶对称正定矩阵. 根据归纳假设, 存在唯一的对角线元素为正的下三角矩阵 L~\tilde{L} , 使得 A~22=L~L~T\tilde{A}_{22} = \tilde{L}\tilde{L}^{\mathrm{T}} . 令

L=[a1101a11A12TI][100L~]=[a1101a11A12TL~].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].

易知, LL 是对角线元素均为正的下三角矩阵, 且

LLT=[a1101a11A12TI][100L~][100L~T][a1101a11A12TI]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.

由归纳法可知, 对任意对称正定实矩阵 AA , 都存在一个对角线元素为正的下三角矩阵 LL , 使得

A=LL.A = L L ^ {\intercal}.

唯一性可以采用反证法, 留做练习.

A 该定理也可以通过 LU 分解的存在唯一性来证明.

Cholesky分解的实现

我们利用待定系数法来计算对称正定矩阵的Cholesky分解.设 A=LLTA = LL^{\mathsf{T}} ,即

[a11a12a1na21a22a2nan1an2ann]=[l11l21l22ln1ln2lnn][l11l21ln1l22ln2lnn].\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].

直接比较等式两边的元素可得

aij=k=1nlikljk=ljjlij+k=1j1likljk,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.

先计算 l11=a11l_{11} = \sqrt{a_{11}} ,然后计算 LL 第1列的其他元素:

li1=ai1l11,i=2,3,,n.l _ {i 1} = \frac {a _ {i 1}}{l _ {1 1}}, \quad i = 2, 3, \dots , n.

依此类推, 可逐次计算出 LL 的第 2, 3, ,n\ldots, n 列. 具体算法描述如下.

算法2.9.Cholesky分解

1: for j=1j = 1 to nn do
2: ljj=(ajjk=1j1ljk2)1/2%l_{jj} = \left(a_{jj} - \sum_{k=1}^{j-1} l_{jk}^2\right)^{1/2} \quad \% 先计算对角线元素
3: for i=j+1i = j + 1 to nn do
4: lij=1ljj(aijk=1j1likljk)%l_{ij} = \frac{1}{l_{jj}}\left(a_{ij} - \sum_{k=1}^{j-1} l_{ik} l_{jk}\right) \quad \% 计算 LL 的第 jj
5: end for
6: end for

关于Cholesky算法的几点说明

  • 与 LU 分解一样, 可以利用 AA 的下三角部分来存储 LL ;

  • Cholesky 分解算法的运算量: 乘法次数 16n3+16n=13n3+O(n2)\frac{1}{6} n^{3} + \frac{1}{6} n = \frac{1}{3} n^{3} + \mathcal{O}(n^{2}) , 加法次数 16n3+16n=13n3+O(n2)\frac{1}{6} n^{3} + \frac{1}{6} n = \frac{1}{3} n^{3} + \mathcal{O}(n^{2}) , 除法次数 12n212n\frac{1}{2} n^{2} - \frac{1}{2} n , 开方次数 nn .

  • Cholesky 分解算法是稳定的(稳定性与全主元 Gauss 消去法相当),故不需要选主元。

  • 利用Cholesky分解求解对称正定线性方程组的算法也称为平方根法.

例2.3 已知矩阵 A=[428021010981021609634]A = \begin{bmatrix} 4 & 2 & 8 & 0\\ 2 & 10 & 10 & 9\\ 8 & 10 & 21 & 6\\ 0 & 9 & 6 & 34 \end{bmatrix} ,计算 AA 的Cholesky分解. (板书)

解. 设 AA 的Cholesky分解为 A=LLA = LL^{\top} , 即

A=[428021010981021609634]=[l11l21l22l31l32l33l41l42l43l44][l11l21l22l31l32l33l41l42l43l44]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}}.

比较等式两边的第一行可得

l112=4l11=2,(l11>0)l _ {1 1} ^ {2} = 4 \Longrightarrow l _ {1 1} = 2, \quad (l _ {1 1} > 0)
l11l21=2l21=1,l _ {1 1} l _ {2 1} = 2 \Longrightarrow l _ {2 1} = 1,
l11l31=8l21=4,l _ {1 1} l _ {3 1} = 8 \Longrightarrow l _ {2 1} = 4,
l11l41=0l21=0.l _ {1 1} l _ {4 1} = 0 \Longrightarrow l _ {2 1} = 0.

比较等式两边的第二行可得

l212+l222=10l222=9l22=3,(l22>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)
l21l31+l22l32=10l32=(104)/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,
l21l41+l22l42=9l42=(90)/3=3.l _ {2 1} l _ {4 1} + l _ {2 2} l _ {4 2} = 9 \Longrightarrow l _ {4 2} = (9 - 0) / 3 = 3.

比较等式两边的第三行可得

l312+l322+l332=21l332=21164=1l33=1(l33>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)
l31l41+l32l42+l33l43=6l43=(606)/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.

比较等式两边的第四行可得

l412+l422+l432+l442=34l442=34090=25l44=5.(l44>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)

所以 AA 的Cholesky分解为

A=[2134210305][2134210305]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}}.

LDL

为了避免开方运算, 我们可以将 AA 分解为: A=LDLA = L D L ^{\top} , 即

[a11a12a1na21a22a2nan1an2ann]=[1l211ln1ln,n11][d1d2dn][1l21ln11ln21].\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].

通过待定系数法可得

aij=k=1nlikdkljk=djlij+k=1j1likdkljk,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.

因此我们也可以依次计算出 DDLL 的各个元素, 这就是 LDL\mathrm{LDL}^{\top} 分解.

基于 LDLT\mathbf{LDL}^{\mathsf{T}} 分解求解对称正定线性方程组的算法称为改进的平方根法, 其优点是不需要计算平方根.

算法2.10.改进的平方根法

1: % 先计算 LDL+ 分解
2: for j=1j = 1 to nn do

3: dj=ajjk=1j1ljk2dkd_{j} = a_{jj} - \sum_{k = 1}^{j - 1}l_{jk}^{2}d_{k}
4: for i=j+1i = j + 1 to nn do
5: lij=(aijk=1j1likdkljk)/djl_{ij} = (a_{ij} - \sum_{k=1}^{j-1} l_{ik} d_k l_{jk}) / d_j
6: end for
7: end for
8: %\% 解方程组: Ly=bLy = bDLx=yDL^{\top}x = y
9: y1=b1y_{1} = b_{1}
10: for i=2i = 2 to nn do
11: yi=bik=1i1likyky_{i} = b_{i} - \sum_{k = 1}^{i - 1}l_{ik}y_{k}
12: end for
13: xn=yn/dnx_{n} = y_{n} / d_{n}
14: for i=n1i = n - 1 to 1 do
15: xi=yi/dik=i+1nlkixkx_{i} = y_{i} / d_{i} - \sum_{k = i + 1}^{n}l_{ki}x_{k}
16: end for

2.2.2 对称不定线性方程组

ARn×nA \in \mathbb{R}^{n \times n} 是非奇异的对称不定矩阵. 若 AA 存在 LU 分解, 即 A=LUA = LU , 则可写成

A=LDLT,A = L D L ^ {\mathsf {T}},

其中 DD 是由 UU 的对角线元素构成的对角矩阵. 然而, 当 AA 不定时, 其 LU 分解不一定存在. 若采用选主元 LU 分解, 则其对称性将被破坏. 为了保持对称性, 在选主元时必须对行和列进行同样的置换, 即选取置换矩阵 PP , 使得

PAP=LDL.(2.4)P A P ^ {\intercal} = L D L ^ {\intercal}. \tag {2.4}

通常称 (2.4) 为对称矩阵的 LDLT\mathbf{LDL}^{\mathsf{T}} 分解。但遗憾的是,这样的置换矩阵可能不一定存在,即分解 (2.4) 不一定存在。

例2.4 设对称矩阵

A=[011101110].A = \left[ \begin{array}{c c c} 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \end{array} \right].

由于 AA 的对角线元素都是0, 对任意置换矩阵 PP , 矩阵 PAPTPAP^{\mathsf{T}} 的对角线元素仍然都是0. 因此, 矩阵 AA 不存在 LDLT\mathrm{LDL}^{\mathsf{T}} 分解 (2.4).

LDL\mathbf{LDL}^{\top} 分解

由于对称不定矩阵不一定存在 LDLT\mathbf{LDL}^{\mathsf{T}} 分解, 于是人们提出了块 LDLT\mathbf{LDL}^{\mathsf{T}} 分解, 不再要求 DD 是对角矩阵, 它可以是拟对角矩阵 (即块对角矩阵, 而且对角块至多是 2 阶的).

人们发现, 对于一个对称非奇异矩阵 ARn×nA \in \mathbb{R}^{n \times n} , 总存在置换矩阵 PP 使得 (见习题 2.9)

PAPT=[BETEC],P A P ^ {\mathsf {T}} = \left[ \begin{array}{c c} B & E ^ {\mathsf {T}} \\ E & C \end{array} \right],

其中 BRB \in \mathbb{R}BR2×2B \in \mathbb{R}^{2 \times 2} , 且非奇异. 因此可以对 PAPPAP^{\top} 进行块对角化, 即

PAPT=[I0EB1I][B00CEB1ET][IB1ET0I],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],

其中 CEB1EC - EB^{-1}E^{\top} 是Schur补

不断重复以上过程, 就可以得到 AA 的块 LDL\mathbf{LDL}^{\top} 分解:

PAP=LD~L,P A P ^ {\intercal} = L \tilde {D} L ^ {\intercal},

其中 D~\tilde{D} 是拟对角矩阵

与选主元 LU 分解类似, 我们需要考虑块 LDL\mathrm{LDL}^{\top} 分解的选主元策略, 即如何选取置换矩阵 PP . 一方面使得分解可以进行下去, 另一方面提高算法的稳定性. Kahan 于 1965 年首先考虑了选主元块 LDL\mathrm{LDL}^{\top} 分解. 目前常用的策略有

  • 全主元策略 (Bunch-Parlett 策略): Bunch 和 Parlett [22] 于 1971 年提出了全主元策略来选取置换矩阵, 并证明了其稳定性, 指出其向后误差上界与全主元 Gauss 消去法几乎一样 [20]. 但需要进行 n3/6n^{3} / 6 次比较运算, 代价比较昂贵.

  • 部分选主元策略 (Bunch-Kaufman 策略): 为了减少比较运算, Bunch 和 Kaufman [21] 于 1977 年提出了部分选主元策略. 这种策略在每次选主元时, 只需搜索两列, 因此将比较运算复杂度降低到了 O(n2)\mathcal{O}(n^{2}) 量级. 而且这种选主元策略具有较满意的向后稳定性 [69, 70], 运算量为

13n3+O(n2)\frac{1}{3} n^{3} + \mathcal{O}(n^{2}) ,因此被广泛使用.著名的程序库LAPACK一开始就采用了这种策略.具体实施也可以参见[70],或31.

  • Rook 策略: 采用 Bunch-Kaufman 策略得到的矩阵 LL 的元素不能得到很好的控制. 为了克服由此带来的不稳定性, Ashcraft, Grimes 和 Lewis [4] 于 1998 年提出采用对称的 Rook 选主元策略,以潜在的高比较运算量, 可以将矩阵 LL 的元素控制在 1 左右. 这种对称的 Rook 选主元策略最先用在 Gauss 消去法中 [96]. Rook 策略整体上与 Bunch-Kaufman 策略类似, 但在选主元时加了一层迭代, 从而能够提供更高的精度. Cheng 在其博士论文 [25] 中对这两种策略进行了数值测试, 给出了两种例子, 分别说明 Rook 策略和 Bunch-Kaufman 策略各有优势. LAPACK 从 3.5.0 版本开始增加了 Rook 策略.

目前大部分软件都采用部分选主元块 LDL\mathbf{LDL}^{\top} 分解来求解对称线性方程组. 关于 Aasen 算法和块 LDL\mathbf{LDL}^{\top} 分解比较也可参见 [4, 12].
以上算法是针对稠密的对称不定线性方程组. 对于稀疏的对称不定矩阵, 可以采用Duff和Reid的多波前法(Multifrontal) [39, 40], 或者Liu提出的稀疏阈值算法[93].

Aasen算法

Aasen[1]于1971年提出了下面的分解

PAP=LTL,(2.5)P A P ^ {\intercal} = L T L ^ {\intercal}, \tag {2.5}

其中 PP 为置换矩阵, LL 为单位下三角矩阵, TT 为对称三对角矩阵. 分解 (2.5) 本质上与部分选主元 LU 分解是一样的, 具体实施细节可参见 [70, 150].

2011年,Rozloznik,Shklarski和Toledo[107]给出了基于现代化计算机结构和BLAS-3的分块三对角化算法.该算法本质上是Aasen算法的分块形式.

Aasen算法不如的块 LDL\mathsf{LDL}^{\top} 分解使用广泛.2016年12月,LAPACK发行了更新版本3.7.0,由Yamazaki加入了Aasen算法(http://www.netlib.org/lapack/lapack-3.7.0.html).

2.2.3 三对角线性方程组

考虑三对角线性方程组 Ax=fAx = f ,其中 AA 是三对角矩阵:

A=[b1c1a1cn1an1bn].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].

我们假定

b1>c1>0,bn>an1>0,biai1+ci,i=2,,n1.(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}

aici0,i=1,,n1.(2.7)a _ {i} c _ {i} \neq 0, \quad i = 1, \dots , n - 1. \tag {2.7}

AA 是不可约弱对角占优的. 此时, 我们可以得到下面的三角分解

A=[b1c1a1cn1an1bn]=[α1a1α2an1αn][1β11βn11]LU.(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}

由待定系数法, 我们可以得到递推公式:

α1=b1,β1=c1/α1=c1/b1,{αi=biai1βi1,βi=ci/αi=ci/(biai1βi1),i=2,3,,n1αn=bnan1βn1.\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}

为了使得算法能够顺利进行下去,我们需要证明 αi0\alpha_{i}\neq 0

定理2.8 设三对角矩阵 AA 满足条件(2.6)和(2.7).则 AA 非奇异,且

(1) α1=b1>0|\alpha_{1}| = |b_{1}| > 0
(2) 0<βi<1,i=1,2,,n1;0 < |\beta_{i}| < 1, i = 1,2,\ldots ,n - 1;
(3) 0<cibiai1<αi<bi+ai1,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. (板书)

证明. 由于 AA 是不可约且弱对角占优, 所以 AA 非奇异. (见定理 1.61)

结论 (1) 是显然的.

下面我们证明结论 (2) 和 (3).

由于 0<c1<b10 < |c_{1}| < |b_{1}| , 且 β1=c1/b1\beta_{1} = c_{1} / b_{1} , 所以 0<β1<10 < |\beta_{1}| < 1 . 又 α2=b2a1β1\alpha_{2} = b_{2} - a_{1}\beta_{1} , 所以

α2b2a1β1>b2a1c2>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}
α2b2+a1β1<b2+a1.(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}

再由结论 (\refeq:2)(\ref{eq:2})β2\beta_{2} 的计算公式可知 0<β2<10 < |\beta_2| < 1 . 类似于 (\refeq:3)(\ref{eq:3})(\refeq:4)(\ref{eq:4}) , 我们可以得到

α3b3a2β2>b3a2c3>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,
α3b3+a2β2<b3+a2.\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|.

依此类推, 我们就可以证明结论 (2) 和 (3).

由定理2.8可知,分解(2.8)是存在的.因此,原方程就转化为求解 Ly=fLy = fUx=y.Ux = y. 由此便可得求解三对角线性方程组的追赶法也称为Thomas算法(1949),其运算量大约为 8n68n - 6

算法2.11.追赶法

1:α1=b11: \alpha_ {1} = b _ {1}

2: β1=c1/b1\beta_{1} = c_{1} / b_{1}
3: y1=f1/b1y_{1} = f_{1} / b_{1}
4: for i=2i = 2 to n1n - 1 do
5: αi=biai1βi1\alpha_{i} = b_{i} - a_{i - 1}\beta_{i - 1}
6: βi=ci/αi\beta_{i} = c_{i} / \alpha_{i}
7: yi=(fiai1yi1)/αiy_{i} = (f_{i} - a_{i - 1}y_{i - 1}) / \alpha_{i}
8: end for
9: αn=bnan1βn1\alpha_{n} = b_{n} - a_{n - 1}\beta_{n - 1}
10: yn=(fnan1yn1)/αny_{n} = (f_{n} - a_{n - 1}y_{n - 1}) / \alpha_{n}
11: xn=ynx_{n} = y_{n}
12: for i=n1i = n - 1 to 1 do
13: xi=yiβixi+1x_{i} = y_{i} - \beta_{i}x_{i + 1}
14: end for

具体计算时, 由于求解 Ly=fLy = f 与矩阵 LU 分解是同时进行的, 因此, αi\alpha_{i} 可以不用存储.
由于 βi<1|\beta_i| < 1 ,因此在回代求解 xix_{i} 时,误差可以得到有效控制

需要指出的是, 我们也可以考虑下面的分解

A=[b1c1a1cn1an1bn]=[1γ11γn11][α1c1α2cn1α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}

但此时 γi|\gamma_i| 可能大于1.比如 γ1=a1/b1\gamma_1 = a_1 / b_1 ,因此当 b1<a1|b_{1}| < |a_{1}| 时, γ1>1.|\gamma_1| > 1. 所以在回代求解时,误差可能得不到有效控制.另外一方面,计算 γi\gamma_{i} 时也可能会产生较大的舍入误差(大数除以小数).但如果 AA 是列对角占优,则可以保证 γi<1|\gamma_i| < 1

如果 AA 是 (行) 对角占优, 则采用分解 (2.8); 如果 AA 是列对角占优, 则采用分解 (2.9).

2.2.4 带状线性方程组

设系数矩阵 ARn×nA \in \mathbb{R}^{n \times n} 是带状矩阵, 其下带宽为 blb_{l} , 上带宽为 bub_{u} , 即

i>j+bli > j + b_{l}i<jbui < j - b_u 时,有 aij=0a_{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

如果 AA 存在LU分解, 则可以验证, LLUU 也是带状矩阵.

定理2.9 设 ARn×nA \in \mathbb{R}^{n \times n} 是带状矩阵, 其下带宽为 blb_{l} , 上带宽为 bub_{u} . 若 AA 存在不带选主元的 LU 分解 A=LUA = LU , 则 LL 为下带宽 blb_{l} 的带状矩阵, UU 为上带宽 bub_{u} 的带状矩阵. (留作课外自习)

若采用部分选主元的 LU 分解, 则 LLUU 会有所变化, 但仍具有一定的特殊结构.

定理2.10 设 ARn×nA \in \mathbb{R}^{n \times n} 是带状矩阵, 其下带宽为 blb_{l} , 上带宽为 bub_{u} . 设 PA=LUPA = LUAA 的部分选主元LU分解, 则 UU 为上带宽不超过 bl+bub_{l} + b_{u} 的带状矩阵, LL 为下带宽为 blb_{l} 的“基本带状矩阵”, 即 LL 每列的非零元素不超过 bl+1b_{l} + 1 个. (留作课外自习)

思考:分别统计带状矩阵 LU 分解和部分选主元 LU 分解的运算量.

2.2.5 Toeplitz线性方程组

TnRn×nT_{n}\in \mathbb{R}^{n\times n} 是Toeplitz矩阵,即

Tn=[t0t1tn+1t1t1tn1t1t0].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].

可知 Toeplitz 矩阵是反向对称 (persymmetric) 矩阵, 即关于东北-西南对角线对称. 记 JnJ_{n}nn 阶反向单位矩阵, 即

Jn=[111].J _ {n} = \left[ \begin{array}{c c c c} & & & 1 \\ & & 1 & \\ & \ddots & & \\ 1 & & & \end{array} \right].

易知 Jn=Jn1=Jn,Jn2=InJ_{n}^{\top} = J_{n}^{-1} = J_{n},J_{n}^{2} = I_{n}

引理2.11 矩阵 ARn×nA \in \mathbb{R}^{n \times n} 是反向对称矩阵当且仅当

A=JnATJnJnA=ATJn.A = J _ {n} A ^ {\mathsf {T}} J _ {n} \quad \text {或} \quad J _ {n} A = A ^ {\mathsf {T}} J _ {n}.

AA 可逆,则可得

A1=Jn1(AT)1Jn1=Jn(A1)TJn,A ^ {- 1} = J _ {n} ^ {- 1} \left(A ^ {\mathsf {T}}\right) ^ {- 1} J _ {n} ^ {- 1} = J _ {n} \left(A ^ {- 1}\right) ^ {\mathsf {T}} J _ {n},

即反向对称矩阵的逆也是反向对称矩阵

Toeplitz 矩阵的逆是反向对称矩阵, 但不一定是 Toeplitz 矩阵.

一般情况下,Toeplitz 矩阵的乘积不再是一个 Toeplitz 矩阵,但如果是两个上三角或下三角 Toeplitz 矩阵相乘,则乘积仍然是 Toeplitz 矩阵。

定理2.12 设 T,SRn×nT, S \in \mathbb{R}^{n \times n} 是上三角 Toeplitz 矩阵, 则 TSTS 也是上三角 Toeplitz 矩阵. 进一步, 若 TT 非奇异, 则 T1T^{-1} 也是上三角 Toeplitz 矩阵.

Yule-Walker方程组

我们先考虑一类特殊右端项的线性方程组. 设 TnT_{n} 对称正定, 考虑线性方程组

Tny=t(n),(2.12)T _ {n} y = - t ^ {(n)}, \tag {2.12}

其中 t(n)=[t1,t2,,tn1,tn]t^{(n)} = [t_1, t_2, \ldots, t_{n-1}, t_n]^\top , 即右端项的前 n1n-1 个分量为 TnT_n 第一列的后 n1n-1 个元素, tnt_n 任意. 这类线性方程组称为 Yule-Walker 方程组.

由于 TnT_{n} 对称正定, 所以 t0>0t_0 > 0 . 因此我们可以对 TnT_{n} 的对角线元素进行单位化处理. 不失一般性, 我们假定 TnT_{n} 的对角线元素为1, 即

Tn=[1t1tn1t1t1tn1t11].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].

由于方程组右端项的特殊性, 我们可以不进行矩阵分解, 而是通过递推方法来求解.

TkT_{k}TnT_{n}kk 阶顺序主子矩阵, t(k)t^{(k)}t(n)t^{(n)} 的前 kk 个分量组成的向量. 设 y(k)y^{(k)}Tky=t(k)T_{k}y = -t^{(k)} 的解, 下面通过递推方法来计算 Tk+1y=t(k+1)T_{k + 1}y = -t^{(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],

Tk+1y(k+1)=t(k+1)T_{k + 1}y^{(k + 1)} = -t^{(k + 1)} 可写为

[TkJkt(k)(t(k))TJk1][u(k)αk]=[t(k)tk+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],

{Tku(k)=t(k)αkJkt(k),(t(k))Jku(k)+αk=tk+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}

由于 TkT_{k} 既是反向对称矩阵, 也是对称矩阵, 因此有 Tk1Jk=JkTk1T_{k}^{-1}J_{k} = J_{k}T_{k}^{-1} . 所以根据 (2.11) 可得

u(k)=Tk1(t(k)αkJkt(k))=y(k)αkTk1Jkt(k)=y(k)αkJkTk1t(k)=y(k)+αkJky(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)}.

代入 (2.12) 可得

(1+(t(k))Ty(k))αk=tk+1(t(k))TJky(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)}.

[IJky(k)01]T[TkJkt(k)(t(k))TJk1][IJky(k)01]=[Tk001+(t(k))Ty(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],

Tk+1T_{k + 1} 的对称正定性可知 1+(t(k))y(k)>0.1 + \left(t^{(k)}\right)^{\top}y^{(k)} > 0. 于是可得 y(k+1)y^{(k + 1)} 的计算公式

αk=tk+1(t(k))TJky(k)1+(t(k))Ty(k),u(k)=y(k)+αkJky(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}

运算量为 O(k)\mathcal{O}(k) . 因此, 我们就可以从一阶 Yule-Walker 方程出发, 利用递推公式 (2.13) 逐步计算出 Tny=rnT_{n}y = -r_{n} 的解. 总的运算量大约为 3n23n^{2} .

为了进一步减少运算量, 我们引入一个辅助变量. 记 τk1+(t(k))y(k)\tau_k \triangleq 1 + (t^{(k)})^\top y^{(k)} , 则

τk+1=1+(t(k+1))y(k+1)=1+[(t(k))Ttk+1][y(k)+αkJky(k)αk]=1+(t(k))Ty(k)+αk(tk+1+(t(k))TJky(k))=(1αk2)τ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}

于是可得求解 Yule-Walker 方程组的 Levinson-Durbin 算法 [37, 89] (由 Levinson 和 Durbin 分别于 1946 年和 1960 年独立提出 [81]), 总运算量大约为 2n22n^{2} .

算法2.13.求解Yule-Walker方程组的Levinson-Durbin算法

1: 输入数据: t=[t1,t2,,tn]%t = \left\lbrack {{t}_{1},{t}_{2},\ldots ,{t}_{n}}\right\rbrack \% 注: 这里假定 t0=1{t}_{0} = 1
2: y(1)=t1,τ=1,α=t1y(1) = -t_1, \tau = 1, \alpha = -t_1
3: for k=1k = 1 to n1n - 1 do
4: τ=(1α2)τ\tau = (1 - \alpha^2)\tau
5: α=1τ(tk+1+i=1ktiy(k+1i))\alpha = -\frac{1}{\tau}\left(t_{k + 1} + \sum_{i = 1}^{k}t_{i}y(k + 1 - i)\right)
6: y(1:k)=y(1:k)+αy(k:1:1)y(1:k) = y(1:k) + \alpha y(k: -1:1)
7: y(k+1)=αy(k + 1) = \alpha
8: end for

由(2.13)可知,只要 Tk+1T_{k + 1} 非奇异,就能确保 1+(t(k))y(k)01 + \left(t^{(k)}\right)^{\top}y^{(k)}\neq 0 ,算法就能顺利进行下去所以Levinson-Durbin算法有意义的充要条件是 TnT_{n} 的所有顺序主子式非零,此时我们称 TnT_{n} 是强正则(strongly regular)的.

一般右端项的对称正定Toeplitz线性方程组

考虑一般右端项的方程组

Tnx=b,T _ {n} x = b,

其中 TnT_{n} 是对称正定 Toeplitz 矩阵, b=[b1,b2,,bn]Tb = [b_{1}, b_{2}, \ldots, b_{n}]^{\mathsf{T}} . 与求解 Yule-Walker 方程组类似, 我们利用递推方法来求解.

假定 x(k)x^{(k)}y(k)y^{(k)} 分别是方程组

Tkx=[b1,b2,,bk]Tb(k)Tky=[t1,t2,,tk]Tt(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)}

的解, 即 x(k)=Tk1b(k),y(k)=Tk1t(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]Tk+1x=b(k+1)T_{k + 1}x = b^{(k + 1)} 的解, 即

[TkJkt(k)(t(k))TJk1][v(k)βk]=[b(k)bk+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].

通过计算可得

{v(k)=Tk1b(k)βkTk1Jkt(k)=x(k)βkJkTk1t(k)=x(k)+βkJky(k),βk=bk+1(t(k))TJkx(k)1+(t(k))Ty(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.

所以, 我们可以先计算 Tkx=b(k)T_{k}x = b^{(k)}Tkx=t(k)T_{k}x = -t^{(k)} 的解, 然后利用上述公式得到 Tk+1x=b(k+1)T_{k+1}x = b^{(k+1)} 的解, 这就是Levinson-Durbin算法, 该算法的总运算量大约为 4n24n^{2} .

算法2.14.求解对称正定Toeplitz线性方程组的Levinson-Durbin算法

1: 输入数据: t=[t1,t2,,tn1]t = \left[t_{1}, t_{2}, \ldots, t_{n-1}\right]b=[b1,b2,,bn]%b = \left[b_{1}, b_{2}, \ldots, b_{n}\right] \quad \% 这里假定 t0=1t_{0} = 1
2: y(1)=t1,x(1)=b1,τ=1,α=t1y(1) = -t_{1}, x(1) = b_{1}, \tau = 1, \alpha = -t_{1}
3: for k=1k = 1 to n1n - 1 do
4: τ=(1α2)τ\tau = (1 - \alpha^{2})\tau
5: β=1τ(bk+1i=1ktix(k+1i))\beta = \frac{1}{\tau}\left(b_{k + 1} - \sum_{i = 1}^{k}t_{i}x(k + 1 - i)\right)
6: x(1:k)=x(1:k)+βy(k:1:1)x(1:k) = x(1:k) + \beta y(k: - 1:1)
7: x(k+1)=βx(k + 1) = \beta
8: if k<n1k < n - 1 then
9: α=1τ(tk+1+i=1ktiy(k+1i))\alpha = -\frac{1}{\tau}\left(t_{k + 1} + \sum_{i = 1}^{k}t_{i}y(k + 1 - i)\right)
10: y(1:k)=y(1:k)+αy(k:1:1)y(1:k) = y(1:k) + \alpha y(k: - 1:1)
11: y(k+1)=αy(k + 1) = \alpha
12: end if
13: end for

通过Levinson-Durbin算法也可以得到 TnT_{n}LDLT\mathrm{LDL}^{\mathsf{T}} 分解[81],因此对称正定Toeplitz矩阵的 LDLT\mathrm{LDL}^{\mathsf{T}} 分解运算量为 O(n2)\mathcal{O}(n^{2})

注记

在数学与工程的许多应用中都会出现 Toeplitz 线性方程组, 如样条插值, 时间序列分析, Markov 链, 排队论, 信号与图像处理等. Levinson-Durbin 算法最早用于求解线性预测问题中的 Toeplitz 线性方程组 (即 Yule-Walker 方程组) [89]

Tn+1[x1]=[0nEn],T _ {n + 1} \left[ \begin{array}{c} x \\ 1 \end{array} \right] = \left[ \begin{array}{c} 0 _ {n} \\ E _ {n} \end{array} \right],

其中 xRnx \in \mathbb{R}^nEnRE_n \in \mathbb{R} 是未知量, 0n0_n 表示长度为 nn 的零向量. 显然该线性方程组等价于求解方程组 (2.10). 在线性预测模型中, Tn+1T_{n+1} 表示相关矩阵 (correlation matrix), EnE_n 表示 (均方根) 预测误差 (root mean square prediction error).

非对称 Toeplitz 线性方程组

考虑非对称 Toeplitz 线性方程组 Tnx=bT_{n}x = b ,其中

Tn=[1t1tn1s1t1sn1s11],b=[b1b2bn].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].

假定 TnT_{n} 的所有顺序主子矩阵都非奇异, 与Levinson-Durbin算法类似, 我们可以通过递归方式来计算 Tnx=bT_{n}x = b 的解, 但此时需要用到两个辅组线性方程组.

假定 x(k),y(k)x^{(k)},y^{(k)}z(k)z^{(k)} 分别是方程组

Tkx=b(k),Tky=t(k)Tkz=s(k)[s1,s2,,sk]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}

的解.设 x(k+1)=[v(k)βk]x^{(k + 1)} = \left[ \begin{array}{c}v^{(k)}\\ \beta_k \end{array} \right]Tk+1x=b(k+1)T_{k + 1}x = b^{(k + 1)} 的解,则可得

[TkJkt(k)(t(k))TJk1][v(k)βk]=[b(k)bk+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].

通过计算可得

{v(k)=Tk1b(k)βkTk1Jkt(k)=x(k)βkJkTk1t(k)=x(k)+βkJky(k),βk=bk+1(s(k))Jkx(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}

下面考虑 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], 代入 Tk+1Ty(k+1)=t(k+1)T_{k + 1}^{\mathsf{T}}y^{(k + 1)} = -t^{(k + 1)} ,整理后可得

{u(k)=y(k)αkJkTk1s(k)=y(k)+αkJkz(k),αk=tk+1(t(k))Jky(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}

同样, 设 z(k+1)=[w(k)γk],z^{(k + 1)} = \left[ \begin{array}{c}w^{(k)}\\ \gamma_k \end{array} \right], 代入 Tk+1Tz(k+1)=s(k+1)T_{k + 1}^{\mathsf{T}}z^{(k + 1)} = -s^{(k + 1)} ,整理后可得

{w(k)=z(k)γkJk(Tk)1t(k)=z(k)+γkJky(k),γk=sk+1(s(k))Jky(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}

由此, 就可以根据更新公式 (2.14), (2.15), (2.16) 得到 x(k+1),y(k+1)x^{(k + 1)}, y^{(k + 1)}z(k+1)z^{(k + 1)} . 这样, 我们就可以设计出求解非对称 Toeplitz 线性方程组的递推算法.