由实际问题得到的方程组的
系数矩阵或者常数向量的元素,本身会存在一定的误差;这些初始数据的误差在计算过程中就会向前传播,从而影响到方程组的解。病态方程组是指因系数的很小改变却导致解改变很大的方程组,称相应的系数矩阵A为病态矩阵。病态方程组对任何算法都将产生数值不稳定性。对病态方程组有四种处理原则:采用高精度的算术运算;采用预处理方法;采用特殊的数值解法或寻找出现病态的原因,改变原问题的提法。
求解线性方程组Ax=b时,设A是n阶
非奇异矩阵,‖·‖为矩阵的任一种从属范数,则 ,称为矩阵A的条件数,其中 是A的逆矩阵。
病态方程组是指因系数的很小改变却导致解改变很大的
方程组。病态的另外一个解释是很大范围的解都能近似满足方程组。因为舍入误差会使系数有一些小的改变,那么对于病态方程组,这些人为的改变会导致解有很大的误差。
设方程组为Ax=b,系数矩阵A和常数向量b的
扰动分别记为:和,如果和很小,而很大,则称方程组Ax=b为病态(ill-conditioned)方程组,称系数矩阵A为关于求解方程组或求逆的病态矩阵;反之,如果和微小时,也很微小,则称方程组Ax=b为良态(well-conditioned)方程组,称系数矩阵A为关于求解方程组或求逆的良态矩阵。病态方程组对任何算法都将产生数值不稳定性(如用LU分解法求解
线性方程组时,更换主元有可能使解的精确度大大下降)。
求解线性方程组Ax=b时,设A是n阶非奇异矩阵,当条件数Cond(A)比较大时,A和b的小扰动会引起解的较大误差,所以
条件数Cond(A)刻画了方程组Ax=b的性态。如果条件数比较大,就说方程组是“病态”的;如果条件数比较小,就说方程组是“良态”的;当然,病态和良态是相对的。
可见A或b中元素的0.0001的微小变化会导致方程组解的巨大差异,这样的方程组就是“病态”方程组,可以利用范数来描述向量和矩阵的
扰动误差。
对于病态的
线性方程组,其求解自然要难于良态的方程组,或要采取特殊的方法才能求出有用的解。在求解以前,怎样判断和发现Ax=b是病态的呢?
根据病态方程组的定义,可以通过计算
条件数来判断。由于定义中涉及A ,故计算量太大而通常不被采用.人们经常利用的是估计条件数的方法。
(1)当det(A)相对来说很小或者A的某些行(或列)近似
线性相关时,Ax=b可能是病态的;
(2)如果用选主元消去法求解Ax=b,在A的约化过程中出现小的
主元,Ax=b可能是病态的;
(4)当系数矩阵A的元素
数量级相差很大,并且无一定规则时,Ax=b可能是病态的。
寻求
非奇异矩阵P,Q,使求解Ax=b(设A为n维非奇异方阵)转化为求解 或,其中 ,且改善A的条件数 。于是,可先求解 ,再求解 。当A为对称正定矩阵时,一般选取P,Q为
对角阵或
三角阵。
对病态
线性方程组Ax=b进行
预处理,如取P,Q为对角阵,称为
平衡方法,即当系数矩阵A的元素数量级相差很大时,可采用行均衡或列均衡方法,这时矩阵A的条件数可能得到改善。所谓行均衡,是在解Ax=b之前,对A的每一行都乘以适当的数,使A所有的行按照某种范数大体上有相同的长度。