本篇文章适合个人复习翻阅,不建议新手入门使用
本专栏:数值分析复习 的前置知识主要有:数学分析、高等代数、泛函分析
线性方程组的直接解法
Gauss(高斯)消元法
设有线性方程组
{
a
11
x
1
+
a
12
x
2
+
⋯
+
a
1
n
x
n
=
b
1
a
21
x
1
+
a
22
x
2
+
⋯
+
a
2
n
x
n
=
b
2
⋮
a
n
1
x
1
+
a
n
2
x
2
+
⋯
+
a
n
n
x
n
=
b
n
\begin{cases} a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n=b_1\\ a_{21}x_1+a_{22}x_2+\cdots+a_{2n}x_n=b_2\\ \vdots\\ a_{n1}x_1+a_{n2}x_2+\cdots+a_{nn}x_n=b_n\\ \end{cases}
⎩
⎨
⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋮an1x1+an2x2+⋯+annxn=bn
或写为矩阵形式
(
a
11
a
12
⋯
a
1
n
a
21
a
22
⋯
a
2
n
⋮
a
n
1
a
n
2
⋯
a
n
n
)
(
x
1
x
2
⋮
x
n
)
=
(
b
1
b
2
⋮
b
n
)
\begin{pmatrix} a_{11}&a_{12}&\cdots&a_{1n}\\ a_{21}&a_{22}&\cdots&a_{2n}\\ \vdots\\ a_{n1}&a_{n2}&\cdots&a_{nn}\\ \end{pmatrix}\begin{pmatrix} x_1\\x_2\\\vdots\\x_n \end{pmatrix}=\begin{pmatrix} b_1\\b_2\\\vdots\\b_n \end{pmatrix}
a11a21⋮an1a12a22an2⋯⋯⋯a1na2nann
x1x2⋮xn
=
b1b2⋮bn
简记为 A x = b Ax=b Ax=b
解线性方程组的经典算法是以下所称的“Guass消元法”
定义:Guass(高斯)消元法
从第一列开始,依次将系数矩阵
A
A
A 每列对角线以下的元素变为零,得到一个上三角阵;方法是用该列对角线元素所在的行乘以相应倍数消去下面几行;
方程组化为
(
a
11
(
1
)
a
12
(
1
)
⋯
a
1
n
(
1
)
a
22
(
2
)
⋯
a
2
n
(
2
)
⋱
a
n
n
(
n
)
)
(
x
1
x
2
⋮
x
n
)
=
(
b
1
(
1
)
b
2
(
2
)
⋮
b
n
(
n
)
)
\begin{pmatrix} a_{11}^{(1)}&a_{12}^{(1)}&\cdots&a_{1n}^{(1)}\\ &a_{22}^{(2)}&\cdots&a_{2n}^{(2)}\\ &&\ddots&\\ &&&a_{nn}^{(n)}\\ \end{pmatrix}\begin{pmatrix} x_1\\x_2\\\vdots\\x_n \end{pmatrix}=\begin{pmatrix} b_1^{(1)}\\b_2^{(2)}\\\vdots\\b_n^{(n)} \end{pmatrix}
a11(1)a12(1)a22(2)⋯⋯⋱a1n(1)a2n(2)ann(n)
x1x2⋮xn
=
b1(1)b2(2)⋮bn(n)
这一步称为消元
然后依次计算
x
n
,
x
n
−
1
,
…
,
x
1
x_n,x_{n-1},\dots,x_1
xn,xn−1,…,x1,得到求解公式
{
x
n
=
b
n
(
n
)
a
n
n
(
n
)
x
k
=
(
b
k
(
k
)
−
∑
j
=
k
+
1
n
a
k
j
(
k
)
x
j
)
/
a
k
k
(
k
)
,
k
=
n
−
1
,
n
−
2
,
…
,
1
\begin{cases} x_n=\frac{b_n^{(n)}}{a_{nn}^{(n)}}\\ x_k=(b_k^{(k)}-\sum\limits_{j=k+1}^na_{kj}^{(k)}x_j)/a_{kk}^{(k)},k=n-1,n-2,\dots,1 \end{cases}
⎩
⎨
⎧xn=ann(n)bn(n)xk=(bk(k)−j=k+1∑nakj(k)xj)/akk(k),k=n−1,n−2,…,1
这一步称为回代
Guass消元法的改进:选(列)主元的高斯消元法
一般的Guass消元法的缺点是:无法处理对角线元素为零的矩阵,原因是零无法做分母;并且如果对角线上的元素绝对值较小,可能会产生数量级较大的数,计算结果可能不稳定,从而造成较大误差;因此采用如下称为选主元的高斯消元法,其在原先方法的基础上,在对第
k
k
k 列进行消元时,考虑第
k
k
k 列的从第
k
k
k 行到最后一行的元素,选出绝对值最大的元素,将该元素所在的行与第
k
k
k 行交换,再进行消元
高斯消元法与矩阵的LU分解
高斯消元法的矩阵表示
高斯消元法的消元过程相当于对
A
A
A 依次左乘
n
−
1
{n-1}
n−1 个下三角阵
L
1
,
…
,
L
n
−
1
L_1,\dots,L_{n-1}
L1,…,Ln−1,使其成为上三角阵U,记
L
−
1
=
L
n
−
1
⋯
L
1
L^{-1}=L_{n-1}\cdots L_1
L−1=Ln−1⋯L1
L
1
=
(
1
∗
1
∗
1
⋮
⋱
∗
1
)
,
L
2
=
(
1
1
∗
1
⋮
⋱
∗
1
)
,
…
,
L
n
−
1
=
(
1
1
⋱
1
∗
1
)
L_1=\begin{pmatrix} 1&&&&\\ *&1&&&\\ *&&1&&\\ \vdots&&&\ddots&\\ *&&&&1\\ \end{pmatrix},L_2=\begin{pmatrix} 1&&&&\\ &1&&&\\ &*&1&&\\ &\vdots&&\ddots&\\ &*&&&1\\ \end{pmatrix},\dots,L_{n-1}=\begin{pmatrix} 1&&&&\\ &1&&&\\ &&\ddots&&\\ &&&1&\\ &&&*&1\\ \end{pmatrix}
L1=
1∗∗⋮∗11⋱1
,L2=
11∗⋮∗1⋱1
,…,Ln−1=
11⋱1∗1
命题
设
L
−
1
=
L
n
−
1
⋯
L
1
L^{-1}=L_{n-1}\cdots L_1
L−1=Ln−1⋯L1,则有
L
−
1
=
(
1
∗
1
∗
∗
1
⋮
⋮
⋮
⋱
∗
∗
∗
⋯
1
)
L^{-1}=\begin{pmatrix} 1&&&&\\ *&1&&&\\ *&*&1&&\\ \vdots&\vdots&\vdots&\ddots&\\ *&*&*&\cdots&1\\ \end{pmatrix}
L−1=
1∗∗⋮∗1∗⋮∗1⋮∗⋱⋯1
其中该矩阵的第一列与 L 1 L_1 L1 的第一列相同,第二列与 L 2 L_2 L2 的第二列相同……
证明
记
e
i
e_i
ei 为单位向量,
l
i
l_i
li 的前
i
i
i 个元素为0,后面的元素来自矩阵
L
i
L_i
Li 的第
i
i
i 列的第
i
+
1
i+1
i+1 行到最后一行的元素
注意到
L
k
=
I
−
l
k
⋅
e
k
′
L_k=I-l_k\cdot e_k'
Lk=I−lk⋅ek′
L k − 1 = I + l k ⋅ e k ′ L_k^{-1}=I+l_k\cdot e_k' Lk−1=I+lk⋅ek′
L k − 1 ⋅ L k + 1 − 1 = ( I + l k ⋅ e k ′ ) ( I + l k + 1 ⋅ e k + 1 ′ ) = I + l k ⋅ e k ′ + l k + 1 ⋅ e k + 1 ′ L_k^{-1}\cdot L_{k+1}^{-1}=(I+l_k\cdot e_k')(I+l_{k+1}\cdot e_{k+1}')=I+l_k\cdot e_k'+l_{k+1}\cdot e_{k+1}' Lk−1⋅Lk+1−1=(I+lk⋅ek′)(I+lk+1⋅ek+1′)=I+lk⋅ek′+lk+1⋅ek+1′
定义:矩阵的LU分解
矩阵
A
∈
C
m
×
m
A\in\mathbb{C}^{m\times m}
A∈Cm×m的LU分解:A=LU,其中L是单位下三角矩阵,U是上三角阵
Gauss消元法相当于先求出矩阵的 LU 分解,再解如下方程组
{
L
y
=
b
U
x
=
y
\begin{cases} Ly=b\\ Ux=y \end{cases}
{Ly=bUx=y
高斯消元法
写成元素的形式,得到高斯消元法的具体公式为
第一步:写出矩阵
U
U
U 的第一行,
L
L
L 的第一列
u
1
i
=
a
1
i
(
i
=
1
,
2
,
…
,
n
)
,
l
i
1
=
a
i
1
/
u
11
,
i
=
2
,
3
,
…
,
n
u_{1i}=a_{1i}(i=1,2,\dots,n),l_{i1}=a_{i1}/u_{11},i=2,3,\dots,n
u1i=a1i(i=1,2,…,n),li1=ai1/u11,i=2,3,…,n
第二步:对每个
r
r
r,
r
=
2
,
…
,
n
r=2,\dots,n
r=2,…,n
计算
U
U
U 的第
r
r
r 行
u
r
i
=
a
r
i
−
∑
k
=
1
r
−
1
l
r
k
u
k
i
,
i
=
r
,
r
+
1
,
…
,
n
u_{ri}=a_{ri}-\sum\limits_{k=1}^{r-1}l_{rk}u_{ki},i=r,r+1,\dots,n
uri=ari−k=1∑r−1lrkuki,i=r,r+1,…,n
计算
L
L
L 的第
r
r
r 列
l
i
r
=
(
a
i
r
−
∑
k
=
1
r
−
1
l
i
k
u
k
r
)
/
u
r
r
l_{ir}=(a_{ir}-\sum\limits_{k=1}^{r-1}l_{ik}u_{kr})/u_{rr}
lir=(air−k=1∑r−1likukr)/urr
得到完整的矩阵 L , U L,U L,U
第三步:求解
L
y
=
b
Ly=b
Ly=b
{
y
1
=
b
1
y
i
=
b
i
−
∑
k
=
1
i
−
1
l
i
k
y
k
,
i
=
2
,
3
,
…
,
n
\begin{cases} y_1=b_1\\ y_i=b_i-\sum\limits_{k=1}^{i-1}l_{ik}y_k,i=2,3,\dots,n \end{cases}
⎩
⎨
⎧y1=b1yi=bi−k=1∑i−1likyk,i=2,3,…,n
第四步:求解
U
x
=
y
Ux=y
Ux=y
{
x
n
=
y
n
/
u
n
n
x
i
=
(
y
i
−
∑
k
=
i
+
1
n
u
i
k
x
k
)
/
u
i
i
,
i
=
n
−
1
,
n
−
2
,
…
,
1
\begin{cases} x_n=y_n/u_{nn}\\ x_i=(y_i-\sum\limits_{k=i+1}^nu_{ik}x_k)/u_{ii},i=n-1,n-2,\dots,1 \end{cases}
⎩
⎨
⎧xn=yn/unnxi=(yi−k=i+1∑nuikxk)/uii,i=n−1,n−2,…,1
其中第二步的公式称为杜利特尔(Doolittle)分解
选主元的高斯消元法
在高斯消元法的基础上,修改为
第零步:初始设置一个
n
n
n 维空数组
I
p
I_p
Ip ,选取矩阵
A
A
A 的第一列的主元
a
i
1
=
max
1
≤
i
≤
n
∣
a
i
1
∣
a_{i_1}=\max\limits_{1\leq i\leq n}|a_{i1}|
ai1=1≤i≤nmax∣ai1∣
将第1行与第 i 1 i_1 i1 行交换,把新的矩阵的 i − j i-j i−j 元重新记为 a i j a_{ij} aij,把 i 1 i_1 i1 写入 I p I_p Ip 的第一个位置
第一步:写出矩阵
U
U
U 的第一行,
L
L
L 的第一列
u
1
i
=
a
1
i
(
i
=
1
,
2
,
…
,
n
)
,
l
i
1
=
a
i
1
/
u
11
,
i
=
2
,
3
,
…
,
n
u_{1i}=a_{1i}(i=1,2,\dots,n),l_{i1}=a_{i1}/u_{11},i=2,3,\dots,n
u1i=a1i(i=1,2,…,n),li1=ai1/u11,i=2,3,…,n
第二步:对每个
r
r
r,
r
=
2
,
…
,
n
r=2,\dots,n
r=2,…,n
计算
U
U
U 的第
r
r
r 行第
r
r
r 列
s
i
=
a
i
r
−
∑
k
=
1
r
−
1
l
i
k
u
k
r
,
i
=
r
,
r
+
1
,
…
,
n
s_i=a_{ir}-\sum\limits_{k=1}^{r-1}l_{ik}u_{kr},i=r,r+1,\dots,n
si=air−k=1∑r−1likukr,i=r,r+1,…,n
选取第
r
r
r 列的主元
∣
s
i
r
∣
=
max
r
≤
i
≤
n
∣
s
i
∣
|s_{i_r}|=\max\limits_{r\leq i\leq n}|s_i|
∣sir∣=r≤i≤nmax∣si∣
交换第 i i i 行与第 i r i_r ir 行,把新的矩阵的 i − j i-j i−j 元重新记为 a i j a_{ij} aij,把 i r i_r ir 写入 I p I_p Ip 的第 r r r 个位置
计算
U
U
U 的第
r
r
r 行
u
r
i
=
a
r
i
−
∑
k
=
1
r
−
1
l
r
k
u
k
i
,
i
=
r
,
r
+
1
,
…
,
n
u_{ri}=a_{ri}-\sum\limits_{k=1}^{r-1}l_{rk}u_{ki},i=r,r+1,\dots,n
uri=ari−k=1∑r−1lrkuki,i=r,r+1,…,n
计算
L
L
L 的第
r
r
r 列
l
i
r
=
(
a
i
r
−
∑
k
=
1
r
−
1
l
i
k
u
k
r
)
/
u
r
r
l_{ir}=(a_{ir}-\sum\limits_{k=1}^{r-1}l_{ik}u_{kr})/u_{rr}
lir=(air−k=1∑r−1likukr)/urr
得到完整的矩阵
L
,
U
L,U
L,U ,和记录排列阵信息的数组
I
p
I_p
Ip
第三步:对
i
=
1
,
2
,
3
,
…
,
n
i=1,2,3,\dots,n
i=1,2,3,…,n ,
交换向量
b
b
b 的第
i
i
i 行和第
i
r
i_r
ir 行,记新的向量的第
i
i
i 个分量仍为
b
i
b_i
bi ,计算如下公式
y
i
=
{
b
1
,
i
=
1
b
i
−
∑
k
=
1
i
−
1
l
i
k
y
k
,
i
=
2
,
…
,
n
y_i=\begin{cases} b_1,&i=1\\ b_i-\sum\limits_{k=1}^{i-1}l_{ik}y_k,&i=2,\dots,n\\ \end{cases}
yi=⎩
⎨
⎧b1,bi−k=1∑i−1likyk,i=1i=2,…,n
第四步:求解
U
x
=
y
Ux=y
Ux=y
{
x
n
=
y
n
/
u
n
n
x
i
=
(
y
i
−
∑
k
=
i
+
1
n
u
i
k
x
k
)
/
u
i
i
,
\begin{cases} x_n=y_n/u_{nn}\\ x_i=(y_i-\sum\limits_{k=i+1}^nu_{ik}x_k)/u_{ii}, \end{cases}
⎩
⎨
⎧xn=yn/unnxi=(yi−k=i+1∑nuikxk)/uii,
注:在实际算法中,常将矩阵 L , U L,U L,U 记在同一个矩阵里,矩阵的上三角部分源于 U U U ,下三角部分(除对角线外)源于 L L L
对称正定矩阵的楚列斯基分解
对称阵的三角分解定理
设
A
A
A 是
n
n
n 阶对称矩阵,且
A
A
A 的所有顺序主子式均不为零,则
A
A
A 可唯一分解为
A
=
L
D
L
T
A=LDL^T
A=LDLT
其中 L L L 为单位下三角阵, D D D 为对角阵
证明
设矩阵
A
A
A 的LU分解
A
=
L
1
U
1
A=L_1U_1
A=L1U1
其中
L
1
L_1
L1 为单位下三角阵,
U
1
U_1
U1 为对角阵;
U
1
U_1
U1 可分解为
U
1
=
(
u
11
u
22
⋱
u
n
n
)
(
1
u
12
u
11
⋯
u
1
n
u
11
1
⋯
u
2
n
u
22
⋱
⋮
1
)
=
D
U
0
U_1=\begin{pmatrix} u_{11}&&&\\ &u_{22}&&\\ &&\ddots&\\ &&&u_{nn}\\ \end{pmatrix}\begin{pmatrix} 1&\frac{u_{12}}{u_{11}}&\cdots&\frac{u_{1n}}{u_{11}}\\ &1&\cdots&\frac{u_{2n}}{u_{22}}\\ &&\ddots&\vdots\\ &&&1\\ \end{pmatrix}=DU_0
U1=
u11u22⋱unn
1u11u121⋯⋯⋱u11u1nu22u2n⋮1
=DU0
其中
D
D
D 为对角阵,
U
0
U_0
U0 为单位上三角阵,从而
A
=
L
1
D
U
0
A=L_1DU_0
A=L1DU0
其转置为
A
=
U
0
T
D
L
1
T
A=U_0^TDL_1^T
A=U0TDL1T
由 LU 分解的唯一性可得
L
1
=
U
0
T
L_1=U_0^T
L1=U0T ,即
A
=
L
1
D
L
1
T
A=L_1DL_1^T
A=L1DL1T
命题:对称正定矩阵的cholesky(楚列斯基)分解
设
A
A
A 为
n
n
n 阶对称正定矩阵,则存在一个实的非奇异下三角阵
L
L
L,使得
A
=
L
L
T
A=LL^T
A=LLT
称为 A A A 的cholesky分解,若限定 L L L 的对角元为正,则分解唯一
证明思路
注意到以下事实是显然的,在上述
A
=
L
D
L
T
A=LDL^T
A=LDLT 中,有
D
=
(
u
11
u
22
⋱
u
n
n
)
=
(
u
11
u
22
⋱
u
n
n
)
(
u
11
u
22
⋱
u
n
n
)
≜
D
0
2
D=\begin{pmatrix} u_{11}&&&\\ &u_{22}&&\\ &&\ddots&\\ &&&u_{nn}\\ \end{pmatrix}=\begin{pmatrix} \sqrt{u_{11}}&&&\\ &\sqrt{u_{22}}&&\\ &&\ddots&\\ &&&\sqrt{u_{nn}}\\ \end{pmatrix}\begin{pmatrix} \sqrt{u_{11}}&&&\\ &\sqrt{u_{22}}&&\\ &&\ddots&\\ &&&\sqrt{u_{nn}}\\ \end{pmatrix}\triangleq D_0^2
D=
u11u22⋱unn
=
u11u22⋱unn
u11u22⋱unn
≜D02
解对称正定方程组的平方根法
平方根法
解对称正定方程组
A
x
=
b
Ax=b
Ax=b ,使用cholesky分解
A
=
(
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
)
A=\begin{pmatrix} l_{11}&&&\\ l_{21}&l_{22}&&\\ \vdots&\vdots&\ddots&\\ l_{n1}&l_{n2}&\cdots&l_{nn}\\ \end{pmatrix}\begin{pmatrix} l_{11}&l_{21}&\cdots&l_{n1}\\ &l_{22}&\cdots&l_{n2}\\ &&\ddots&\vdots\\ &&&l_{nn}\\ \end{pmatrix}
A=
l11l21⋮ln1l22⋮ln2⋱⋯lnn
l11l21l22⋯⋯⋱ln1ln2⋮lnn
算法如下:
第一步:对于
j
=
1
,
2
,
…
,
n
j=1,2,\dots,n
j=1,2,…,n,
l
j
j
=
(
a
j
j
−
∑
k
=
1
j
−
1
l
j
k
2
)
1
2
l_{jj}=(a_{jj}-\sum\limits_{k=1}^{j-1}l_{jk}^2)^{\frac{1}{2}}
ljj=(ajj−k=1∑j−1ljk2)21
l i j = ( a i j − ∑ k = 1 j − 1 l i k l j k ) / l j j , i = j + 1 , … , n l_{ij}=(a_{ij}-\sum\limits_{k=1}^{j-1}l_{ik}l_{jk})/l_{jj},i=j+1,\dots,n lij=(aij−k=1∑j−1likljk)/ljj,i=j+1,…,n
第二步:求解
L
y
=
b
Ly=b
Ly=b
y
i
=
(
b
i
−
∑
k
=
1
i
−
1
l
i
k
y
k
)
/
l
i
i
,
i
=
1
,
2
,
…
,
n
y_i=(b_i-\sum\limits_{k=1}^{i-1}l_{ik}y_k)/l_{ii},i=1,2,\dots,n
yi=(bi−k=1∑i−1likyk)/lii,i=1,2,…,n
第三步:求解
L
T
x
=
y
L^Tx=y
LTx=y
x
i
=
(
b
i
−
∑
k
=
i
+
1
n
l
k
i
x
k
)
/
l
i
i
,
i
=
n
,
n
−
1
,
…
,
1
x_i=(b_i-\sum\limits_{k=i+1}^nl_{ki}x_k)/l_{ii},i=n,n-1,\dots,1
xi=(bi−k=i+1∑nlkixk)/lii,i=n,n−1,…,1
注:观察第一步中的公式,容易发现 L L L 是对角占优的,故算法稳定
平方根法的公式需要用到开方运算,为了避免这一点,有如下的改进算法
改进的平方根法
解对称正定方程组
A
x
=
b
Ax=b
Ax=b ,使用分解式
A
=
(
1
l
21
1
⋮
⋮
⋱
l
n
1
l
n
2
⋯
1
)
(
d
1
d
2
⋱
d
n
)
(
1
l
21
⋯
l
n
1
1
⋯
l
n
2
⋱
⋮
1
)
A=\begin{pmatrix} 1&&&\\ l_{21}&1&&\\ \vdots&\vdots&\ddots&\\ l_{n1}&l_{n2}&\cdots&1\\ \end{pmatrix}\begin{pmatrix} d_1&&&\\ &d_2&&\\ &&\ddots&\\ &&&d_n\\ \end{pmatrix}\begin{pmatrix} 1&l_{21}&\cdots&l_{n1}\\ &1&\cdots&l_{n2}\\ &&\ddots&\vdots\\ &&&1\\ \end{pmatrix}
A=
1l21⋮ln11⋮ln2⋱⋯1
d1d2⋱dn
1l211⋯⋯⋱ln1ln2⋮1
算法如下:
第一步:对于 i = 1 , 2 , … , n i=1,2,\dots,n i=1,2,…,n
记
t
i
j
=
l
i
j
d
j
t_{ij}=l_{ij}d_j
tij=lijdj
从而
l
i
j
=
(
a
i
j
−
∑
k
=
1
j
−
1
t
i
k
l
j
k
)
d
j
,
j
=
1
,
2
,
…
,
i
−
1
l_{ij}=(a_{ij}-\sum\limits_{k=1}^{j-1}t_{ik}l_{jk})d_j,j=1,2,\dots,i-1
lij=(aij−k=1∑j−1tikljk)dj,j=1,2,…,i−1
d i = a i i − ∑ k = 1 i − 1 t i k 2 l i k d_i=a_{ii}-\sum\limits_{k=1}^{i-1}t_{ik}^2l_{ik} di=aii−k=1∑i−1tik2lik
第二步:求解
L
y
=
b
Ly=b
Ly=b
y
1
=
b
1
y_1=b_1
y1=b1
y i = b i − ∑ k = 1 i − 1 l i k y k , i = 2 , … , n y_i=b_i-\sum\limits_{k=1}^{i-1}l_{ik}y_k,i=2,\dots,n yi=bi−k=1∑i−1likyk,i=2,…,n
第三步:求解
D
L
T
x
=
y
DL^Tx=y
DLTx=y
x
n
=
y
n
/
d
n
x_n=y_n/d_n
xn=yn/dn
x i = y i / d i − ∑ k = i + 1 n l k i x k , i = n − 1 , … , 1 x_i=y_i/d_i-\sum\limits_{k=i+1}^nl_{ki}x_k,i=n-1,\dots,1 xi=yi/di−k=i+1∑nlkixk,i=n−1,…,1
注:实际算法中常将 L , D L,D L,D 的元素储存在同一个矩阵中
追赶法
设对角占优的三对角方程组
(
b
1
c
1
a
2
b
2
c
2
⋱
⋱
⋱
a
n
−
1
b
n
−
1
c
n
−
1
a
n
b
n
)
(
x
1
x
2
⋮
x
n
−
1
x
n
)
=
(
f
1
f
2
⋮
f
n
−
1
f
n
)
\begin{pmatrix} b_1&c_1&&&\\ a_2&b_2&c_2&&\\ &\ddots&\ddots&\ddots&\\ &&a_{n-1}&b_{n-1}&c_{n-1}\\ &&&a_n&b_n\\ \end{pmatrix} \begin{pmatrix} x_1\\x_2\\\vdots\\x_{n-1}\\x_n \end{pmatrix}= \begin{pmatrix} f_1\\f_2\\\vdots\\f_{n-1}\\f_n\\ \end{pmatrix}
b1a2c1b2⋱c2⋱an−1⋱bn−1ancn−1bn
x1x2⋮xn−1xn
=
f1f2⋮fn−1fn
简记为 A x = f Ax=f Ax=f ,其中 A A A 是行对角占优的,且 b 1 , c 1 , a n , b n ≠ 0 b_1,c_1,a_n,b_n\neq 0 b1,c1,an,bn=0
追赶法
解对称正定的三对角方程组
A
x
=
f
Ax=f
Ax=f ,使用分解式
A
=
(
b
1
c
1
a
2
b
2
c
2
⋱
⋱
⋱
a
n
−
1
b
n
−
1
c
n
−
1
a
n
b
n
)
=
(
α
1
r
2
α
2
⋱
⋱
r
n
α
n
)
(
1
β
1
1
⋱
⋱
β
n
−
1
1
)
A=\begin{pmatrix} b_1&c_1&&&\\ a_2&b_2&c_2&&\\ &\ddots&\ddots&\ddots&\\ &&a_{n-1}&b_{n-1}&c_{n-1}\\ &&&a_n&b_n\\ \end{pmatrix}=\begin{pmatrix} \alpha_1&&&\\ r_2&\alpha_2&&\\ &\ddots&\ddots&\\ &&r_n&\alpha_n\\ \end{pmatrix}\begin{pmatrix} 1&\beta_1&&\\ &1&\ddots&&\\ &&\ddots&\beta_{n-1}\\ &&&1\\ \end{pmatrix}
A=
b1a2c1b2⋱c2⋱an−1⋱bn−1ancn−1bn
=
α1r2α2⋱⋱rnαn
1β11⋱⋱βn−11
算法如下:
第一步:计算
β
i
\beta_i
βi
β
1
=
c
1
/
b
1
\beta_1=c_1/b_1
β1=c1/b1
β i = c i / ( b i − a i β i − 1 ) , i = 2 , 3 , … , n − 1 \beta_i=c_i/(b_i-a_i\beta_{i-1}),i=2,3,\dots,n-1 βi=ci/(bi−aiβi−1),i=2,3,…,n−1
第二步:求解
L
y
=
f
Ly=f
Ly=f
y
1
=
f
1
/
b
1
y_1=f_1/b_1
y1=f1/b1
y i = ( f i − a i y i − 1 ) / ( b i − a β i − 1 ) , i = 2 , 3 , … , n y_i=(f_i-a_iy_{i-1})/(b_i-a\beta_{i-1}),i=2,3,\dots,n yi=(fi−aiyi−1)/(bi−aβi−1),i=2,3,…,n
第三步:求解
U
x
=
y
Ux=y
Ux=y
x
n
=
y
n
x_n=y_n
xn=yn
x i = y i − β i x i + 1 , i = n − 1 , n − 2 , … , 1 x_i=y_i-\beta_ix_{i+1},i=n-1,n-2,\dots,1 xi=yi−βixi+1,i=n−1,n−2,…,1
参考书籍:《数值分析》李庆扬 王能超 易大义 编