M0.2 13 分鐘閱讀 2026年9月

M0.2 導航的三十秒:Taylor 展開與「假設直線」

起點:兩次定位之間

手機導航不是每一瞬間都知道你在哪。它每隔一段時間收到一次定位——假設是每 hh 秒一次——兩次之間畫面上的小箭頭是算出來的:拿上一次的位置與速度,假設你維持同樣的速度、同樣的方向直走。

直路上這沒問題。問題在轉彎:你在市區以 36 km/h(每秒 10 公尺)進入一個半徑 20 公尺的彎,導航在你進彎的瞬間拿到最後一次定位,接下來 hh 秒都假設你直走。

請先用直覺回答:h=1h=1 秒時,畫面上的箭頭會偏離你真實位置多遠?h=2h=2 秒呢?h=30h=30 秒呢?寫下數字和你有多確定。

大多數人會猜 h=1h=1 秒偏幾公尺、h=2h=2 秒偏大約兩倍。第一個猜得差不多,第二個猜錯了——偏差不是兩倍,是四倍。而 h=30h=30 秒的答案,會讓我們看到這個「四倍規律」本身也有它的適用範圍。

課堂提問Q1

把情境翻成數學:這裡的函數是什麼?導航「假設直走」在做什麼運算?我們想估的量是什麼?

先想一想,再展開看整理後的答案

最直覺的說法是「函數是路線」,可以再精確一點。

函數是位置隨時間的軌跡 x(t)x(t)——一個輸入時間、輸出平面座標的函數(兩個分量)。最後一次定位發生在時間 tt,導航知道的是當時的位置 x(t)x(t) 與速度 x˙(t)\dot x(t)(速度由前幾次定位差出來)。

「假設直走」是一個非常明確的運算:用

x~(t+h)=x(t)+hx˙(t)\tilde x(t+h)=x(t)+h\,\dot x(t)

當作 t+ht+h 時的位置。也就是說,導航用經過 x(t)x(t)、斜率為 x˙(t)\dot x(t) 的直線取代了真實的曲線。

我們想估的量是這條直線與真實軌跡在 t+ht+h 時的距離 x(t+h)x~(t+h)\|x(t+h)-\tilde x(t+h)\|。翻譯完會發現,問題其實跟導航無關:任何時候你用「當下的值加上當下的變化率乘時間」去預測未來,你都在假設直線;問題是這個假設在多長時間內可信、差多少。 這就是 Taylor 展開要回答的事。

一把彎的尺

拿一根有點彎的塑膠尺,貼著眼睛看很短的一段——它看起來是直的。看的範圍拉長,彎曲才顯現出來。

重點不在「它到底是不是直的」,而在彎曲顯現得多快。一根幾乎筆直的尺,你可以看很長一段還覺得直;一根很彎的尺,稍微拉長一點就露餡。而且露餡的速度有一個固定的規律:看的長度加倍,「直線假設」偏離真尺的距離變四倍。 這是曲線的普遍性質,不是尺的特殊性質。

導航的情形一模一樣:軌跡是那根尺,「兩次定位之間」是你看的那一段,轉彎的急緩是尺的彎曲程度。

把「直線假設的誤差」寫成數學

先看一個分量。設 ff 是一個對時間的函數(例如位置的 xx 座標),在 tt 附近有二階導數。一階 Taylor 展開

f(t+h)=f(t)+hf(t)+R1(h),R1(h)=h22f(ξ) (某個 ξ[t,t+h].f(t+h)=f(t)+h\,f'(t)+R_1(h),\qquad R_1(h)=\frac{h^2}{2}f''(\xi)\ \text{(某個 }\xi\in[t,t+h]\text{)}.

前兩項就是「假設直線」;R1R_1 是直線與真實的差,叫 remainder(餘項)。它的形狀值得盯著看:一個 h2/2h^2/2,乘上這段時間內某一刻的二階導數——對軌跡來說就是加速度。所以直線假設的誤差 h22maxf\le\frac{h^2}{2}\max|f''|時間加倍、上界四倍;加速度加倍、上界兩倍。

展開細節餘項為什麼是 h²/2 乘二階導數(積分形式,六行)

由微積分基本定理,f(t+h)f(t)=tt+hf(s)dsf(t+h)-f(t)=\int_t^{t+h}f'(s)\,ds。再對 ff' 用一次:f(s)=f(t)+tsf(r)drf'(s)=f'(t)+\int_t^{s}f''(r)\,dr。代回去並交換積分順序:

f(t+h)f(t)hf(t)=tt+h ⁣ ⁣tsf(r)drds=tt+h(t+hr)f(r)dr.f(t+h)-f(t)-h f'(t)=\int_t^{t+h}\!\!\int_t^{s}f''(r)\,dr\,ds=\int_t^{t+h}(t+h-r)\,f''(r)\,dr .

權重 (t+hr)(t+h-r)[t,t+h][t,t+h] 上的積分是 h2/2h^2/2,所以 R1h22maxf|R_1|\le\frac{h^2}{2}\max|f''|;若 ff'' 連續,由中間值定理可以把它寫成 h22f(ξ)\frac{h^2}{2}f''(\xi)。對向量值的 x(t)x(t),逐分量套用,或直接用積分形式得到 R1h22maxx¨\|R_1\|\le\frac{h^2}{2}\max\|\ddot x\|

二階 Taylor 多補一項,把「當下的加速度」也算進去:

f(t+h)=f(t)+hf(t)+h22f(t)+R2(h),R2(h)h36maxf.f(t+h)=f(t)+h f'(t)+\frac{h^2}{2}f''(t)+R_2(h),\qquad |R_2(h)|\le\frac{h^3}{6}\max|f'''| .

規律是一致的:多用一階導數的資訊,餘項就多一個 hh 的次方。 但每一階都有同樣的但書——公式裡出現的是那段時間內的最大導數,而「它是一個好用的估計」需要 hh 小到 ff'' 在這段時間裡沒有劇烈變化。

回到情境:三個數字

把轉彎寫成數學:半徑 R=20R=20 m 的圓弧、速率 v=10v=10 m/s。圓周運動的加速度指向圓心、大小 x¨=v2/R=5\|\ddot x\|=v^2/R=5 m/s²,而且沿著圓弧處處相同,所以餘項的上界可以直接算:

x(t+h)x~(t+h)  h22v2R=2.5h2 公尺.\|x(t+h)-\tilde x(t+h)\|\ \le\ \frac{h^2}{2}\cdot\frac{v^2}{R}=2.5\,h^2\ \text{公尺}.

h=1h=1:上界 2.5 m;精確算(把直線終點與圓弧上的真實位置相減)是 2.48 m。h=2h=2:上界 10 m,精確 9.73 m——是 h=1h=1 的四倍,不是兩倍。直覺「兩倍」錯在把偏差當成線性累積;實際上直線假設的誤差是 h2h^2,因為它漏掉的是加速度的效果,而加速度的效果本來就是 12at2\tfrac12 a t^2

h=30h=30:上界 2.5×900=22502.5\times900=2250 m。這個數字是對的(真實偏差確實不超過它),但毫無用處:30 秒內車以 10 m/s 在半徑 20 m 的圓上跑了 300 m,繞了兩圈多,真實位置離出發點不到 40 m,而直線預測跑到 300 m 外——真實偏差約 290 m。上界對、但鬆了將近十倍。原因是 h2h^2 這個量級描述的是「hh 小到軌跡在這段時間內還像一條拋物線」的情形;30 秒早已超出這個範圍,此時偏差其實接近 vhv h(線性),因為真車根本沒走遠。

所以「假設直線」這個做法的判斷是:在 smooth 的軌跡上、步長小到加速度在一步之內沒明顯改變時,誤差是 h22x¨\frac{h^2}{2}\|\ddot x\|,可靠且可預測;步長一大,上界仍然對但變得無資訊,估計本身也失效。 直路上(x¨=0\ddot x=0)任何 hh 都沒有誤差——導航在高速公路上更新慢一點沒關係,是這個式子說的。

如果導航多用一個感測器——陀螺儀給轉向率,也就是 x¨\ddot x——就能改用二階 Taylor:h=1h=1 秒時餘項上界 h36v3R2=0.42\frac{h^3}{6}\cdot\frac{v^3}{R^2}=0.42 m(精確 0.41 m),比 2.5 m 好六倍。這是「多量一階、多賺一個 hh」的實例;把它變成不需要額外感測器的演算法,是 M2.4 的主題。

回到情境:實際跑一次,再把彎弄急

import numpy as np
def err(h, v=10.0, R=20.0):
    th = v*h/R                                             # h 秒內轉過的角度
    true = R*np.array([np.sin(th), 1-np.cos(th)])          # 圓弧上的真實位置
    pred = np.array([v*h, 0.0])                            # 假設直走
    return np.linalg.norm(true-pred)
hs = np.array([0.125, 0.25, 0.5, 1, 2, 4])
for R in (20.0, 2.0):                                      # 正常彎 vs 急彎(U-turn)
    e = np.array([err(h, R=R) for h in hs])
    print(f"R={R}: 誤差 {np.round(e, 2)}")
    print(f"       h 加倍後誤差的倍率 {np.round(e[1:]/e[:-1], 2)}   上界 {np.round(50*hs**2/R, 2)}")

R=20R=20 時,倍率一路是 3.93.94.04.0,直到 h=4h=4 秒才掉到 3.73.7——h2h^2 規律在 hh 小時精確兌現。R=2R=2(一個急迫的 U-turn)時,h=0.125h=0.125 秒的誤差 0.39 m 仍與上界吻合,但倍率一路掉:0.1250.250.125\to0.25 還有 3.873.87,接著是 3.503.502.292.291.781.781.781.78:加速度大了十倍,「一步之內像拋物線」的範圍縮到零點幾秒,同樣的 hh 在這裡已經算「太大」。

另一種違反是路徑不 smooth:如果司機在兩次定位之間瞬間變換車道(軌跡有一個折角),那一步的誤差與折角之後經過的時間成正比——是 hh 而不是 h2h^2,因為 Taylor 展開需要的二階導數在折角處根本不存在。

先消化一下

想一想

你每天早上用「昨天的體重加上最近一週平均每天的變化」預測今天的體重。這個預測方法的誤差量級對應 Taylor 展開的哪一項?

想一想

導航的更新間隔從 2 秒改成 1 秒。在一段平順的彎道上,直線假設的最大偏差大約會:

想一想

下列哪個情況會讓「誤差 h22x¨\approx\frac{h^2}{2}\|\ddot x\|」這個估計失準(而不只是常數變大)?

參考文獻

  1. Strang, G. Calculus. Wellesley-Cambridge Press;MIT OpenCourseWare RES.18-001 免費全文。(Taylor 展開與餘項的章節。)
  2. Hairer, E., Nørsett, S. P., Wanner, G. Solving Ordinary Differential Equations I: Nonstiff Problems, 2nd ed. Springer 1993.(第 II 章:用 Taylor 展開分析一步法的局部誤差。)