卷 III · 迟到CH 11深度 11/24

延迟翻倍,你的力气减半

第 1 章那个洗澡的人有一条经验:水管长一倍,手就得慢一半。第 9 章那张表里也反复出现同一个规律。这一章把它变成一条能验算的等式,并且用四条互相独立、共享零行代码的方法各算一遍——看它们会不会给出同一个数。

★★ 招牌之一四条路Ku × L ≈ 常数

▷ 先拧一下

那台设备(K = 1,τ = 10 秒)。延迟 L = 2 秒时,临界增益 Ku = 8.5024。

现在把延迟改成 4 秒。新的 Ku 大约是多少?

A 还是 8.5 左右——延迟不影响「能用多大力气」,只影响多久看到 B 大约 6.0——下降一点,但没那么夸张 C 大约 4.6——差不多减半 D 大约 2.1——按平方掉,减到四分之一

顺带一个更有意思的问题:Ku 和 L 相乘,会得到什么?

四条路

先把那个数算出来。这本书的做法是:用四种互不相干的数学,写四段没有共享代码的程序,看它们会不会撞到同一个数字上。

◆ 这一章的主线

路 A · 解析。解第 10 章那个相位方程 ωL + arctan(ωτ) = π,得到 ω,再代进幅值条件。用到的是三角函数和二分法。

路 B · 频域数值。完全不使用上面那个相位公式。直接在复数频率响应上扫描,找出「幅角等于 −π」的那个点,然后取该点幅值的倒数。用到的是复数运算。

路 D · 特征根。既不看相位也不看幅值。直接在复平面上对特征方程 (τs+1) + Kp·K·e^−Ls = 0 用牛顿法找最靠右的那个根,然后二分 Kp 使这个根的实部恰好为零。用到的是复变函数的迭代求根。

路 C · 时域仿真。不用任何理论。真的解一遍微分方程,踢它一脚,看振幅是涨是消,然后对 Kp 做二分。用到的是四阶龙格–库塔。

A、B、D 是三种不同的数学;C 是「不管理论,真跑一遍」。

拖动滑杆,四条路的结果会当场重算:

L = 2 秒时,三条解析/数值路径给出的结果:

# 对象:K·e^−Ls/(τs+1)   K=1  τ=10s  L=2s

  路 A  解析     解 ωL + arctan(ωτ) = π          Ku = 8.502424988
  路 B  频域数值 在复频响上找相位穿越 −180°       Ku = 8.502424988
  路 D  特征根   对 (τs+1)+KpK·e^−Ls 用牛顿法     Ku = 8.502424988
                                                       └─────┬─────┘
                                                    小数点后九位全同

  路 C  时域仿真 真解微分方程,二分找临界          Ku = 8.473119
                                                  与解析差 0.345%

★ 振荡频率 ω = 0.844341345 rad/s  →  周期 Tu = 7.4415 秒
★ 临界时最右的那个特征根,实部 = 2.81e−17
  —— 不多不少,正好压在虚轴上(那正是「临界」的定义)

关于路 C 那 0.345% 的偏差,值得说一句:那不是误差,那是诚实。时域仿真用的是有限步长,判据是「后半段的振幅比前半段大还是小」,本身就有分辨率。如果它给出的也是 8.502424988,那反倒说明我在某处偷偷共享了代码。三条精确路径完全一致、一条近似路径差千分之三——这是一个健康的结果。

那个 2.81e−17 也值得多看一眼。它是双精度浮点在这个量级上的噪声水平。换句话说:在计算机能表示的精度内,那个根确实精确地落在虚轴上。

那张表,和藏在里面的守恒律

现在把延迟扫一遍:

延迟 L临界增益 Ku临界周期 TuKu × Lπτ / 2K超出
0.25 s63.47000.99 s15.867515.70801.0%
0.50 s32.05551.96 s16.027815.70802.0%
1.00 s16.35063.85 s16.350615.70804.1%
2.00 s8.50247.44 s17.004815.70808.3%
4.00 s4.586814.04 s18.347115.708016.8%
8.00 s2.644625.66 s21.156615.708034.7%

盯住第四列。Ku 和 L 的乘积,在延迟小的时候几乎是个常数:15.87、16.03、16.35、17.00……而它趋近的那个值,就是第五列的 πτ/2K = 15.7080

∑ 算一遍

这条守恒律可以推出来,而且推法只有三行。

当延迟远小于惯性(L ≪ τ)时,临界频率会比较高,于是 arctan(ωτ) 已经很接近它的上限 π/2。相位方程就简化成:

   ω L + π/2 ≈ π      →      ω ≈ π / (2L)

# 再代进幅值条件。同样因为 ωτ ≫ 1:
   Ku = √(1 + (ωτ)²) / K ≈ ω τ / K = π τ / (2 L K)

★ 于是:   Ku × L ≈ π τ / (2 K)      —— 右边完全不含 L

# 读法:
#   这个乘积只由**对象自己**(惯性 τ、增益 K)决定,
#   和你的延迟多长**无关**。
#   所以延迟翻倍,Ku 必须减半,才能维持这个乘积不变。

它为什么只是近似?因为 arctan(ωτ) 并不真的等于 π/2,它总是差一点点。而那「一点点」正是惯性在帮你的忙——延迟越大,临界频率越低,惯性帮的忙越多,所以乘积会往上偏。表里那一列「超出」量化的就是这份帮助:L = 0.25 秒时只帮了 1.0%,L = 8 秒时帮了 34.7%。

但请注意帮助的方向:即使在 L = 8 秒(延迟接近惯性)时,乘积也只涨了三分之一,而 Ku 本身已经掉了 24 倍。惯性的帮助是杯水车薪,那条「减半」的规律基本上就是全部真相。

把它写成一句可以带走的话:

一个反馈环能用的力气,和它的延迟成反比。这个反比关系里的比例常数,由对象自己决定,你改不了。

验算一下「减半」到底有多准:

  L 从 …… 翻倍到 ……     Ku 从 …… 掉到 ……      还剩
─────────────────────────────────────────────────
   0.25 s  →  0.5 s      63.470  →  32.056      50.5%
   0.5 s   →  1 s        32.056  →  16.351      51.0%
   1 s     →  2 s        16.351  →   8.502      52.0%
   2 s     →  4 s         8.502  →   4.587      53.9%
   4 s     →  8 s         4.587  →   2.645      57.7%

# 延迟小的时候,「减半」这条经验准到小数点后两位。
# 延迟大到和惯性一个量级时,稍微好一点(剩 57.7% 而不是 50%),
# 但那点好处完全不值得指望。

这条律的三个推论

推论一:延迟是最贵的东西。因为它是唯一一个直接乘在你的力气预算上的量。你可以通过换更好的算法、加微分项、上更复杂的结构去挤出几十个百分点的性能;而把延迟砍半,你的可用力气直接翻倍没有任何控制器设计能给你这么大的回报。

推论二:缩短延迟是「净收益」,降低增益是「交易」。第 4 章那个错觉栏里说过这句话,现在它有了算术依据。降增益换来稳定,赔上精度和速度;缩短延迟同时买到更高的增益上限更快的临界频率——两样都变好,不用付任何东西(除了缩短延迟本身的工程成本)。

推论三:Tu 也跟着延迟走。看表的第三列:临界周期 Tu 大致正比于 L(0.99、1.96、3.85、7.44、14.04、25.66,每次翻倍)。而 Tu 决定了整定出来的积分时间和微分时间(第 8 章那张表全是 Tu 的倍数)。所以:延迟不但决定你能用多大力气,还决定了这个环所有的时间尺度。延迟是这个环的时钟。

⟳ 回到那个环

把第 1 章洗澡那件事再算一遍,用这一章的工具。

那个洗澡的人用的是积分式的手法(一直朝着差的方向拧),所以他的临界增益不是这里的 Ku 而是另一个数,但规律完全一样:

   水管 1 秒:临界手速 1.052 /秒
   水管 2 秒:临界手速 0.548 /秒     (剩 52.1%)
   水管 4 秒:临界手速 0.292 /秒     (剩 53.3%)
   水管 8 秒:临界手速 0.158 /秒     (剩 54.1%)

「水管长一倍,手就得慢一半」——第 1 章那句凭直觉写下的话,现在是一条可以验算的算术。而它对任何反馈环都成立:你的监控周期、你的评审周期、你的财报周期,全都在这条律的管辖之下。

▸ 在现实里

为什么高频交易要把机房搬到交易所隔壁。不是为了「快一点点」,是为了在同一条策略上能用更大的仓位(增益)而不失稳。延迟减半,可用杠杆翻倍——这是这条律最直白的商业变现。

为什么 CI 要快。「提交到知道结果」是开发者这个反馈环的延迟。从 30 分钟砍到 3 分钟,不只是「省 27 分钟」,而是让开发者可以用十倍的力气去纠偏——敢改更大的东西、敢更快地迭代。反过来,一个两小时的 CI 会强迫所有人把动作变小变慢,否则就会陷入「一次改一堆、错了不知道是哪个」的振荡。

为什么组织越大越保守。规模上升,信息从一线传到决策者的延迟上升,于是可用的「决策力度」按反比下降。大公司的谨慎常常被解读为文化或激励问题,但至少有一部分是纯粹的算术:在那个延迟下,激进的动作在数学上就是不稳定的。而这也指出了解法:不是号召大家胆子大一点,是缩短那条链路。

✗ 这个直觉是错的
既然延迟这么要命,那就用更聪明的控制器补偿它——比如让控制器「预测」延迟期间会发生什么。 这条路确实存在(叫 Smith 预估器,1957 年),而且在模型准的时候效果惊人。但它把问题换了一个位置,没有消灭它:它要求你有一个准确的对象模型,包括准确的延迟值。而模型一错,它会比普通 PID 更糟。

Smith 预估器的思路很漂亮:在控制器内部跑一个对象的仿真模型,让控制器对着这个没有延迟的仿真做反馈,同时用真实测量去修正模型。理想情况下,延迟被「移出」了环外,那条 Ku × L 的约束就不适用了。

代价是它对模型误差极其敏感,尤其对延迟值本身的误差。如果你以为延迟是 2 秒而实际是 3 秒,那内部模型和真实系统会持续对不上,而这个偏差本身又会绕回环里。工业界的普遍看法是:Smith 预估器适合延迟大、模型稳、且延迟本身可测的场合(比如带传送带的过程),不适合延迟本身会变的场合(比如网络、人的反应)。

所以这条律真正的地位是:它不是一条无法突破的物理定律,它是一条「不额外提供信息就无法突破」的信息定律。你想突破它,就必须拿模型(也就是关于对象的知识)去换。这跟第 2 章那句「开环的精度上限是你对世界的了解」是同一件事,绕了一圈又回来了。

◈ 回读

C延迟从 2 秒变成 4 秒,Ku 从 8.5024 掉到 4.5868——剩下 53.9%,差不多减半。

而那个附加问题:Ku × L 是个(近似的)常数。2 秒时是 17.0048,4 秒时是 18.3471,而它们共同趋近的极限是 πτ/2K = 15.7080——一个只由设备本身决定、与延迟无关的数。

A 「延迟只影响多久看到」——这是第 9 章已经打过的靶子,但它值得再打一次,因为它是最顽固的一个。延迟影响的不是你多久看到,是你能用多大力气 B 「下降一点,大约 6.0」——这个答案的直觉大概是「延迟翻倍,代价打个七折」。而真实的关系是反比,不是打折。反比意味着:延迟涨 10 倍,力气掉到十分之一;涨 100 倍,掉到百分之一。这是一条双曲线,不是一条斜线。 D 「按平方掉」——比正确答案更悲观了一档。这个直觉可能来自「延迟同时影响相位和时间尺度,所以是两重打击」。但那两重打击并不叠加成平方:相位条件把 ω 压到 ≈π/(2L)(一次反比),而幅值条件里的 ωτ 恰好也线性依赖 ω,两者在 Ku ≈ πτ/(2LK) 里合成了一次反比。幸好是一次的——如果真是平方,几乎所有带延迟的系统都会不可控。

这一章的一句话

「你能用多大力气」和「你多久之后才看得见」,是同一个数的两种说法——它们的乘积由设备决定,你只能在两者之间分配。

下一章是这本书的招牌。同一台设备、同一个目标、四个都「整定过」的控制器,它们的稳态误差全部是 0、闭环直流增益全部是 1——从任何一张稳态报表上你都看不出它们的区别。而把同一个阶跃打进去:0.0% / 0.0% / 44.4% / 回不来了;调节时间 79.9 秒 / 40.2 秒 / 20.9 秒 / 无穷。第四个和第三个之间,只差了「把两个参数各乘以 2」。