什么是矩阵的条件数、病态矩阵解方程组六个步骤等概念?

病态矩阵在研究线性方程组 Ax=b 时,我们把系数矩阵 A 看作一个系统,这个系统的输入是右端项 b
,输出是方程的解 x 。接下来就研究这个系统内在的性质。例如如下线性方程组我们可以得到其精确解:\left[\begin{array}{cc} 1 & 1 \\ 1 & 1.0001 \end{array}\right]\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right]=\left[\begin{array}{l} 2 \\ 2 \end{array}\right] \rightarrow\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right]=\left[\begin{array}{l} 2 \\ 0 \end{array}\right]\\ 这里的系数矩阵A在理论上是对称正定的。一种很常见的情况是右端项 b 的值有微小扰动(例如观测误差、截断误差等)。我们来关注扰动带来的影响,例如: \left[\begin{array}{cc} 1 & 1 \\ 1 & 1.0001 \end{array}\right]\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right]=\left[\begin{array}{c} 2 \\ 2.0001 \end{array}\right] \rightarrow\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right]=\left[\begin{array}{l} 1 \\ 1 \end{array}\right]\\ 这都是精确解,但万分之一的扰动却带来了百分百的误差!这表明系数矩阵 A虽然理论上有对称正定的良好性质,但存在内在的不稳定性。我们把这种右端项的微小扰动导致巨大误差的线性称为“病态”,称系数矩阵 A 为病态(ill-condition)矩阵。误差分析现在研究输入的误差如何传递到输出。考虑求解线性方程组Ax=b。当右端项 b 有微小扰动 \delta b 时,相应地方程组的解 x 有变化 \delta x 。注意 \delta b 和 \delta x 都为向量。此时原方程组变为了: A(x+\delta x)=b+\delta b \tag1 我们要分析的就是输入的微小扰动会给输出的解带来多大的误差,即 \delta x 相对于 x 的变化程度。我们一般用相对误差来刻画误差的大小: \frac{\delta x}{x} ,但是向量除以向量没有意义。因此我们可以考虑二者范数的比值: \frac{\
\delta x\|}{\|x\|} \\ 同理也可用 \frac{\
\delta b\|}{\|b\|}
来刻画输入值的相对误差。(1)式展开化简为: A \delta x=\delta b \tag2 \\ 等价于 \delta x=A^{-1}
\delta b ,根据范数性质得: \|\delta x\
\leq\left\|A^{-1}\right\
\|\delta b\
\tag3 \\ 再对原方程 Ax=b 取范数得: \|A\
\|x\
\geq\|b\
,变换为: \frac{1}{\|x\|} \leq \frac{\|A\|}{\|b\|} \tag4
(3)(4)合并得: \frac{\|\delta x\|}{\|x\|} \leq { \bbox[pink,2pt]{\|A\
\|A^{-1}\|}} \frac{\|\delta b\|}{\|b\|} \tag5
(5)表明,输入值的相对误差 \frac{\
\delta b\|}{\|b\|}
,被放大了 \|A\
\|A^{-1}\
倍反映到输出值的相对误差 \frac{\|\delta x\|}{\|x\|} 。这个倍数只和系数矩阵 A 有关,我们把他叫做矩阵 A 的条件数: \operatorname{cond}(A)=\|A^{-1}\
\|A\|\\
当然不同类型的范数对应着不同的条件数。条件数是矩阵的内在性质,与解方程的方法无关。只要矩阵 A 是确定的,无论是直接法还是迭代法求解都不能改变条件数的误差放大倍数。条件数的性质根据范数性质可得条件数≥1\|A^{-1}\
\|A\
\geq \|A^{-1}A\
=\|I\|=1 \\ 单位矩阵的条件数显然为1,下面提到正交矩阵的条件数也为1。对于任意常数 c \neq 0 , \operatorname{cond}(\mathrm{cA})=\operatorname{cond}(\mathrm{A}) \\ 条件数类型不同的范数对应不同的条件数。无穷条件数: \operatorname{cond}(\mathrm{A})_{\infty}=\|\mathrm{A}^{-1}\|_{\infty} *\|\mathrm{~A}\|_{\infty} 2-条件数(谱条件数):即最大和最小奇异值的比值: \operatorname{cond}(\mathrm{A})_{2}=\|\mathrm{A}^{-1}\|_{2} *\|\mathrm{~A}\|_{2}=\sqrt{\frac{\lambda_{\max }(\mathrm{A}^{\mathrm{T}} \mathrm{A})}{\lambda_{\min }(\mathrm{A}^{\mathrm{T}} \mathrm{A})}}=\frac{|\sigma_{1}|}{\left|\sigma_{\mathrm{n}}\right|} \\ 当 A 正定时,奇异值和特征值相等: \operatorname{cond}(\mathrm{A})_{2}=\frac{\left|\lambda_{1}\right|}{\left|\lambda_{\mathrm{n}}\right|} 正交矩阵的条件数正交矩阵( R R^{T}=I )的2-范数为1,其2-条件数也为1 \operatorname{cond}(\mathrm{R})_{2}=1\\ 并且满足 R 左乘或右乘任意矩阵 A 后,条件数与 A 相等: \operatorname{cond}(\mathrm{RA})_{2}=\operatorname{cond}(\mathrm{AR})_{2}=\operatorname{cond}(\mathrm{A})_{2}\\ 正交矩阵的性质保证了不会改变系统的稳定性。证明正交矩阵的条件数:根据正交矩阵的性质 R
R^{\mathrm{T}}=I \Leftrightarrow R^{-1}=R^{\mathrm{T}} ,其条件数: \operatorname{cond}(R)=\|R\|_{2} \|R^{\mathrm{T}}\|_{2}=\|R\|_{2}^{2}=1 \\ 证明正交矩阵条件数的性质:\operatorname{cond}(R A)=\sqrt{\frac{\lambda_{\operatorname{Max}}\left((R A)^{\mathrm{T}}
R A\right)}{\lambda_{\min }\left((R A)^{\mathrm{T}}
R A\right)}}=\sqrt{\frac{\lambda_{\operatorname{Max}}\left(A^{\mathrm{T}} A\right)}{\lambda_{\min }\left(A^{\mathrm{T}} A\right)}} \\ 条件数的计算以最常用的谱条件数为例: \operatorname{cond}(\mathrm{A})_{2}=\|\mathrm{A}^{-1}\|_{2} *\|\mathrm{~A}\|_{2}=\sqrt{\frac{\lambda_{\max }(\mathrm{A}^{\mathrm{T}} \mathrm{A})}{\lambda_{\min }(\mathrm{A}^{\mathrm{T}} \mathrm{A})}}=\frac{|\sigma_{1}|}{\left|\sigma_{\mathrm{n}}\right|} \\ 为了得到条件数,必须计算: A 的逆; A 的特征值/奇异值。计算特征值/奇异值的计算难度远大于解方程 Ax=b 。为了解 Ax=b 而先去计算代价更大的特征值/奇异值是不明智的。实际应用中,如无特殊必要一般不计算条件数。那只能用猜条件数。猜测的经验:例如矩阵的行列式接近零(几乎奇异)的矩阵,条件数可能很大,如Hilbert矩阵;或者矩阵的元素间数量级相差很大,则该矩阵可能病态。条件数与预处理如果要多次求解方程 Ax=b,且对精度要求较高,可以按照如下方法来估计条件数。给一个随机的向量 y ,计算 b=A * y ;求解Ax=b,得到 x ,看看 x-y 的大小。如果已经知道系数矩阵 A 的条件数较大,且对精度要求较高,必须进行预处理后再解方程组。原方程 Ax=b 两端乘上一个非奇异矩阵 P (预条件子)得到等价方程: PAx=Pb\\ 使得新的系数矩阵 PA 条件数很小: \operatorname{cond}(P A) \ll \operatorname{cond}(A) ,这样就能得到精度较高的解。要求 P 满足简单、易得。理论上最好的 P 为 A^{-1} , PA=I 。当然求逆的代价巨大,不现实。实际上找到一个良好的预条件子是很困难的,没有一种确定性的方法。举例:利用MATLAB大致估计矩阵的条件数% MATLAB中小量为e^-16,可以据此大致估计条件数的数量级。
% 例如:
>> A = rand(5)
A =
0.7060
0.8235
0.4387
0.4898
0.2760
0.0318
0.6948
0.3816
0.4456
0.6797
0.2769
0.3171
0.7655
0.6463
0.6551
0.0462
0.9502
0.7952
0.7094
0.1626
0.0971
0.0344
0.1869
0.7547
0.1190
>> y = rand(5, 1)
y =
0.4984
0.9597
0.3404
0.5853
0.2238
>> b = A * y
b =
1.6399
1.2255
1.2278
1.6572
0.6134
>> x = A \ b
x =
0.4984
0.9597
0.3404
0.5853
0.2238
>> x - y
ans =
1.0e-15 *
0.3886
-0.2220
0.3886
-0.3331
-0.1665
% 可见x-y的数量级在e^-15,与误差e^-16差一个数量级,相差不大。预计A条件数在一百一下:
>> cond(A)
ans =
7.4466再看看Hilbert矩阵巨大的条件数:% 然后找一个病态的A,如Hilbert矩阵,看看误差数量级和条件数:
>> A = hilb(5)
A =
1.0000
0.5000
0.3333
0.2500
0.2000
0.5000
0.3333
0.2500
0.2000
0.1667
0.3333
0.2500
0.2000
0.1667
0.1429
0.2500
0.2000
0.1667
0.1429
0.1250
0.2000
0.1667
0.1429
0.1250
0.1111
>> b = A * y
b =
1.2828
0.8085
0.6037
0.4849
0.4063
>> x = A \ b
x =
0.4984
0.9597
0.3404
0.5853
0.2238
>> x - y
ans =
1.0e-11 *
0.0052
-0.1007
0.4361
-0.6592
0.3225
% x-y的数量级为e^-11,和误差误差e^-16差5个数量级,意味着条件数可能在100000以上!
>> cond(A)
ans =
4.7661e+05
% 意味着输入误差会被放大接近五十万倍!}

我要回帖

更多关于 矩阵解方程组六个步骤 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信