前四篇把我們帶到哪裡
到現在你能用 Lagrange 形式或 Newton 形式建出穿過 n+1 個點的唯一 n 次多項式,也能讀懂誤差公式:f(x) - p(x) = f^{(n+1)}(xi) / (n+1)! 乘以節點多項式 (x - x_0)(x - x_1)...(x - x_n)。第三篇接著給了我們一記重擊——Runge 現象。在等距點上,對 1/(1 + 25 x^2) 這種完全光滑的函數提高次數,插值多項式會在區間兩端附近愈來愈劇烈地震盪,而誤差隨 n 增大而發散。點愈多,反而愈錯。
第四篇給了一條逃生路:別再用單一個高次多項式,改把許多低次的片段縫在一起——三次樣條與它的親戚。當你只能用別人給你的資料時,樣條是對的工具。但這篇要談的是第二條、非常不同的逃生路:保留單一的全域多項式、保留高次數——只是別再把點放在錯的地方。誤差公式裡的罪魁禍首不是次數,而是節點多項式 (x - x_0)...(x - x_n),而那些 x_i 是你能選的。這份自由就是整盤棋。
Chebyshev 節點:把點擠向邊緣
盯著節點多項式 w(x) = (x - x_0)(x - x_1)...(x - x_n) 看。在等距點上它中間小、卻在兩端附近長到巨大——而誤差繼承了這個形狀,這正是為什麼 Runge 的擺盪住在邊緣。於是修正的方向不言自明:選 x_i,讓 |w(x)| 的最高峰在整個區間上盡可能小。做到這件事的點並不均勻分布。它們向兩端聚集、在中間稀疏。這些就是 Chebyshev 節點。
最乾淨的圖像:在一個圓的上半圈取 n+1 個等距的角度點,再把每個點筆直投影到直徑上。這些投影在兩端附近擠成一堆——那就是 Chebyshev 分布。形式上,在區間 [-1, 1] 上Chebyshev 節點是 x_k = cos((2k + 1) / (2n + 2) * pi),也就是等距角度的餘弦。用這些點,|w(x)| 的最高峰小到不能再小,比任何其他 n+1 個節點的選法都小——這是一條定理,不是經驗法則。
對抗 Runge 的回報十分戲劇化。對 1/(1 + 25 x^2),等距插值的誤差隨你加點而無界增長;Chebyshev 插值的誤差卻縮向零。對一個真正光滑(解析)的函數,Chebyshev 插值誤差以幾何速度衰減——像某個 c < 1 的 c^n——所以幾十個放對位置的點就能到達機器精度。誠實的提醒:這場救援假設函數是光滑的。如果 f 有折角或跳躍,沒有任何節點配置能讓單一多項式快速收斂——那時你就回頭去找第四篇的樣條。
重心公式:又快又穩
選好節點只是工作的一半;你還得在浮點數裡計算這個插值多項式而不毀掉它。樸素的 Lagrange 形式在每個 x 都從頭重乘 n+1 個基底多項式——每點 O(n^2) 的工作量,而且數值上笨拙。解法是重心公式,它把同一個多項式改寫成一個加權的比值。你只算一次每個節點的權重 w_j,總共 O(n^2),此後每次計算只要 O(n),而且穩定得漂亮。
barycentric form of the interpolant at a point x:
sum_j [ w_j / (x - x_j) ] * y_j
p(x) = ---------------------------------------
sum_j [ w_j / (x - x_j) ]
w_j = 1 / prod_{k != j} (x_k - x_j) (precompute once)
if x equals some node x_j exactly -> return y_j directly有兩件事讓這不只是個整潔的改寫。第一,Chebyshev 節點有已知的重心權重——簡單的交替 +1、-1 樣式——所以你完全跳過 O(n^2) 的前置設定,整個方法從頭到尾都是 O(n)。第二,在合理的節點集上重心形式是後向穩定的:y_j 的微小相對變動只造成 p(x) 的微小相對變動。加入一個新資料點也很便宜——你用 O(n) 更新權重,而不必重建一切。這就是真實軟體使用的公式;正是它讓高次 Chebyshev 插值從紙上談兵變成切實可用。
插值對最佳逼近
現在談更深的區分。插值多項式被釘住、必須碰到它的資料點——但誰說最佳逼近一定得碰到什麼?最大範數(或一致範數)意義下的最佳逼近,要的是讓最壞情況誤差「對 x 取 |f(x) - p(x)| 的最大值」盡可能小的 n 次多項式 p。這個 minimax 多項式一般不穿過任何指定的點;它自由浮動,把誤差在函數上下兩側平衡,好讓沒有任何單一峰值高過它非得那麼高不可。它才是真正最優的答案,是一切其他方法被拿來比較的標竿。
你又該如何認出最佳的那一個?Chebyshev 的等振盪定理給了一個驚人地俐落的答案。n 次 minimax 多項式是唯一一個其誤差曲線 f(x) - p(x) 至少在 n+2 個點上達到最大幅值、且在那些極值處符號交替 +, -, +, -, ... 的多項式。把誤差想成一道波,它上上下下碰到同樣的高度共 n+2 次,像一排完美齊平、等高的峰與谷。如果你的候選者誤差波是歪的——某個峰比其餘高——你總能藉著微調多項式把那個峰壓低,所以你還沒到最優。
這正是為什麼 Chebyshev 節點如此優秀,而非名字上的巧合。建在 Chebyshev 點上的節點多項式本身就是一個等振盪的 Chebyshev 多項式——它的峰全都一樣高。所以 Chebyshev 插值實際上是在模仿那個定義真正最優的等振盪。結果是一條近乎最佳的定理:Chebyshev 插值的最壞誤差只比無可匹敵的 minimax 誤差大一個緩慢增長的因子(它像 log n 那樣爬升),所以對實用的次數而言,它落在最優的百分之幾以內。你幾乎得到了全部的最佳逼近,只憑在對的點上取樣。
如果你真的需要精確的 minimax 多項式,經典工具是 Remez 交換演算法:猜一組 n+2 個點,擬一個在它們上等振盪的多項式,找出實際誤差峰值真正落在哪裡,把你的點朝那些峰值換過去,重複直到峰值齊平。它收斂得快,但是迭代而瑣碎——這正是為什麼實務上人們常常就拿 Chebyshev 插值、宣告它夠接近了。最優很好;免費的近乎最優通常是更好的工程。
正交多項式,以及更大的圖景
還有第二種同樣重要的誤差量度:不是最壞情況的峰值,而是積分平方誤差——上一階的最小平方意義。在多項式上最小化它,直接通向正交多項式。正如正交向量讓最小平方求解變得乾淨,一族(在某個積分內積下)彼此正交的多項式,讓你能一個係數一個係數地找出最佳最小平方多項式逼近,不必去解任何病態的系統。Chebyshev 多項式是這樣的一族;Legendre 多項式是另一族。
這些族表現良好的結構性理由,和 Gram-Schmidt 正交化馴服最小平方的理由相同:正交性把係數解耦,於是再加一項從不會擾動你已找到的那些,而線性系統是對角的、而非近乎奇異的 Vandermonde。它們也是後面兩階的引擎——Gauss-Legendre 數值積分把取樣點放在 Legendre 多項式的根上,以盡可能精確地積分;而譜方法正是把微分方程的解展開在這樣的基底上。正交多項式是數值分析最重要的串連線索之一。
支撐這一切的是 Weierstrass 逼近定理:閉區間上任何連續函數,都能被某個多項式逼近到你想要的任意近。那就是許可證——它保證好的多項式總是存在。但它只是存在性;它不告訴你怎麼找、也不告訴你需要多高的次數,而且它對等距插值隻字未提,而後者(Runge)可能慘烈地失敗。這一階的藝術,就是把 Weierstrass 的承諾變成一個真實、可計算、穩定的逼近——而以重心公式計算的 Chebyshev 節點,是兌現那份承諾最乾淨的方式。
把三件事帶上階梯。第一,次數很少是問題所在——節點配置才是;等距點造成 Runge,Chebyshev 點藉由縮小節點多項式治好它,而重心公式以 O(n) 後向穩定地算出結果。第二,插值與最佳逼近是不同的問題,由等振盪定理連接起來,而 Chebyshev 插值是免費的近乎最佳——離無可匹敵的 minimax 答案只差一個 log n 的毫釐。第三,這每一個都是近似:光滑度決定收斂速度,折角或跳躍會把它封頂(那就用樣條),而在有限精度算術裡,對的基底與對的點,正是橫亙在你和一個可信數字之間的東西。