[{"data":1,"prerenderedAt":316},["ShallowReactive",2],{"article:column:/column/math-beauty/conditioning":3},{"id":4,"title":5,"body":6,"description":12,"extension":305,"meta":306,"navigation":311,"path":312,"seo":313,"stem":314,"__hash__":315},"column/column/math-beauty/conditioning.md","一点点误差，为什么会被放大",{"type":7,"value":8,"toc":292},"minimark",[9,13,16,19,23,26,29,32,35,38,41,44,47,50,53,60,63,66,69,72,75,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,211,214,217,220,223,226,233,236,239,245,248,251,254,265,274,283,286,289],[10,11,12],"p",{},"先修：16 秩与零空间；30 导数与局部线性近似；35 有限位数与浮点表示",[10,14,15],{},"上一章解释了实数怎样落到有限的机器格点上。接下来很容易产生一个猜想：只要机器多保留一些位，答案就会可靠。可是，如果输入原本来自测量，计算机收到的数已经带着不确定性呢？即使后面每一步都按实数精确计算，答案仍可能对这点变化非常敏感。",[10,17,18],{},"本章先暂时拿走计算机，只用能手算的分数，研究“数据稍微变了，精确答案会变多少”。这叫问题的条件性。算法在有限精度中怎样完成计算，是另一层问题，第37章再展开。[1]",[20,21,22],"h2",{"id":22},"两个几乎挨在一起的读数",[10,24,25],{},"我们重新设计一组虚构教学数据，不把它当成真实实验。选定单位并把读数写成无量纲数，两个输入位置为x₁＝1、x₂＝1＋ε，其中ε＞0；对应读数为y₁＝1、y₂＝1＋ε。这里ε表示观测位置的间距，与上一章机器格式中的epsilon无关。",[10,27,28],{},"要求直线y＝ax＋b精确经过这两点，就有",[10,30,31],{},"a＋b＝1，\na(1＋ε)＋b＝1＋ε。",[10,33,34],{},"两式相减，εa＝ε，所以a＝1、b＝0。这一次拟合恰好就是y＝x。",[10,36,37],{},"现在固定两个输入位置和第一个读数，只把第二个读数增加δ。新斜率ã满足",[10,39,40],{},"ã＝[(1＋ε＋δ)−1]/ε＝1＋δ/ε。",[10,42,43],{},"因此斜率的变化精确等于δ/ε，截距变为b̃＝−δ/ε。取",[10,45,46],{},"ε＝10⁻⁶，δ＝10⁻⁸，",[10,48,49],{},"就得到ã＝1.01、b̃＝−0.01。第二个读数只从1.000001变成1.00000101，斜率却增加了1%。输入读数的相对变化约为一亿分之一，参数的相对变化达到百分之一。",[10,51,52],{},"这里所有有限小数都可以当作精确分数，等式中没有舍入。因而，“换一个不会舍入的程序”也会得到这两组不同参数。放大来自问题本身：我们试图用两个非常接近的位置，辨认直线的倾斜程度。",[10,54,55],{},[56,57],"img",{"alt":58,"src":59},"左侧放大从1到1.000001的观测窗口，两条直线十分接近；右侧放大x等于2附近的外推窗口，两条线的预测相差0.01","/collections-assets/math-beauty/ch36/01-close-points-and-extrapolation.png",[10,61,62],{},"图1：两幅图的坐标范围不同。左图横纵刻度均为(原值−1)×10⁶，并标出与原始数值的换算；右图刻度直接使用原值。左图观测间距为10⁻⁶，右图查看距离第一个观测点约1的位置；右图不是把δ直接画大，而是画出相应的两条直线。",[10,64,65],{},"同一组参数变化，对不同用途的影响也不同。把预测位置另记为t，新旧预测之差是",[10,67,68],{},"Δŷ(t)＝(δ/ε)t−δ/ε＝δ(t−1)/ε。",[10,70,71],{},"在观测区间1≤t≤1＋ε内，|Δŷ(t)|≤|δ|。虽然斜率变化了1%，这一小段内的预测最多只变10⁻⁸。到了t＝2，差值就变成0.01；在离观测更远的地方还会继续增加。",[10,73,74],{},"所以，“斜率敏感”与“这段区间内的预测敏感”不是同一个问题。更不能据此保证外推符合真实世界：本例只比较两条假定的直线，没有证据证明真实关系在远处仍是直线。",[20,76,78],{"id":77},"接近退化还没有退化","接近退化，还没有退化",[10,80,81],{},"第16章讨论过精确的秩。这里设计矩阵的两列是(1，1＋ε)和(1，1)。若它们的线性组合为零，就有",[10,83,84],{},"α＋β＝0，(1＋ε)α＋β＝0。",[10,86,87],{},"相减得到εα＝0。只要ε≠0，就必有α＝β＝0，两列仍然线性无关。对任意两个读数，公式a＝(y₂−y₁)/ε、b＝y₁−a都给出唯一的精确解。",[10,89,90],{},"当ε＝0时，两个位置才真正重合。若两个读数都是1，只剩a＋b＝1，斜率与截距无法分别识别；若读数不同，则同一位置被要求同时具有两个值，没有精确解。",[10,92,93],{},"这条边界值得记牢：唯一解可以存在，却很难从有误差的数据中可靠确定。“几乎相同”不能直接套用“完全相同”的秩结论；反过来，满秩也没有承诺参数对扰动不敏感。",[10,95,96],{},"而且，并非每个方向的变化都会放大。如果两个读数同时增加δ，差y₂−y₁不变，斜率仍是1，只是截距增加δ。前面得到的1/ε，是固定位置与y₁、只改变y₂时，斜率绝对变化相对于该读数绝对变化的放大倍数。没有指定输入、输出、扰动方式和误差标尺，不能把它笼统叫作所有拟合问题的条件数。",[20,98,99],{"id":99},"先说明误差除以谁",[10,101,102],{},"设z是参考值，z̃是近似值。绝对误差定义为|z̃−z|；当z≠0时，相对误差定义为|z̃−z|/|z|。[2] 分母采用参考值，而不是悄悄换成近似值。若参考值未知，实际工作往往只能估计误差或给出范围，不能把无法知道的精确误差伪装成测得的数据。",[10,104,105],{},"绝对误差与原量具有相同单位，相对误差没有单位。它们回答不同的尺度问题。例如把长度从米改记为厘米，绝对误差的数字乘100，相对误差不变。不过，把数值的零点换掉会改变相对尺度，因而不能只凭一个百分比判断所有任务。",[10,107,108],{},"考虑固定常数1、只改变输入x的函数f(x)＝x−1。它满足精确等式",[10,110,111],{},"f(x＋h)−f(x)＝h。",[10,113,114],{},"输出的绝对变化与输入一样大，绝对放大倍数始终为1。然而，取x＝1.000001、h＝0.00000001，原输出为0.000001，新输出为0.00000101。于是",[10,116,117],{},"输入相对变化＝10⁻⁸/1.000001，\n输出相对变化＝10⁻⁸/10⁻⁶＝0.01＝1%。",[10,119,120],{},"没有额外产生一大块绝对误差；同一个10⁻⁸，被拿去与一个小得多的输出比较，所占比例就大了。",[10,122,123],{},[56,124],{"alt":125,"src":126},"相同的绝对变化10的负8次方，除以输入参考值1.000001时约为10的负8次方，除以输出参考值10的负6次方时等于百分之一","/collections-assets/math-beauty/ch36/02-absolute-and-relative-scales.png",[10,128,129],{},"图2：两个相对变化的分子相同，分母不同。这里的1000001倍是两种相对变化之比，绝对变化的放大倍数仍然为1。",[10,131,132],{},"当x＝1时，参考输出为0，以上相对输出误差没有定义，不能继续除以0。此时可以报告绝对变化，或按任务给出的非零尺度评估是否可接受。比如目标只是判断偏差是否小于某个容差，就应直接检验那项要求，而不是硬凑一个百分比。",[20,134,135],{"id":135},"用导数刻画局部的相对放大",[10,137,138],{},"上一章的ε或u描述机器表示的精度；现在需要一个描述数学问题的量。沿用第30章，若f在x附近有定义并在x处可微，就能写成",[10,140,141],{},"f(x＋h)−f(x)＝f′(x)h＋r(h)，",[10,143,144],{},"其中|r(h)|/|h|随h趋于0而趋于0。",[10,146,147],{},"再要求x≠0、f(x)≠0。对非零的小扰动h，输出相对变化除以输入相对变化为",[10,149,150],{},"[|f(x＋h)−f(x)|/|f(x)|] ÷ [|h|/|x|]",[10,152,153],{},"＝|x/f(x)| · |[f(x＋h)−f(x)]/h|。",[10,155,156],{},"让h趋于0，差商趋于导数，于是得到本章使用的标量局部相对条件数",[10,158,159],{},"κ(x)＝|x f′(x)/f(x)|。[3]",[10,161,162],{},"κ读作“卡帕”。它把输入和输出各自的参考尺度也纳入比较，刻画足够小的扰动在一阶上的相对放大。当κ很大时，常说这个问题在该输入处相对条件差；评价好坏还要结合输入精度与输出要求。",[10,164,165],{},"对刚才的f(x)＝x−1，f′(x)＝1，因此κ(x)＝|x/(x−1)|。在x＝1.000001处，κ＝1000001。由于这个函数的余项恰为0，前面的相对变化之比精确等于这个数，不只是一阶近似。",[10,167,168],{},"一般函数却没有这个额外保证。κ是固定x、让扰动趋于0得到的局部量，不能自动当作任意大步的误差上界。如果扰动跨过了函数定义域的边界，甚至连新的函数值都未必存在。想要一整段区间的保证，需要另外控制那段范围内的变化。",[10,170,171],{},"κ也可以为0。例如g(x)＝1＋(x−1)²，在x＝1处有g′(1)＝0，且输入、输出都非零，所以κ(1)＝0。但g(1＋h)−g(1)＝h²，只要h≠0，输出仍然变化。一阶项消失，只说明变化比|h|更快地缩小，并没有宣布对任何扰动都完全免疫。",[20,173,174],{"id":174},"把敏感性换成一个可用范围",[10,176,177],{},"前面比较两份数据时，“扰动”只是输入的改动，并不自动说明哪份是真值。只有指定可信的参考，才能把相应差异解释为误差。这在测量任务中尤其重要：屏幕多显示几个小数位，并不会替我们选出参考真值。",[10,179,180],{},"继续用ε＝10⁻⁶。假设报告的读数为y₂＝1.000001，且额外知道它与真实读数的绝对差不超过10⁻⁸；仍假定位置和第一个读数完全准确，直线模型完全成立。真实的第二个读数就可能落在",[10,182,183],{},"[1.00000099，1.00000101]。",[10,185,186],{},"把区间两端分别代入精确斜率公式，会得到0.99与1.01。因此所有与这份信息相容的斜率形成[0.99，1.01]。再准确的除法，也无法只凭现有信息排除其中任意一个值。报告中心值1并附上这段范围，比把1后面继续写零更符合已知证据。",[10,188,189],{},"这是一种信息限制：若两种真实情形都能产生同一份带有容差的记录，程序收到的输入相同，就无从凭计算判断真实世界采用了哪一种。增加有效位数可以更准确地处理这份记录，却不能区分记录没有区分的情形。",[10,191,192],{},"不过，上述区间依赖全部假设。如果位置也不确定，分母会跟着改变；如果两个读数都有误差，分子会包含两项变化；如果模型不再是直线，单靠两点公式就无法代表目标关系。条件分析的第一步，应当说明哪些量允许变化、它们能变多少，而不是先找一个很大的数来吓自己。",[20,194,195],{"id":195},"精确问题与数值求解要分两层检查",[10,197,198],{},"现在把计算机放回来。设理想输入为x，实际拿到的是x＋h；对这份实际输入，精确答案是f(x＋h)，程序给出的结果记作q。便有精确拆分",[10,200,201],{},"q−f(x)＝[f(x＋h)−f(x)]＋[q−f(x＋h)]。",[10,203,204],{},"第一项比较两份不同数据的精确答案，属于问题的敏感性。第二项固定实际输入，比较计算结果与它应有的精确答案，需要检查算法及其实现。两项可能同号，也可能抵消，不能把绝对值直接写成两项绝对值之和。",[10,206,207],{},[56,208],{"alt":209,"src":210},"理想输入与实际输入各自对应精确答案，问题层比较这两个精确答案；算法层固定实际输入，比较数值结果与该输入的精确答案","/collections-assets/math-beauty/ch36/03-problem-and-algorithm.png",[10,212,213],{},"图3：先说清楚基准是谁，才能判断差异来自哪里。条件性与算法稳定性分别检查不同的关系；本章没有据此判定某个具体算法稳定。",[10,215,216],{},"真实输入可能包含仪器测量、采样以及上游估计带来的不确定性。提高计算精度，能够减少某些表示和运算误差，却无法凭空找回没有记录下来的真实读数。把1.00000101打印成更多位，不能告诉我们第二个观测原来究竟偏了多少。",[10,218,219],{},"在两读数模型中，如果已知只有y₂存在不超过η的误差，就可以直接报告斜率误差不超过η/ε。若模型在更宽范围仍然适用，拉开观测位置会减小这个特定放大倍数；若只能使用原位置，就应诚实保留参数的不确定范围。改写参数单位也许使数字更顺眼，但不会自动补回缺失的信息。",[10,221,222],{},"条件差本身不能证明程序有缺陷，条件好也不能保证随便写一种算法都算得可靠。下一章会用一个对输入相当温和的函数说明：即使数学问题本身不敏感，计算路径仍可能把答案弄坏。",[20,224,225],{"id":225},"顺手试一下",[10,227,228,232],{},[229,230,231],"strong",{},"题目1："," 两个位置为1和1.0001，原读数也分别为1和1.0001。仅给第二个读数增加2×10⁻⁸。求新斜率、截距，以及在t＝1.00005和t＝2处的预测变化。若两个读数都增加同样的量呢？",[10,234,235],{},"**提示：**ε＝10⁻⁴；先求δ/ε，再用Δŷ(t)＝δ(t−1)/ε。",[10,237,238],{},"**参考答案：**δ/ε＝0.0002，所以新斜率为1.0002，截距为−0.0002。两个位置的预测变化分别为0.0002×0.00005＝10⁻⁸和0.0002。如果两个读数同时增加2×10⁻⁸，斜率仍为1，截距变为2×10⁻⁸，任意t处预测都增加2×10⁻⁸。",[10,240,241,244],{},[229,242,243],{},"题目2："," 对f(x)＝x−1，在x＝1.01处施加h＝0.0001。求输入、输出的绝对与相对变化，及κ(x)。为什么不能将相同的相对误差定义直接用于x＝1？",[10,246,247],{},"**提示：**原输出为0.01；两个相对变化各用自己的原参考值作分母。",[10,249,250],{},"**参考答案：**输入、输出绝对变化均为0.0001。输入相对变化为0.0001/1.01＝1/10100，输出相对变化为0.0001/0.01＝1/100。二者之比为101，也等于κ(1.01)＝1.01/0.01。x＝1时输出为0，相对输出变化的分母为0，没有定义；绝对变化仍可直接计算为|h|。",[20,252,253],{"id":253},"参考与延伸",[10,255,256,257,264],{},"[1] Lloyd N. Trefethen、David Bau，《Numerical Linear Algebra》，",[258,259,263],"a",{"href":260,"rel":261},"https://epubs.siam.org/doi/abs/10.1137/1.9781611977165.ch3",[262],"nofollow","Part III: Conditioning and Stability","。SIAM公开摘要明确区分数学问题的条件性与算法的稳定性；本文只引用该公开定义，不声称读取付费正文。",[10,266,267,268,273],{},"[2] 康奈尔大学，David Bindel，CS 6210讲义，",[258,269,272],{"href":270,"rel":271},"https://www.cs.cornell.edu/courses/cs6210/2025fa/lec/2025-08-27.html",[262],"Matrix calculus, sensitivity, conditioning","，2025年8月27日，“Absolute and relative error”与“Dimensions and scaling”节。核对误差的参考分母、零值边界和量纲要求。",[10,275,276,277,282],{},"[3] Tobin A. Driscoll、Richard J. Braun，《Fundamentals of Numerical Computation》，",[258,278,281],{"href":279,"rel":280},"https://fncbook.com/conditioning/",[262],"Problems and conditioning","，1.2.1节。核对标量相对条件数的极限定义；本文用第30章的可微条件独立推导公式，并明确局部适用范围。",[10,284,285],{},"本文数据与三幅图均为原创教学构造，有限小数按精确有理数复算；未进行真实测量，也未把这些算例当成具体软件的误差测试。",[287,288],"hr",{},[10,290,291],{},"作者：Jiancheng Wang · 数学之美（独立原创）",{"title":293,"searchDepth":294,"depth":294,"links":295},"",3,[296,298,299,300,301,302,303,304],{"id":22,"depth":297,"text":22},2,{"id":77,"depth":297,"text":78},{"id":99,"depth":297,"text":99},{"id":135,"depth":297,"text":135},{"id":174,"depth":297,"text":174},{"id":195,"depth":297,"text":195},{"id":225,"depth":297,"text":225},{"id":253,"depth":297,"text":253},"md",{"collection":307,"order":308,"slug":309,"author":310},"数学之美",36,"conditioning","Jiancheng Wang",true,"/column/math-beauty/conditioning",{"title":5,"description":12},"column/math-beauty/conditioning","Pes0RuaVULCR3SqDdXmcWNllh4r9jr_qSpTMu6_ZUPM",1791935829231]