条件数

更新时间:2024-02-22 17:48

数值分析中,一个问题的条件数是该问题在数值计算中的容易程度的衡量,也就是该问题的适定性。一个低条件数的问题称为良态的,而高条件数的问题称为病态(或者说非良态)的。

定义

条件数定义为:矩阵的范数,乘以矩阵的逆矩阵的范数。

线性代数的分析可知,矩阵的条件数总是大于1.正交矩阵的条件数等于1,奇异矩阵的条件数为无穷大,而病态矩阵的条件数则为比较大的数据。

矩阵条件数

例如,线性方程Ax=b的条件数给出了数值求解得到一个解 x有多不精确的一个上限。

条件数也会增大b中存在的误差。这个放大的程度可以使得一个低条件数的系统(通常是件好事情)变得不精确而使得一个高条件数的系统(通常是件坏事情)变得精确,这取决于b的数据知道得多清楚。对于这个问题,条件数定义为

在任何自洽的矩阵范数中。这个数字经常在数值线性代数中出现,因而单独有个名字,称为矩阵条件数:

当然,这个定义依赖于范数的选取。

若是 矩阵范数

其中分别是A的极大和极小奇异值。因此

若A是正规矩阵

分别是A的极大和极小(根据模数)特征值

若A是酉矩阵

若是矩阵范数而 A是下三角矩阵,非奇异(也即)则:

其它条件数

奇异值分解,多项式求根,特征值和其它许多问题的条件数也可以有定义。

通常,如果一个数值问题是适定的,它可以表达为一个函数 f映射它的数据(一个实数的m元组x)到它的解(一个实数的 n元组y)。

它的条件数则定义为解中的相对误差的半径和数据中的相对误差的比的最大值,取遍整个问题的定义域:

其中是问题中的数据的偏差的某个合理的小数值。

如果 f也是可微的,这可以近似的表示为

Matlab

cond(A,1):1范数

cond(A,2)或cond(A):2范数

cond(A,inf):无穷范数

condest(A)用来计算方阵1范数条件数的下界 rcond(A)用来计算矩阵逆的条件数,数值接近1时为良好条件矩阵,接近0时为坏条件矩阵

条件数事实上表示了矩阵计算对于误差的敏感性。对于线性方程组Ax=b,如果A的条件数大,b的微小改变就能引起解x较大的改变,数值稳定性差。如果A的条件数小,b有微小的改变,x的改变也很微小,数值稳定性好。它也可以表示b不变,而A有微小改变时,x的变化情况。

举例

比如线性方程组

〔1 2 [x = [4  3.999 1] y] 7.999]  的解是(x,y)=(2,1)

而  〔1 2 [x = [4.001  3.999 1] y] 7.998]  的解是(x,y)=(-3.999,4.000)

可见b很小的扰动就引起了x很大的变化,这就是A矩阵条件数大的表现。一个极端的例子,当A奇异时,条件数为无穷,这时即使不改变b,x也可以改变。奇异的本质原因在于矩阵有0特征值,x在对应特征向量的方向上运动不改变Ax的值。如果一个特征值比其它特征值在数量级上小很多,x在对应特征向量方向上很大的移动才能产生b微小的变化,这就解释了为什么这个矩阵为什么会有大的条件数,事实上,正规阵在二范数下的条件数就可以表示成 abs(最大特征值/最小特征值)。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}