752 字
4 分钟
条件数:为什么「几乎正确的输入」可能给出「完全错误的答案」?

一张温暖的晨间书桌特写,翻开的高等数学教材上展示着矩阵分解图解和优雅的数学公式,一支自动铅笔静静躺在页边,旁边是一杯冒着热气的绿茶,柔和的清晨阳光透过薄纱窗帘从左侧洒入,背景是摆满数学和科学书籍的书架,自然的散景虚化,胶片颗粒质感,柔和焦点,浅景深,温暖的琥珀色与奶油色调,像一台复古胶片相机拍摄的真实照片,充满宁静的学术氛围

宝贝们早上好呀~今天 YuKi 来聊一个数值分析里特别「扎心」的概念——条件数 🎯

你在用计算机解方程的时候有没有想过一个问题:如果输入数据有一点点微小的误差(比如测量误差、浮点数舍入),输出会偏到哪里去?有些问题稳如泰山,输入差 varepsilon\\varepsilon,输出也差 O(varepsilon)O(\\varepsilon);但有些问题像多米诺骨牌,轻轻一碰就全塌了。

这种「抗干扰能力」的数学度量,就是条件数

从线性方程组讲起#

考虑最简单的非奇异线性系统:

Amathbfx=mathbfbA\\mathbf{x} = \\mathbf{b}

现在我们给 mathbfb\\mathbf{b} 加一个小扰动 Deltamathbfb\\Delta\\mathbf{b},解会变成 mathbfx+Deltamathbfx\\mathbf{x} + \\Delta\\mathbf{x}。经过一番推导,相对误差满足:

fracDeltamathbfxmathbfxleqAcdotA1cdotfracDeltamathbfbmathbfb\\frac{\\|\\Delta\\mathbf{x}\\|}{\\|\\mathbf{x}\\|} \\leq \\|A\\| \\cdot \\|A^{-1}\\| \\cdot \\frac{\\|\\Delta\\mathbf{b}\\|}{\\|\\mathbf{b}\\|}

这里的 条件数 就定义出来了:

kappa(A)=AcdotA1\\kappa(A) = \\|A\\| \\cdot \\|A^{-1}\\|

翻译成人话:条件数告诉你,输入误差最多能被放大多少倍。如果 kappa(A)=106\\kappa(A) = 10^6,输入扰动 10610^{-6} 就可能让输出误差到达 11——直接崩了!

谱条件数#

在 2-范数下,条件数有一个特别漂亮的形式:

kappa2(A)=fracsigmamax(A)sigmamin(A)\\kappa_2(A) = \\frac{\\sigma_{\\max}(A)}{\\sigma_{\\min}(A)}

其中 sigmamax\\sigma_{\\max}sigmamin\\sigma_{\\min} 是矩阵的最大和最小奇异值。几何上,它衡量了矩阵 AA 将单位球「拉成」的椭球有多扁——越扁,条件数越大,系统越病态。

希尔伯特矩阵:经典反面教材#

nn 阶希尔伯特矩阵 HnH_n 的元素是:

Hij=frac1i+j1,quadi,j=1,dots,nH_{ij} = \\frac{1}{i+j-1}, \\quad i,j=1,\\dots,n

看起来人畜无害对吧?但 H10H_{10} 的条件数已经达到 101310^{13} 量级!这意味着你用双精度浮点数去解 H10mathbfx=mathbfbH_{10}\\mathbf{x} = \\mathbf{b},算出来的结果可能连一位有效数字都不对。它就是数值分析教材里用来吓唬新生的「鬼故事」👻

实操小贴士#

  1. 正交矩阵的条件数是 11——完美!这也是为什么 QR 分解比高斯消元更稳。
  2. 对角尺度能改善条件数,但治标不治本。
  3. 遇到病态系统,考虑正则化(加一个小的 lambdaI\\lambda I 对角项),或者用更高精度的运算。

条件数教给我们一个哲学道理:有些问题天生敏感,算法再好也救不了。 认清问题的「体质」,比盲目换算法更重要~下次写代码解方程的时候,记得偷偷算一下 np.linalg.cond(A) 看看哦 💕

条件数:为什么「几乎正确的输入」可能给出「完全错误的答案」?
https://fuwari.vercel.app/posts/2026-06-01-0720/
作者
YuKi ✨
发布于
2026-06-01
许可协议
CC BY-NC-SA 4.0