文章目录
在数值分析领域,灵敏度分析是一种用来评估数值模型对输入参数变化的敏感程度的技术。它在许多科学和工程领域中都有广泛的应用,包括金融、工程设计、自然资源管理等。
一、条件数
一个实际问题化为数学问题,初始数据往往会有误差,即有扰动,从而使计算结果产生误差,因此需要研究扰动对解的影响。为了简单起见,假设我们考虑的计算问题是:给定 x x x,计算 f ( x ) f(x) f(x)的值。
- 对于这个问题,灵敏度分析就是探究究 x x x 有微小的变化 δ x \delta x δx 之后函数值将会发生多大变化;
- 当然,最理想的做法应该是首先找到自变量的改变量与函数值的改变量之间的依赖关系;
- 但这是相当困难的,有时即使碰巧找到了这种依赖关系,常常由于其太复杂而变得无实用价值.
因此,通常的做法是在 |
δ
x
∣
/
∣
x
∣
\delta x|/|x|
δx∣/∣x∣ 很小的前提下,设法寻找一个尽可能小的正数
c
(
x
)
c(x)
c(x) 使得
∣
f
(
x
+
δ
x
)
−
f
(
x
)
∣
∣
f
(
x
)
∣
≤
c
(
x
)
∣
δ
x
∣
∣
x
∣
\frac{|f(x+\delta x)-f(x)|}{|f(x)|}\leq c(x)\frac{|\delta x|}{|x|}
∣f(x)∣∣f(x+δx)−f(x)∣≤c(x)∣x∣∣δx∣
这样,
c
(
x
)
c(x)
c(x) 的大小就在一定程度上反映了自变量的微小变化对函数值的影响程度。因此,我们称数
c
(
x
)
c(x)
c(x)为
f
f
f在
x
x
x点的条件数。
Note:
- 当 c ( x ) c(x) c(x) 很大时,自变量的微小变化就有可能引起函数值的巨大变化,因而称此种情况为 f f f在 x x x 点是病态的;
- 反之,当 c ( x ) c(x) c(x) 较小时,我们就说 f f f 在 x x x 点是良态的.
对于这个计算问题,容易推出,当 f f f 在 x x x点可微时,条件数有如下近似形式:
c
(
x
)
≈
∣
f
′
(
x
)
∣
∣
x
∣
∣
f
(
x
)
∣
.
c(x)\approx\frac{|f^{\prime}(x)||x|}{|f(x)|}.
c(x)≈∣f(x)∣∣f′(x)∣∣x∣.
但是对于一般的计算问题要给出一个合适的条件数估计是不容易的。
二、解线性方程组问题的条件数
现在我们来考虑解线性方程组 A x = b Ax=b Ax=b的问题,先从一个例子来看系数矩阵或者右端项扰动对解的影响。
例 容易看出,方程组
{ x 1 + x 2 = 2 x 1 + 1.00001 x 2 = 2 \left\{\begin{array}{l} x_1+x_2=2 \\ x_1+1.00001 x_2=2 \end{array}\right. {x1+x2=2x1+1.00001x2=2
的解为 x 1 = 2 , x 2 = 0 。 x_1=2, x_2=0_{\text {。 }} x1=2,x2=0。 而方程组
{ x 1 + x 2 = 2 x 1 + 1.00001 x 2 = 2.00001 \left\{\begin{array}{l} x_1+x_2=2 \\ x_1+1.00001 x_2=2.00001 \end{array}\right. {x1+x2=2x1+1.00001x2=2.00001
的解为 x 1 = 1 , x 2 = 1 x_1=1, x_2=1 x1=1,x2=1 。
比较这两个方程组可以看出:
- 它们只是右端项有微小的差别, 最大相对误差为 1 2 × 1 0 − 5 \frac{1}{2} \times 10^{-5} 21×10−5;
- 但它们的解却大不相同, 解分量的相对误差至少为 1 2 \frac{1}{2} 21 ;
- 当一个方程组, 由于系数矩阵或右端项的微小扰动, 而引起解发生巨大变化时,称该方程组是“病态”的。
定义
若 n × n n\times n n×n矩阵 A A A非奇异,则称 ∥ A ∥ A − 1 ∥ \|A\|A^{-1}\| ∥A∥A−1∥为矩阵 A A A的条件数 ( C o n d i t i o n (Condition (Condition Number), 记作
Cond ( A ) = ∥ A ∥ ∥ A − 1 ∥ . \text{ Cond}(A)=\|A\|\|A^{-1}\|. Cond(A)=∥A∥∥A−1∥.其中 ∥ A ∥ \|A\| ∥A∥为矩阵 A A A的某一范数,不同的范数导出不同的条件数.
条件数的性质
- Cond ( A ) = ∥ A ∥ ∥ A − 1 ∥ ≥ ∥ A A − 1 ∥ = ∥ I ∥ ≥ 1 \text{ Cond}(A)=\|A\|\|A^{-1}\|\geq\left\|AA^{-1}\right\|=\|I\|\geq1 Cond(A)=∥A∥∥A−1∥≥ AA−1 =∥I∥≥1.
- 置换矩阵、正交矩阵、单位矩阵的谱条件数为1.
- 对任意非零实数 α \alpha α有 Cond ( α A ) = Cond ( A ) \text{Cond}(\alpha A)=\text{Cond}(A) Cond(αA)=Cond(A) .
对于特定的范数,
Cond ( A ) ∞ = ∥ A ∥ ∞ ∥ A − 1 ∥ ∞ Cond ( A ) 2 = ∥ A ∥ 2 ∥ A − 1 ∥ 2 = λ 1 λ n \begin{aligned} \operatorname{Cond}(A)_\infty&=\left\|A\right\|_\infty\left\|A^{-1}\right\|_\infty\\ \text{Cond}(A)_2&=\left\|A\right\|_2\left\|A^{-1}\right\|_2=\sqrt{\frac{\lambda_1}{\lambda_n}} \end{aligned} Cond(A)∞Cond(A)2=∥A∥∞ A−1 ∞=∥A∥2 A−1 2=λnλ1 Note:
- λ 1 , λ n \lambda_1,\lambda_n λ1,λn分别为 A T A A^TA ATA的最大和最小特征值.
- Cond ( A ) 2 \text{Cond}(A)_2 Cond(A)2又称为为谱条件数.
- “病态”方程组的系数矩阵 A A A的条件数 Cond ( A ) \text{Cond}(A) Cond(A) 很大,反之为“良态”方程组.
- 条件数很大的病态方程组,求解过程会遇到数值不稳定的问题.
定理
设 x ⃗ \vec{x} x和 x ⃗ ∗ \vec{x}^* x∗分别为非奇异方程组 A x ⃗ = b ⃗ A\vec{x}=\vec{b} Ax=b的精确解和近似解, r ⃗ \vec{r} r为 x ⃗ ∗ \vec{x}^* x∗的剩余向量, r ⃗ = b ⃗ − A x ⃗ ∗ \vec{r}=\vec{b}-A\vec{x}^* r=b−Ax∗, 则
∥ x ⃗ ∗ − x ⃗ ∥ ∥ x ⃗ ∥ ≤ Cond ( A ) ∥ r ⃗ ∥ ∥ b ⃗ ∥ \frac{\|\vec{x}^*-\vec{x}\|}{\|\vec{x}\|}\leq\text{Cond}(A)\frac{\|\vec{r}\|}{\|\vec{b}\|} ∥x∥∥x∗−x∥≤Cond(A)∥b∥∥r∥
由这个定理我们知道,如果方程组“病态”很严重,条件数很大,即使 r ⃗ \vec{r} r很小,解的相对误差也可能会很大(相对误差上界很大).
在求得方程组
A
x
=
b
\boldsymbol{A x}=\boldsymbol{b}
Ax=b 的一个近似解
x
∗
\boldsymbol{x}^*
x∗ 后, 检验精度的一个简单方法是残量 (余量)
r
=
b
−
A
x
∗
r=b-A x^*
r=b−Ax∗ 的大小来衡量近似解
x
∗
x^*
x∗ 的精确程度。但对“病态” 严重的方程组, 也有即使残量
∥
r
∥
\|\boldsymbol{r}\|
∥r∥ 很小, 近似解与准确解的差仍很大的情形。比如我们来看下面这样一个例子,方程组:
{
x
1
+
x
2
=
2
x
1
+
1.00001
x
2
=
2
\left\{\begin{array}{l} x_1+x_2=2 \\ x_1+1.00001 x_2=2 \end{array}\right.
{x1+x2=2x1+1.00001x2=2的准确解为
x
1
=
2
,
x
2
=
0
x_1=2, x_2=0
x1=2,x2=0, 若以
x
1
=
1
,
x
2
=
1
x_1=1, x_2=1
x1=1,x2=1 作为它的近似解, 其残量:
r
=
(
2
,
2
)
T
−
(
2
,
2.00001
)
T
=
(
0
,
−
1
0
−
5
)
T
\boldsymbol{r}=(2,2)^{\mathrm{T}}-(2,2.00001)^{\mathrm{T}}=\left(0,-10^{-5}\right)^{\mathrm{T}}
r=(2,2)T−(2,2.00001)T=(0,−10−5)T
很小,但解的误差:
x
−
x
∗
=
(
2
,
0
)
T
−
(
1
,
1
)
T
=
(
1
,
−
1
)
T
x-x^*=(2,0)^{\mathrm{T}}-(1,1)^{\mathrm{T}}=(1,-1)^{\mathrm{T}}
x−x∗=(2,0)T−(1,1)T=(1,−1)T
所以对于条件数很大的方程组,余量 r r r不是一个很好的指标。也就是说对于病态的问题,通过迭代法得到的解,和精确解误差可能很大。