5 方程组的固有性态和误差
这里说的 固有性态实际上就是方程组自身参数对计算中误差的大小的影响。数学中的线性方程组 A x = b Ax=b Ax=b的计算是精确的,但是计算机计算却有种种精确度的限制,导致最终得到的结果会和真实值有所偏差,而有的方程偏差小,有的方程偏差大,这一节就是讨论的这个。
5.1 固有性态与其度量
5.1.1 固有性态
举个数值分析-张轶 中的例子,如下方程组 A x = b Ax=b Ax=b:
A = [ 1 , 0.99 0.99 , 0.98 ] , b = [ b 1 b 2 ] A=\left[ \begin{array}{c}{1\quad\quad, 0.99}\\{0.99\quad,0.98} \end{array}\right], b=\left[ \begin{array}{c}{b_1}\\{b_2} \end{array}\right] A=[1,0.990.99,0.98],b=[b1b2]
其精确解(你可以自己试着解下)为:
x
=
(
−
9800
b
1
+
9900
b
2
,
9900
b
1
−
10000
b
2
)
T
x=(-9800b_1+9900b_2,9900b_1-10000b_2)^T
x=(−9800b1+9900b2,9900b1−10000b2)T
这时如果方程右端有一个微小的扰动误差,则
b
b
b变成:
b
~
=
(
b
1
+
ε
,
b
2
)
T
\widetilde{b} = (b_1+\varepsilon,b_2)^T
b
=(b1+ε,b2)T
那么方程
A
x
~
=
b
~
A\widetilde{x} = \widetilde{b}
Ax
=b
新的解误差大小为:
x
~
−
x
=
(
−
9800
ε
,
9900
ε
)
T
\widetilde{x}-x=(-9800\varepsilon,9900\varepsilon)^T
x
−x=(−9800ε,9900ε)T
由此可知,方程组的解将方程中参数微小误差放大了将近一万倍,当然有的矩阵可能就不会放大误差。这种计算解过程中放大或缩小误差的特性,就叫做方程组本身的固有性态。
而由原始数据微小变化而导致解严重失真的方程组成为病态方程组(非常形象),相应的系数矩阵 A A A就被成为病态矩阵。
5.1.2 条件数
为了衡量方程组的固有性态,这里使用条件数来表示方程组对原始数据变动的敏感程度。其记为:
C
o
n
d
(
A
)
=
∣
∣
A
∣
∣
∣
∣
A
−
1
∣
∣
Cond(A)=||A||\space||A^{-1}||
Cond(A)=∣∣A∣∣ ∣∣A−1∣∣
上面的
∣
∣
.
∣
∣
||.||
∣∣.∣∣表示任意(因为范数的等价性,所以任意)一种矩阵范数。所以结合上一小节,条件数过大的方程组就是病态方程组,其系数矩阵就是病态矩阵。
另外,根据矩阵2范数的计算,如果
A
A
A是对称矩阵,那么有如下计算公式:
C
o
n
d
2
(
A
)
=
∣
λ
1
∣
∣
λ
n
∣
Cond_2(A)=\frac{|\lambda_1|}{|\lambda_n|}
Cond2(A)=∣λn∣∣λ1∣
其中
λ
1
,
λ
n
\lambda_1,\lambda_n
λ1,λn分别是
A
A
A绝对值最大和最小的特征值。
5.2 病态矩阵解决方法
前面说了,固有性态是由方程组自身数值确定的,而一般下面这些情况的矩阵就有可能是病态的:
- 矩阵元素大的特别大,小的特别小,并且没有一定规律;
- 矩阵行列式值很小,或者某些行(列)近似线性相关;
- 上一节的消去法过程中,出现数量级很小的主元素;
- 计算解 x ~ \widetilde{x} x 的剩余向量很小,但是仍然不符合要求。
这里讲两种方法避免病态矩阵,预条件和迭代改善是分别在计算矩阵之前和之后的方法
5.2.1 预条件
预条件方法,基本思想就是把一个病态方程组,转换成一个等价的非病态的,求解转换后的解,在根据这个解求原始解,比如有如下的转化:
A
~
x
~
=
b
~
\widetilde{A}\widetilde{x}=\widetilde{b}
A
x
=b
A ~ = C − 1 A C − 1 , x ~ = C x , b ~ = C − 1 b \widetilde{A}=C^{-1}AC^{-1},\quad\widetilde{x}=Cx,\quad\widetilde{b}=C^{-1}b A =C−1AC−1,x =Cx,b =C−1b
这样进行转换之后,方程组与原始方程组等价,称之为预条件方程组,其中可逆矩阵 C C C称为预条件矩阵。先根据这个方程组求解得到 x ~ \widetilde{x} x ,再求解 C x = x ~ Cx=\widetilde{x} Cx=x 即可以得到原方程组的解。一般按照下面两个规则选取预条件矩阵:
- C o n d ( A ~ ) < C o n d ( A ) Cond(\widetilde{A}) < Cond(A) Cond(A )<Cond(A),也就是转换后的条件数要明显小于原始条件数
- 方程组 C z = d Cz=d Cz=d容易求解,减少计算量。
特别的,如果 A A A是对称正定矩阵,那么可以选用 C = D 1 2 C=D^{\frac{1}{2}} C=D21,其中D是A的对角元素构成的对角矩阵。
5.2.2 迭代改善
迭代改善,是根据每一步的求解误差,反复利用误差计算新的解,使精度更高,误差更小。比如方程组
A
x
=
b
Ax=b
Ax=b的近似解为
x
(
1
)
x^{(1)}
x(1),其剩余向量:
r
(
1
)
=
b
−
A
x
(
1
)
r^{(1)}=b-Ax^{(1)}
r(1)=b−Ax(1)
再求解方程组:
A
x
=
r
(
1
)
Ax=r^{(1)}
Ax=r(1)
得到解
x
~
(
1
)
\widetilde{x}^{(1)}
x
(1),这时原始解的迭代改善解为:
x
(
2
)
=
x
(
1
)
+
x
~
(
1
)
x^{(2)}=x^{(1)}+\widetilde{x}^{(1)}
x(2)=x(1)+x
(1)。此时一般迭代改善解更为精确甚至就是精确解,如果对当前解还不满意,那么可以重复上面的步骤进行迭代,这就是迭代改善