线性方程组的直接解法参考: 线性方程组的直接解法
病态方程组
由于计算机舍入误差,在求解方程组
A
x
=
b
Ax=b
Ax=b时总会有误差,实际上是在求解
(
A
+
δ
A
)
(
x
+
δ
x
)
=
b
+
δ
b
(A+\delta A)(x+\delta x)=b+\delta b
(A+δA)(x+δx)=b+δb
有时方程组的解对于系数矩阵和右端向量的扰动非常敏感,此时称为病态方程组
矩阵范数
一个线性映射 A : X → Y A:X\rightarrow Y A:X→Y称为有界的,是指存在常数 C > 0 , s . t . ∀ x ∈ X , ∣ ∣ A x ∣ ∣ Y ≤ C ∣ ∣ x ∣ ∣ X C>0,s.t. \forall x\in X,||Ax||_Y\le C||x||_X C>0,s.t.∀x∈X,∣∣Ax∣∣Y≤C∣∣x∣∣X,对于有界线性算子 A A A可以定义: ∣ ∣ A ∣ ∣ : = s u p ∣ ∣ x ∣ ∣ X = 1 ∣ ∣ A x ∣ ∣ Y < + ∞ ||A||:=sup_{||x||_X=1}||Ax||_Y<+ \infty ∣∣A∣∣:=sup∣∣x∣∣X=1∣∣Ax∣∣Y<+∞ 为算子 A A A的范数
可以证明
矩阵条件数
讨论加入扰动后方程可解性: A + δ A = A ( I + A − 1 δ A ) A+\delta A=A(I+A^{-1}\delta A) A+δA=A(I+A−1δA)
引理:
若 ∣ ∣ B ∣ ∣ < 1 ||B||<1 ∣∣B∣∣<1,则 I ± B I\pm B I±B可逆,且 ( I ± B ) − 1 ≤ 1 1 − ∣ ∣ B ∣ ∣ (I\pm B)^{-1}\le\frac{1}{1-||B||} (I±B)−1≤1−∣∣B∣∣1
证明:反证法
定理:
设 d e t A ≠ 0 , b ≠ 0 , ∣ ∣ A − 1 ∣ ∣ ∣ ∣ δ A ∣ ∣ < − 1 det A\ne0,b\ne0,||A^{-1}||||\delta A||<-1 detA=0,b=0,∣∣A−1∣∣∣∣δA∣∣<−1,则有
∣ ∣ δ x ∣ ∣ ∣ ∣ x ∣ ∣ ≤ ∣ ∣ A ∣ ∣ ∣ ∣ A − 1 ∣ ∣ 1 − ∣ ∣ A ∣ ∣ ∣ ∣ A − 1 ∣ ∣ ∣ ∣ δ A ∣ ∣ ∣ ∣ A ∣ ∣ ( ∣ ∣ δ A ∣ ∣ ∣ ∣ A ∣ ∣ + ∣ ∣ δ b ∣ ∣ ∣ ∣ b ∣ ∣ ) \frac{||\delta x||}{||x||}\le \frac{||A|| ||A^{-1}||}{1-||A||||A^{-1}||\frac{||\delta A||}{||A||}}( \frac{||\delta A||}{||A||}+\frac{||\delta b||}{||b||}) ∣∣x∣∣∣∣δx∣∣≤1−∣∣A∣∣∣∣A−1∣∣∣∣A∣∣∣∣δA∣∣∣∣A∣∣∣∣A−1∣∣(∣∣A∣∣∣∣δA∣∣+∣∣b∣∣∣∣δb∣∣)
由此可以看到,舍入误差可能会被放大 ∣ ∣ A ∣ ∣ ∣ ∣ A − 1 ∣ ∣ ||A|| ||A^{-1}|| ∣∣A∣∣∣∣A−1∣∣倍,定义矩阵条件数
设 d e t A ≠ 0 detA\ne0 detA=0,令 c o n d ( A ) = ∣ ∣ A ∣ ∣ ⋅ ∣ ∣ A − 1 ∣ ∣ cond(A)=||A||·||A^{-1}|| cond(A)=∣∣A∣∣⋅∣∣A−1∣∣称为矩阵 A A A的条件数
条件数越大,线性方程越病态
那么找到一个解
x
^
\hat{x}
x^,当
r
=
b
−
A
x
^
r=b-A\hat{x}
r=b−Ax^很小时,是否可以说明
x
^
\hat{x}
x^是线性方程组一个很好的近似?
答案是不可以!
后验误差误差估计定理:
1 c o n d ( A ) ∣ ∣ r ∣ ∣ ∣ ∣ b ∣ ∣ ≤ ∣ ∣ x − x ^ ∣ ∣ ∣ ∣ x ∣ ∣ ≤ c o n d ( A ) ∣ ∣ r ∣ ∣ ∣ ∣ b ∣ ∣ \frac{1}{cond(A)}\frac{||r||}{||b||}\le\frac{||x-\hat{x}||}{||x||}\le cond(A)\frac{||r||}{||b||} cond(A)1∣∣b∣∣∣∣r∣∣≤∣∣x∣∣∣∣x−x^∣∣≤cond(A)∣∣b∣∣∣∣r∣∣
如何改善近似解
当矩阵条件数不是太大,可以用如下迭代法来改善:
- r 0 = b , k = 1 r_0=b,k=1 r0=b,k=1;
- 用直接解法解线性方程组 A x k = r k − 1 Ax_k=r_{k-1} Axk=rk−1;
- 获取残差 r k = b − A x k r_k=b-Ax_k rk=b−Axk;
- 若 ∣ ∣ r k ∣ ∣ > ϵ ||r_k||>\epsilon ∣∣rk∣∣>ϵ, k + = 1 k+=1 k+=1,返回1,否则输出 x = x k x=x_k x=xk;
通常按照上述方法迭代几次可以提高几位有效数字,但是如果矩阵条件数太大,此方法无效。如果条件数太大,需要对原矩阵做一些处理,以期降低其条件数,思路:
找到矩阵
P
,
Q
P,Q
P,Q,
原线性方程组可以修改为
P
A
Q
Q
−
1
x
=
P
b
PAQQ^{-1}x=Pb
PAQQ−1x=Pb,令
P
A
Q
=
A
~
,
P
b
=
b
~
PAQ=\tilde{A},Pb=\tilde{b}
PAQ=A~,Pb=b~,使得
c
o
n
d
(
A
~
)
≪
c
o
n
d
(
A
)
cond(\tilde{A})\ll cond(A)
cond(A~)≪cond(A)
为了简化计算,通常选择较简单形式的
P
,
Q
P,Q
P,Q,如上下三角阵、对角阵…
当矩阵元素之间量级差较大,像上述例题中使用的行平衡、列平衡方法有效,但是当差距不大时收效甚微,如Hilbert矩阵
正则化方法
俄国数学家Tikhonov提出了一种正则化方法,利用矩阵奇异值分解来进行。
问题:线性方程组舍入误差的根源是什么?
对 A ∈ C m × n A\in C^{m\times n} A∈Cm×n,我们有 M = A T A ∈ C n × n M=A^TA\in C^{n\times n} M=ATA∈Cn×n为半正定矩阵,设其特征值为 μ 1 2 , μ 2 2 , . . . , μ n 2 \mu_1^2, \mu_2^2,...,\mu_n^2 μ12,μ22,...,μn2,设 μ 1 ≥ μ 2 ≥ . . . ≥ μ n \mu_1\ge \mu_2\ge...\ge \mu_n μ1≥μ2≥...≥μn,称为 A A A的奇异值
对非方阵的矩阵 A A A,设其秩为 r r r,则 μ 1 ≥ μ 2 ≥ . . . ≥ μ r + 1 = . . . = μ n = 0 \mu_1\ge\mu_2\ge...\ge\mu_{r+1}=...=\mu_n=0 μ1≥μ2≥...≥μr+1=...=μn=0。存在奇异值分解 A = V D U T A=VDU^T A=VDUT
易知
A
x
=
b
Ax=b
Ax=b要有解,则
(
b
,
v
i
)
=
0
,
∀
i
>
r
+
1
(b,v_i)=0,\forall i>r+1
(b,vi)=0,∀i>r+1
则
b
=
∑
j
=
1
r
(
b
,
v
j
)
v
j
b=\sum_{j=1}^{r}(b,v_j)v_j
b=∑j=1r(b,vj)vj
同理,
x
=
∑
j
=
1
n
(
x
,
u
j
)
u
j
x=\sum_{j=1}^n(x,u_j)u_j
x=∑j=1n(x,uj)uj
则
A
x
=
∑
j
=
1
n
(
x
,
u
j
)
A
u
j
=
∑
j
=
1
r
μ
j
(
x
,
u
j
)
v
j
=
∑
j
=
1
r
(
b
,
v
j
)
v
j
Ax=\sum_{j=1}^n(x,u_j)Au_j=\sum_{j=1}^r\mu_j(x,u_j)v_j=\sum_{j=1}^{r}(b,v_j)v_j
Ax=∑j=1n(x,uj)Auj=∑j=1rμj(x,uj)vj=∑j=1r(b,vj)vj
则
x
=
∑
j
=
1
r
1
μ
j
(
b
,
v
j
)
u
j
x=\sum_{j=1}^r\frac{1}{\mu_j}(b,v_j)u_j
x=∑j=1rμj1(b,vj)uj
由此可知,当
μ
j
≪
1
\mu_j\ll1
μj≪1时,存在较大的舍入误差
病态条件:
c
o
n
d
(
A
)
2
=
μ
1
μ
n
≥
1
cond(A)_2=\frac{\mu_1}{\mu_n}\ge1
cond(A)2=μnμ1≥1,由
μ
1
∼
O
(
1
)
\mu_1\sim O(1)
μ1∼O(1),则
μ
n
≪
1
\mu_n\ll1
μn≪1。
因此,较大的矩阵条件数可以推出存在远小于1的奇异值,而在求解方程解时由于出现1除以一个远小于1的数这一运算操作,导致了该线性方程组的求解存在较大的舍入误差的现象
吉洪诺夫正则化方法
采用近似解:
x
=
∑
j
=
1
r
μ
j
α
+
μ
j
2
(
b
,
v
j
)
u
j
x=\sum_{j=1}^r\frac{\mu_j}{\alpha+\mu_j^2}(b,v_j)u_j
x=∑j=1rα+μj2μj(b,vj)uj
使用吉洪诺夫正则化方法存在两种误差:舍入误差和
α
\alpha
α的近似误差,在实际操作中是一个trade-off的的问题,一般取
α
∼
δ
2
3
\alpha\sim\delta^{\frac{2}{3}}
α∼δ32,其中
δ
\delta
δ表示机器的舍入误差。
除了吉洪诺夫正则化方法,还有其他的方法,包括在这个式子中 x = ∑ j = 1 r 1 μ j ( b , v j ) u j x=\sum_{j=1}^r\frac{1}{\mu_j}(b,v_j)u_j x=∑j=1rμj1(b,vj)uj直接舍弃小于一定阈值的奇异值对应的项等。