射擊法(shooting method)
初值問題把完整的起始狀態交給你,問你會在哪裡結束。「邊值」問題更難:它在「兩端」都釘住了條件——例如一根夾在兩面牆上的樑,或一條必須從這裡出發、精確到達那裡的軌跡——卻把起始斜率留為未知。射擊法把這個兩端的謎題變回容易的單端那種,做法是猜出缺失的起點、發射一條軌跡,再像砲手校準目標那樣調整。
對二階邊值問題 y'' = f(t, y, y')、y(a) = alpha、y(b) = beta,想法如下。麻煩在於你知道起點的 y,卻「不」知道 y'(a)。所以「猜」一個缺失初始斜率 y'(a) 的值 s,把問題變成一個完整的初值問題,用任何 IVP 求解器(歐拉、RK4)從 a 推進到 b。你會落在某個依賴猜測的 y(b) 上——叫它 F(s)。它幾乎一定錯過要求的 beta。現在把 F(s) = beta 當作一個只含未知數 s 的方程,用求根法「解」它:能夾根就用二分法,或用牛頓/割線法快速收斂。每一次「射擊」是一次完整的 IVP 積分;你調整發射角 s 並重射,直到命中遠端邊界。名字是字面的——瞄準、發射、觀察偏差、修正、重複。
射擊法迷人地簡單,又重用你信任的 IVP 機制,這是它的一大優點。但要誠實看待它的弱點:它可能嚴重「病態」。若方程有成長模態,初始猜測 s 的微小改變到達 b 時可能被放大到天文數字,所以 F(s) 超級敏感,求根法掙扎或溢位——軌跡會因微小的瞄準誤差而「偏差千里」。補救是「多重射擊」:把 [a, b] 切成數個子區間,各自帶著自己未知的起點分別射過去,再加上匹配條件讓各段接合——求解一個更大但條件數好得多的系統。對非常敏感或多點的問題,有限差分或配置法(一次解出所有格點未知數)往往比射擊法更穩健。
用射擊法解 y'' = 6t、y(0) = 0、y(1) = 1。猜 y'(0) = s,積分到 t = 1,得 F(s) = y(1)。試 s = 0:軌跡落在 y(1) = 1(這裡碰巧,真解 y = t^3 需要 y'(0) = 0,所以正好命中)。在更難的問題上你會試兩個猜測,看 F(s) 如何錯過 beta = 1,再用割線法在幾次射擊內逼近正確的發射斜率。
猜出缺失的起點、積分、看偏差、用求根法修正瞄準——重複。
當 ODE 有成長模態時,單一射擊可能嚴重病態:猜測起點的微小改變會在整個區間上被放大,使目標值超級敏感。對這類邊值問題,多重射擊或有限差分/配置法穩健得多。