seegongsik
単語帳
工業数学

補間は点と点をなめらかに結ぶ

点を通る関数で空白を埋める、ラグランジュ基底とルンゲ現象、チェビシェフ節点とスプライン

私たちの手に入るのはいつも飛び飛びの点です。1秒ごとに測った温度、表に並んだいくつかの値、アニメーションの数枚のキーフレーム。その間が知りたいとき、点を通るなめらかな関数を一つ立てて空白を埋めるのが補間です。テイラーが一点の微分情報で曲線を真似たのに対し、補間は多くの点の位置情報で曲線を立てます。N個の点は次数N-1の多項式を一意に定めます。ところが点をむやみに増やすと、かえって曲線が暴れる罠(ルンゲ現象)があります。だから実務では点を賢く配置したり、区間ごとに低次でつなぐスプラインを使います。補間はグラフィックス、アニメーション、データ解析、数値積分の土台です。

点の高さを動かしてみてください。どう動かしても、五点すべてを正確に通るなめらかな曲線が一つついてきます。これが補間多項式です。二点なら直線(1次)が一つ、三点なら放物線(2次)が一つ、五点なら4次が一つ。N個の点が次数N-1の多項式を一意に定めます。多くも少なくもありません。点をつなぐ曲線は無数にありますが、「次数N-1の多項式」という条件をかけると答えはただ一つに釘付けされます。補間の出発点です。

その一意の多項式をどう書き下すのでしょう。ラグランジュの方法は優雅です。各ノードごとに基底関数 Lᵢ を一つ作ります。Lᵢ は自分のノードで値が1、他のすべてのノードで0になるよう設計された多項式です。セグメントを押して一つずつ見てください。すると補間多項式は、この基底を高さ yᵢ で重み付けして足しただけです。P(x) = Σ yᵢ Lᵢ(x)。どのノード xk を入れても Lk だけが1で残りは0なので P(xk) = yk。全点を正確に通ることがただで保証されます。連立方程式を解く必要もなく。

点が多いほど正確になるはず、と考えがちです。罠です。釣鐘形のルンゲ関数を等間隔の点で補間してみてください。点を増やすと中央は良くなりますが、両端で曲線が上下に激しく揺れます。次数15あたりでは端の誤差が関数値の何倍にもなります。これがルンゲ現象です。高次多項式はノードの間で自由に曲がろうとする性質があり、点を密に打つほどその間で大きく揺れます。教訓は明らかです。補間で次数をむやみに上げるのは答えではありません。

では答えは何でしょう。驚くことに、補間方法はそのままに、点をどこに置くかだけを変えればよいのです。等間隔からチェビシェフ配置へ切り替えてください。これは点を両端へ行くほど密に集める配置です。同じ数、同じラグランジュ補間なのに、端の爆発が嘘のように収まります。直観はこうです。多項式は端で揺れようとするから、端に点を多く打ってその揺れをあらかじめ押さえ込むのです。望遠鏡の鏡の設計や関数近似でチェビシェフが黄金標準である理由です。問題は補間ではなく点の配置でした。

点の位置を自分で選べず、与えられたまま使うしかないことも多いです。そのときは戦略をまるごと変えます。曲線全体を一つの高次多項式で覆う代わりに、隣り合う二点だけを見る低次(3次)の断片をなめらかにつなぎ合わせます。これが3次スプラインです。点を増やすと金の多項式は端で揺れますが、青のスプラインは真値に張り付きます。各断片が遠くの点の影響を受けない(局所性)ので、一か所の揺れが全体に広がりません。フォントの曲線、車体設計(CAD)、アニメーションの経路はみなスプラインです。補間は点をつなぐことを超えて、どうつなぐかを選ぶことです。

実際に使う補間は、飛び飛びの点の間を、その点をすべて通る関数で埋めることです。N個の点は次数N-1の多項式を一意に定め、ラグランジュ基底(自分のノードで1、残りで0)できれいに書けます。しかし等間隔の点で次数をむやみに上げると、端で爆発するルンゲ現象に陥ります。解法は二つ。点を両端に密に置くチェビシェフ配置、または区間ごとに低次でなめらかにつなぐスプライン。テイラーが一点の微分で近似したのに対し、補間は多くの点の位置で近似します。どちらも複雑な関数を扱いやすい多項式に変える同じ夢を見ます。グラフィックス、CAD、データ解析、そして次に見る数値積分も補間の上に立っています。
工業数学
このページがお役に立ったなら支援する