病态矩阵
中国有句古话“差之毫厘,谬以千里”,说的可能是测量时一个小小的误差,方程组的解就差距非常大。比如以下方程组:
x
1
+
x
2
=
20
x
1
+
1.999
x
2
=
19.99
x_1+x_2=20\\ x_1+1.999x_2=19.99\\
x1+x2=20x1+1.999x2=19.99
解得
x
1
=
10
,
x
2
=
10
x_1=10,x_2=10
x1=10,x2=10。假如这是一个实验场景,再一次测量得到了另一个方程:
x
1
+
x
2
=
20
x
1
+
1.001
x
2
=
19.99
x
1
=
30
,
x
2
=
−
10
x_1+x_2=20\\ x_1+1.001x_2=19.99\\ x_1=30,x_2=-10
x1+x2=20x1+1.001x2=19.99x1=30,x2=−10
这时候方程组的解为
x
1
=
30
,
x
2
=
−
10
x_1=30,x_2=-10
x1=30,x2=−10。一个小小的系数误差,方程组的解就变动如此巨大。对于这种系数矩阵,我们就叫它病态矩阵ill-conditioned matrix。
误差分析
当然,病态矩阵无论是系数变动一下还是常数项变动一下,结果都千差万别。所以只需要研究下常数项的变动就可以了。假设原方程如下:
A
x
=
b
Ax=b
Ax=b
常数项出了点误差,误差为
e
e
e,方程就变成了:
A
y
=
b
+
e
Ay=b+e
Ay=b+e
如果常数项只是一个数字,那么常数项的误差系数就是
e
b
\frac{e}b
be。但是向量没有除法,所有怎么衡量误差呢?这个时候就需要用到范数,把向量变成一个非负实数。所以常数项的误差就这样衡量:
∥
e
∥
∥
b
∥
\frac{\parallel e\parallel}{\parallel b\parallel}
∥b∥∥e∥
同意,方程解的误差就这样衡量:
∥
y
−
x
∥
∥
x
∥
\frac{\parallel y-x\parallel}{\parallel x\parallel}
∥x∥∥y−x∥
误差不等式
方程组误差不等式:
1
∥
A
∥
∥
A
−
1
∥
∥
e
∥
∥
b
∥
≤
∥
y
−
x
∥
∥
x
∥
≤
∥
A
∥
∥
A
−
1
∥
∥
e
∥
∥
b
∥
\frac1{\parallel A\parallel\parallel A^{-1}\parallel}\frac{\parallel e\parallel}{\parallel b\parallel}\le\frac{\parallel y-x\parallel}{\parallel x\parallel}\le\parallel A\parallel\parallel A^{-1}\parallel\frac{\parallel e\parallel}{\parallel b\parallel}
∥A∥∥A−1∥1∥b∥∥e∥≤∥x∥∥y−x∥≤∥A∥∥A−1∥∥b∥∥e∥
怎么证明呢?首先,两个方程相减,得到了以下方程:
A
(
y
−
x
)
=
e
⇒
y
−
x
=
A
−
1
e
A(y-x)=e\\ \Rightarrow y-x=A^{-1}e
A(y−x)=e⇒y−x=A−1e
根据范数的相容不等式,有:
∥
y
−
x
∥
≤
∥
A
−
1
∥
∥
e
∥
\parallel y-x\parallel\le\parallel A^{-1}\parallel \parallel e\parallel
∥y−x∥≤∥A−1∥∥e∥
再根据
b
=
A
x
b=Ax
b=Ax和范数相容不等式,有:
∥
b
∥
≤
∥
A
∥
∥
x
∥
⇒
1
≤
∥
A
∥
∥
x
∥
∥
b
∥
⇒
1
∥
x
∥
≤
∥
A
∥
∥
b
∥
\parallel b\parallel \le \parallel A\parallel \parallel x\parallel\\ \Rightarrow 1 \le \frac{\parallel A\parallel \parallel x\parallel}{\parallel b \parallel}\\ \Rightarrow \frac{1}{\parallel x\parallel} \le \frac{\parallel A\parallel }{\parallel b \parallel}
∥b∥≤∥A∥∥x∥⇒1≤∥b∥∥A∥∥x∥⇒∥x∥1≤∥b∥∥A∥
将两个不等式相乘得到了:
∥
y
−
x
∥
1
∥
x
∥
≤
∥
A
−
1
∥
∥
e
∥
∥
A
∥
∥
b
∥
⇒
∥
y
−
x
∥
∥
x
∥
≤
∥
A
∥
∥
A
−
1
∥
∥
e
∥
∥
b
∥
\parallel y-x\parallel \frac{1}{\parallel x\parallel}\le \parallel A^{-1}\parallel \parallel e\parallel \frac{\parallel A\parallel }{\parallel b \parallel}\\ \Rightarrow \frac{\parallel y-x\parallel}{\parallel x\parallel}\le \parallel A\parallel \parallel A^{-1}\parallel \frac{ \parallel e\parallel}{\parallel b \parallel}
∥y−x∥∥x∥1≤∥A−1∥∥e∥∥b∥∥A∥⇒∥x∥∥y−x∥≤∥A∥∥A−1∥∥b∥∥e∥
右边就证明完了。根据
e
=
A
(
y
−
x
)
e=A(y-x)
e=A(y−x),有:
∥
e
∥
≤
∥
A
∥
∥
y
−
x
∥
⇒
∥
e
∥
∥
A
∥
≤
∥
y
−
x
∥
\parallel e \parallel \le \parallel A\parallel \parallel y-x \parallel\\ \Rightarrow \frac{\parallel e \parallel}{\parallel A\parallel } \le \parallel y-x \parallel\\
∥e∥≤∥A∥∥y−x∥⇒∥A∥∥e∥≤∥y−x∥
再根据
x
=
A
−
1
b
x=A^{-1}b
x=A−1b,有:
∥
x
∥
≤
∥
A
−
1
∥
∥
b
∥
⇒
∥
A
−
1
∥
∥
b
∥
≥
∥
x
∥
⇒
1
∥
A
−
1
∥
∥
b
∥
≤
1
∥
x
∥
\parallel x \parallel \le \parallel A^{-1}\parallel \parallel b \parallel \\ \Rightarrow \parallel A^{-1}\parallel \parallel b \parallel \ge \parallel x \parallel\\ \Rightarrow \frac1{\parallel A^{-1}\parallel \parallel b \parallel} \le \frac1{\parallel x \parallel}
∥x∥≤∥A−1∥∥b∥⇒∥A−1∥∥b∥≥∥x∥⇒∥A−1∥∥b∥1≤∥x∥1
两个不等式合起来,得到:
∥
e
∥
∥
A
∥
1
∥
A
−
1
∥
∥
b
∥
≤
∥
y
−
x
∥
1
∥
x
∥
⇒
1
∥
A
∥
∥
A
−
1
∥
∥
e
∥
∥
b
∥
≤
∥
y
−
x
∥
∥
x
∥
\frac{\parallel e \parallel}{\parallel A\parallel }\frac1{\parallel A^{-1}\parallel \parallel b \parallel} \le \parallel y-x \parallel\frac1{\parallel x \parallel}\\ \Rightarrow \frac{1}{\parallel A\parallel \parallel A^{-1}\parallel}\frac{\parallel e \parallel}{ \parallel b \parallel} \le \frac{\parallel y-x \parallel}{\parallel x \parallel}
∥A∥∥e∥∥A−1∥∥b∥1≤∥y−x∥∥x∥1⇒∥A∥∥A−1∥1∥b∥∥e∥≤∥x∥∥y−x∥
左边就证明出来。
条件数
误差
∥
y
−
x
∥
∥
x
∥
\frac{\parallel y-x\parallel}{\parallel x\parallel}
∥x∥∥y−x∥的最小值没有什么意义,因为随着
∥
e
∥
\parallel e \parallel
∥e∥变得很小,误差也很小,重点看方程解误差的最大值。
∥
A
∥
∥
A
−
1
∥
\parallel A\parallel \parallel A^{-1}\parallel
∥A∥∥A−1∥决定了对方程组常数项误差的最大放大倍数,这个就是矩阵的条件数condition number,符号为
K
(
A
)
K(A)
K(A)。一般来说向量2-范数和矩阵F范数相容,所以我们就用F-范数计算矩阵范数。
再来看前面那个方程组的条件数是多少:
A
=
(
1
1
1
0.999
)
∣
∣
A
∣
∣
F
=
1.9995001875468779
A
−
1
=
(
−
998.9999999999991
999.9999999999991
999.9999999999991
−
999.9999999999991
)
∣
∣
A
−
1
∣
∣
F
=
1999.500187546876
∣
∣
A
∣
∣
F
∣
∣
A
−
1
∣
∣
F
=
3998.000999999996
A=\begin{pmatrix}1 & 1\\ 1 & 0.999\\ \end{pmatrix}\\ ||A||_F=1.9995001875468779\\ A^{-1}=\begin{pmatrix}-998.9999999999991 & 999.9999999999991\\ 999.9999999999991 & -999.9999999999991\\ \end{pmatrix}\\ ||A^{-1}||_F=1999.500187546876\\ ||A||_F||A^{-1}||_F=3998.000999999996
A=(1110.999)∣∣A∣∣F=1.9995001875468779A−1=(−998.9999999999991999.9999999999991999.9999999999991−999.9999999999991)∣∣A−1∣∣F=1999.500187546876∣∣A∣∣F∣∣A−1∣∣F=3998.000999999996
所以这个矩阵的条件数是非常大的,一个微小的误差就会导致方程的解变化很大。