数值分析中,一个数值问题的条件数是该问题在数值计算中的容易程度的衡量,也就是该问题的适定性。一个低条件数的问题称为良置的,而高条件数的问题称为病态(或者说非良置)的。
矩阵A的条件数等于A的
范数与A的逆的范数的乘积,即cond(A)=‖A‖·‖A-1‖。这个定义依赖于范数的选取,对应矩阵的不同范数,相应地可以定义不同的条件数。
一次方程Ax=b的条件数反映了数值求解得到的解x的精确度的一个上限。条件数还会放大b中存在的误差,这个放大的程度取决于b的数据的准确性。矩阵条件数通常在数值线性代数中出现,定义为κ(A)=‖A-1‖·‖A‖。若‖·‖是l2
矩阵范数,则κ(A)=σ_max(A)/σ_min(A),其中σ_max(A)和σ_min(A)分别是A的最大和最小奇异值。如果A是
正规矩阵,则κ(A)=|λ_max(A)/λ_min(A)|,其中λ_max(A)和λ_min(A)分别是A的最大和最小(根据模数)特征值。对于酉矩阵,κ(A)=1。若‖·‖是l∞矩阵范数且A是下
三角矩阵,非奇异(即a_ii≠0 ∀i),则κ(A)≥(max_i(|a_ii|)/min_i(|a_ii|))。
条件数的概念不仅限于矩阵问题,它也适用于
奇异值分解、
多项式求根、特征值计算等多种数值问题。通常,如果一个数值问题是适定的,它可以表达为一个函数f,将数据(一个
实数的m元组x)
映射到解(一个实数的
多元组y)。条件数定义为解中的相对误差的半径与数据中的相对误差的比的最大值,取遍整个问题的定义域。如果f是可微的,条件数可以近似表示为|f'(x)/f(x)|·|x|,其中ε是问题中数据的偏差的某个合理的小数值。
cond(A,1)、cond(A)或cond(A)表示矩阵A的条件数,具体取决于所使用的
范数。
可见b很小的扰动就引起了x很大的变化,这就是A矩阵条件数大的表现。一个极端的例子,当A奇异时,条件数为无穷,这时即使不改变b,x也可以改变。奇异的本质原因在于矩阵有0特征值,x在对应特征向量的方向上运动不改变Ax的值。如果一个特征值比其它特征值在数量级上小很多,x在对应特征向量方向上很大的移动才能产生b微小的变化,这就解释了为什么这个矩阵为什么会有大的条件数,事实上,正规阵在二
范数下的条件数就可以表示成 abs(最大特征值/最小特征值)。