補間 わかりやすく
手元に届くのはいつもまばらな点です。センサが 1 秒ごとに測った温度、表に書いたいくつかの値、アニメーションのキーフレーム数枚。そのあいだが知りたいとき、点を通る滑らかな関数を一つ立てて空白を埋めるのが補間です。一点の微分で曲線をまねるのと違い、補間は多くの点の位置で曲線を立てます。N 個の点は次数 N-1 の多項式を一つだけ一意に決めます。ところが点をむやみに増やすと、かえって曲線が暴れ出すルンゲ現象という落とし穴があります。だから実戦では点を賢く置くか、区間ごとに低い次数でつなぐスプラインを使います。補間はグラフィックス、アニメーション、データ解析、数値積分の土台です。
点の高さをドラッグすると、どう動かしても五点すべてをちょうど通る金色の曲線が一つついてきます。これが補間多項式です。二点は次数 1 の直線一つ、三点は次数 2 の放物線一つ、五点は次数 4 の一つです。N 個の点が次数 N-1 の多項式を一意に決め、多くも少なくもありません。点のあいだをつなぐ曲線は無数にありますが、次数 N-1 の多項式という条件を課すと答えはちょうど一つに釘づけです。補間の出発点です。
その唯一の多項式をどう書くのでしょう。ラグランジュの方法が優雅です。各ノードごとに基底関数を一つ作り、その基底は自分のノードでは値が 1、他のすべてのノードでは 0 になるよう設計された多項式です。選んだ基底は金色で描かれ、自分のノードの点も金色です。ボタンを押すと基底を一つずつ点けられます。すると補間多項式は、この基底を高さで重み付けして足しただけです。P(x) = Σ yᵢ Lᵢ(x)。あるノード xk に入れると Lk だけが 1 で残りは 0 なので P(xk) = yk になります。すべての点をちょうど通ることが、ただで保証されます。連立方程式を解く必要もありません。
点が多いほど正確だろうと思いきや、落とし穴です。鐘形のルンゲ関数を等間隔の点で補間してみます。灰色が真の関数、金色が補間曲線です。点の数を増やすほど中央は良くなりますが、両端で曲線が上下に激しく揺れます。次数 15 あたりになると端の誤差が関数の値の何倍にもなり、誤差の文字が赤に変わります。これがルンゲ現象です。高次多項式はノードのあいだで自由に曲がろうとする性質があるので、点を密に打つほどそのあいだでより大きく揺れます。教訓は明らかです。補間で次数をむやみに上げるのは答えではありません。
では答えは何でしょう。驚くことに補間の方法はそのままに、点をどこに置くかだけ変えればよいのです。等間隔の代わりにチェビシェフ配置に切り替えると、これは点を両端へ行くほどより密に集める配置です。等間隔のとき曲線は金色で、チェビシェフのとき曲線は緑です。同じ数、同じラグランジュ補間なのに、端の爆発が嘘のように収まります。直感はこうです。多項式は端で揺れようとするので、端に点をより多く打ってその揺れをあらかじめ押さえておくのです。望遠鏡の鏡の設計や関数近似でチェビシェフが標準である理由です。問題は補間ではなく、点の配置でした。
点の位置を自分で選べず、与えられたまま使わねばならないことも多いです。そのときは戦略そのものを変えます。曲線全体を一つの高次多項式で覆う代わりに、隣り合う二点ずつだけを見る低い 3 次の断片を滑らかにつなぐ 3 次スプラインです。点を増やすと金色の多項式は端で揺れますが、青いスプラインは真値にぴったり張り付きます。一つの断片が遠くの点の影響を受けない局所性のおかげで、一か所の揺れが全体へ広がりません。字体の曲線、自動車の車体設計 (CAD)、アニメーションの経路はすべてスプラインです。補間は点をつなぐ仕事を超えて、どうつなぐかを選ぶ仕事です。