问题条件数(Conditioning of a problem)

文章讨论了在数值计算中,即使是使用稳定的算法,数据的微小变化可能导致大误差的问题,这类问题被称为病态问题。条件数是衡量问题对数据敏感性的指标,高条件数意味着问题对数据扰动更敏感。文章举例说明不同函数的条件数,指出矩阵条件数在判断矩阵是否病态中的作用,并提到了在MATLAB中计算条件数的不同方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Conditioning of a problem

该博客是学习《Numerical Linear Algebra with Applications Using MATLAB》的一些总结,仅供学习使用。

通常即使使用一个稳定的算法来解决一个问题,该问题对数据中小的改变或扰动仍然是敏感的。这些扰动可能来自舍入误差(roundoff error),收集实验数据时的小的测量误差,没有被信号过滤的噪音,近似无穷级数时的截断误差等。如果该问题落入此类,则称该问题为ill-conditioned(病态的)。

Def 1: 不管用什么算法来解决一个问题,如果它的数据中的一个小的相对变化会导致它的计算解的一个大的相对误差, 则称这个问题是病态的(ill-conditioned),如果问题数据中的小扰动导致计算解的小相对误差,则称问题是良态的(well-conditioned)。

需要搞清楚两个概念:stability 和 conditioning。

  1. Stable or unstable 是对于算法而言的;
  2. Well or ill-conditioned 是指特定的问题而非使用的算法。

显然,将不稳定的算法应用于病态的问题是在自找麻烦。(asking for disaster).

但是,对于求解某个问题而言,一个稳定的算法也会产生差的结果,如果输入数据时病态的。 我们假定f(x)f(x)f(x)表示一个算法,xxx表示数据。 我们可以利用f(x)f(x)f(x)来定义well 和ill-conditioning.

Def 2. 定义xxxxˉ\bar{x}xˉ分别是初始数据和扰动数据, f(x)f(x)f(x)f(xˉ)f(\bar{x})f(xˉ)是对应的解,则有
如果∣x−xˉ∣|x-\bar{x}|xxˉ很小,∣f(x)−f(xˉ)∣|f(x)-f(\bar{x})|f(x)f(xˉ)也很小,则该问题关于数据xxx是well-conditioned.
如果∣x−xˉ∣|x-\bar{x}|xxˉ很小,∣f(x)−f(xˉ)∣|f(x)-f(\bar{x})|f(x)f(xˉ)很大,则该问题关于数据xxx是ill-conditioned. 如下图*

该图片来自Numerical Linear Algebra with Applications Using MATLAB一书

问题对数据的敏感性可以通过定义条件数(condition number)来测量。 条件数越大,则该问题对数据的改变的敏感性越高。

对于一个特定的数据xxx,假定数据中有很小的误差,问题的输入为xˉ=x+Δx\bar{x}= x +\Delta xxˉ=x+Δx,则计算的值为f(xˉ)f(\bar{x})f(xˉ)而非f(x)f(x)f(x), 结果的相对误差除以输入数据的相对误差为:
∣f(x)−f(xˉ)∣∣f(x)∣∣x−xˉ∣∣x∣ \frac{\frac{|f(x)-f(\bar{x})|}{|f(x)|}}{\frac{|x-\bar{x}|}{|x|}} xxxˉf(x)f(x)f(xˉ)

这个比例测量了一个函数对于输入数据的误差或者改变的敏感性程度。 这导致一个特定问题fff的条件数的数学定义。

Def 3. 一个问题fff关于输入数据xxx的条件数定义为
Cf(x)=lim⁡ϵ→0+sup⁡∥δx∥≤ϵ∥f(x+δx)−f(x)∥∥f(x)∥∥δx∥∥x∥. C_f(x)=\lim _{\epsilon \rightarrow 0^{+}} \sup _{\|\delta x\| \leq \epsilon} \frac{\frac{\|f(x+\delta x)-f(x)\|}{\|f(x)\|}}{\frac{\|\delta x\|}{\|x\|}} . Cf(x)=ϵ0+limδxϵsupxδxf(x)f(x+δx)f(x).

例1. 寻求下面三个函数的条件数
a. f(x)=x2,Cf(x)=∣x∣∣2x∣/∣x2∣=2f(x)=x^2, C_f(x)=|x||2 x| /\left|x^2\right|=2f(x)=x2,Cf(x)=x∣∣2x∣/x2=2, 因此fff 是 well-conditioned.
b. f(x)=1/(1−x),Cf(x)=∣x∣∣1/(1−x)2∣/∣1/(1−x)∣=∣x/(1−x)∣.f(x)f(x)=1 /(1-x), C_f(x)=|x|\left|1 /(1-x)^2\right| /|1 /(1-x)|=|x /(1-x)| . f(x)f(x)=1/(1x),Cf(x)=x1/(1x)2/∣1/(1x)=x/(1x)∣.f(x) 是ill-conditioned 在 x=1x=1x=1 附近,并且是 well-conditioned在其他任何地方.
c. f(x)=ex,Cf(x)=∣x∣∣ex/ex∣=∣x∣.f(x)f(x)=e^x, C_f(x)=|x|\left|e^x / e^x\right|=|x| . f(x)f(x)=ex,Cf(x)=xex/ex=x∣.f(x)对于大的xxx是 ill-conditioned.
(b) 和 (c) 表明在xxx的特定范围内,xxx 相对小的改变将引起f(x)f(x)f(x)的计算的巨大误差.

定义4. 矩阵AAA的条件数定义为∥A∥∥A−1∥\|A\|\left\|A^{-1}\right\|AA1,表示为κ(A)\kappa(A)κ(A). ∥⋅∥\|\cdot\|表示任意的矩阵范数.

定义5. 矩阵AAA是ill-conditioned如果AAA的条件数很大(large);否则AAA是well-conditioned.
当然,这里的large是模糊的,条件数如果是在10^4或者更大的范围内则肯定是ill-conditioned,但对于一些矩阵而言,一个较小的条件数也可能表示ill-conditioned,决定矩阵是否是ill-conditioned并不是一门准确的科学。

cond(A); % 2-norm
cond(A,1); % 1-norm
cond(A,'inf'); % infty-norm
cond(A,'fro'); % Frobenius-norm
### 有限元方法求解偏微分方程的计算时间及性能分析 对于有限元方法(FEM)求解偏微分方程(PDE),其计算时间和性能取决于多个因素,包括但不限于网格细化程度、所选基函数阶次以及线性系统的求解算法。 #### 网格尺寸的影响 随着网格单元数量增加,即更精细的离散化,虽然可以提高数值解精度,但也显著增加了矩阵规模和条件数。这不仅使得组装刚度矩阵所需时间增长,在后续迭代过程中也会消耗更多资源来处理大型稀疏矩阵[^1]。 #### 基础函数的选择 采用更高阶的基础试函数能够减少所需的节点数目从而降低整体运算量;然而高阶多项式可能导致严重的病态现象(ill-conditioning),进而影响收敛速度甚至稳定性。 #### 线性系统求解器效率 直接法如LU分解适合小型稠密问题但面对大规模FEM模型时往往力不从心,因为它们的时间复杂度通常是O(n^3)(n代表未知变量个数).相比之下预条件共轭梯度(PCG)等迭代技术则表现出更好的可扩展性和更低渐近界——理论上接近于O(n). 针对上述提到的情况,L∞范数稍高于预期可能是由于边界效应或是局部区域内的剧烈变化造成的较大残差所致;而利用`fminbnd`定位最大绝对误差位置的做法本身并无不当之处. ```matlab % MATLAB伪代码展示如何评估不同参数设置下的运行效能 function analyze_performance() % 定义测试范围和其他必要配置... for h = coarse_to_fine_meshes() % 循环遍历不同的空间步长h setup_problem(h); % 构建对应尺度的问题 tic(); % 开始计时 solve_with_direct_solver(); % 使用直接法解决问题 elapsed_time_direct = toc(); % 记录耗费秒数 tic(); solve_with_iterative_solver();% 应用迭代方案代替之 elapsed_time_iterative = toc(); log_results(elapsed_time_direct,elapsed_time_iterative); end end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大浪淘沙_scc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值