パラメータ設定
リセット
固定: x_i = 0,1,2,3,4,5、y_0 = 0、y_5 = 25。既定値は y = x² 上の点で、理論曲線と比較できます。
データ点と補間曲線
黒点=データ/青破線=線形補間/赤実線=自然3次スプライン/緑実線=理論曲線 y=x²(既定値時の参考)
理論・主要公式
各区間 $[x_i, x_{i+1}]$ で、スプラインは3次多項式として表されます。
$$S_i(x) = a_i + b_i(x-x_i) + c_i(x-x_i)^2 + d_i(x-x_i)^3$$
値・1階微分・2階微分の連続と、自然条件 $S''(x_0)=S''(x_n)=0$ から、$M_i = S''(x_i)$ に関するトライディアゴナル系が得られます($h_i = x_{i+1} - x_i$):
$$h_{i-1}M_{i-1} + 2(h_{i-1}+h_i)M_i + h_i M_{i+1} = 6\!\left(\frac{y_{i+1}-y_i}{h_i} - \frac{y_i-y_{i-1}}{h_{i-1}}\right)$$
求めた $M_i$ から各区間の係数 $a_i,b_i,c_i,d_i$ を逆算します:
$$a_i = y_i,\quad c_i = \tfrac{M_i}{2},\quad d_i = \tfrac{M_{i+1}-M_i}{6h_i},\quad b_i = \tfrac{y_{i+1}-y_i}{h_i} - \tfrac{h_i(2M_i+M_{i+1})}{6}$$
この連立方程式は対角・上下1本ずつだけが非ゼロのトライディアゴナル形なので、ThomasアルゴリズムによりO(n)で解けます。
自然3次スプライン補間シミュレーターとは
🙋
データ点をなめらかにつなぐって、線で結ぶだけじゃダメなんですか?
🎓
ざっくり言うと、線形補間(青破線)は「点と点を直線でつなぐだけ」で、節点で曲がってカクッとなる。一方、自然3次スプライン(赤実線)は各区間を3次関数で表して、節点で値・1階微分・2階微分まで連続にする。だから滑らかな曲線になるんだ。上のグラフで青破線と赤実線を見比べると、青の方が節点でツノが出てるのが分かるよ。
🙋
2階微分まで連続って、そんなにありがたいんですか?
🎓
機械設計で大事なんだ。例えば、カム曲線や自動車のボディ曲面で、2階微分(=曲率)が不連続だと、その点で加速度が跳ねたり、光の反射が筋になって見えたりする。CADで使う「C²連続」というのがまさにこれ。自然3次スプラインはC²連続を満たす最小限のクラスだから、教科書でも CAD でも最初に出てくる古典なんだよ。
🙋
既定値で動かすと S(2.5) が 6.25 にすごく近いですね。理論の y=2.5² = 6.25 と一致してます!
🎓
いいところに気がついた。実は完全一致ではなく、ほんの少しズレるはずだ。自然3次スプラインは両端で $S''=0$ という人工的な条件を入れているから、本当は $y=x^2$($y''=2$ で一定)とは合わない。グラフ右の「M_2」を見ると、理論の 2.0 にかなり近い値が出ているはずだけど、両端付近では境界条件の影響でズレるんだ。これが「自然境界」の名前の由来でもある。
🙋
y_3 のスライダーをぐっと大きくしたら、近くだけじゃなくて遠くの曲線まで動きました!
🎓
そう、それが自然3次スプラインの「大域性」だ。1点を動かすと、トライディアゴナル系を通して全データ点の M_i が再計算されるから、全区間が連動して動く。CADで「制御点を1つ動かしたら全体が変わるのは困る」場面では、局所性をもつ B スプラインや Bezier 曲線の方が向いている。用途に応じて使い分けるんだよ。
よくある質問
「自然」境界条件は本当に最良ですか?
「自然」とは両端で2階微分をゼロにする条件で、計算が単純になる利点があります。ただし、データの真の関数の2階微分が両端でゼロでない場合(例: y=x²)は、端付近で誤差が大きくなります。両端の1階微分が既知なら「クランプ境界条件」、周期データなら「周期境界条件」、両端の3階微分連続を要求する「not-a-knot条件」など、用途に応じて選択します。MATLABの spline 関数は既定で not-a-knot を使います。
Thomasアルゴリズムとはどんな手順ですか?
トライディアゴナル(3重対角)行列専用の連立方程式解法で、ガウス消去法の特殊形です。前進消去で下対角を消して上三角化し、後退代入で解を求めます。一般的なガウス消去がO(n³)であるのに対し、Thomasは行列の構造を活かしてO(n)で解けます。スプライン補間や、熱伝導の陰解法(クランク・ニコルソン法)など、CAEの随所で使われる基本アルゴリズムです。
CAEのどんな場面で使われますか?
CADの曲線・曲面設計、有限要素法でのメッシュ生成における境界曲線、実験データの内挿、時系列データの欠損補完、ロボットアームの軌道計画、光学レンズの非球面形状記述など、滑らかな曲線が必要な場面で広く使われます。航空機の翼断面(NACA翼)の表現や、自動車ボディの A クラス曲面(外観品質を要求される面)の検査にも応用されています。
データ点が多すぎると問題はありますか?
自然3次スプラインは「全点を必ず通る」ため、データにノイズが含まれていると曲線がノイズに振り回されて波打つことがあります。観測誤差のあるデータをなめらかにしたい場合は、点を通すことを犠牲にして平滑性を優先する「平滑化スプライン(smoothing spline)」や、最小二乗法でBスプラインに当てはめる方法が適しています。点を通すかどうかは目的に応じて選びます。
実世界での応用
CAD・CAMの曲線設計: 機械部品や自動車ボディの形状を表す滑らかな曲線として、3次スプラインは最も基本的なクラスです。NURBSやBスプラインといった現代CADの主流曲線も、3次スプラインの理論を拡張したもので、自由曲面のモデリング・干渉チェック・5軸加工の工具経路生成に欠かせません。
実験データの内挿と可視化: 有限個のセンサ測定点から、間の値を推定する補間に使われます。風洞実験の翼面圧力分布、CTスキャンの断層データから3D形状の再構築、温度プロファイルの内挿など、観測の隙間を滑らかに埋める基本ツールです。MATLABの spline 関数、SciPyの CubicSpline、Excelの3次曲線近似など、各種ソフトウェアの基盤として組み込まれています。
軌道計画と制御: ロボットアームの関節角度、CNC工作機械の刃物経路、ドローンの飛行軌道など、時間に対して滑らかに変化させるべき制御値の生成にスプラインが使われます。2階微分が連続なので、加速度の急変によるショックや振動を抑えられます。アニメーションのキーフレーム補間にも応用されています。
金融・科学計算でのカーブフィッティング: 金利のイールドカーブ構築、薬物動態の濃度時間プロファイル、地球科学の気温時系列など、離散観測から連続曲線を作る場面で広く使われます。3次スプラインは「単純で滑らかで予測可能」という性質が好まれ、より複雑なモデルのベースラインとしても重要です。
よくある誤解と注意点
最も多い誤解は、「全点を通る補間が常に最良」と考えてしまう ことです。スプラインは「データ点をぴったり通す」性質を持ちますが、点に誤差や外れ値が含まれていると、その誤差を律儀になぞって不自然な波形になります。実務では、点を通す補間(interpolation)と、点に近づける近似(approximation)のどちらを使うべきかを最初に判断する必要があります。観測ノイズが大きいデータには平滑化スプラインや最小二乗近似の方が向いていることが多いです。
次に、「自然境界条件」が万能だと思い込む ことです。「自然」という名前から最も適切な条件のように見えますが、実は両端で曲率(2階微分)をゼロにするという強い仮定です。例えば $y=x^2$ のように両端の真の曲率が非ゼロの関数を補間すると、両端付近で誤差が大きくなります。シミュレーターで既定値($y=x^2$ 上の6点)の RMSE を見ると、補間にもかかわらず誤差がゼロにならないのはこの理由です。MATLABの既定 not-a-knot や、両端の傾きを与えるクランプ境界の方が実用上は精度が高いことが多いです。
最後に、3次スプラインに「局所性」があると勘違いする ことです。シミュレーターで y_3(中央の点)をぐっと変えてみると、変化は中央付近だけでなく、両端の区間にも波及します。これは Thomas アルゴリズムが大域的な連立方程式を解くため、1点の変更がすべての M_i に影響するからです。1点の変更を局所に閉じ込めたい場合(例: CADで制御点を1つだけ動かす編集)には、Bスプラインや Bezier曲線のような「局所基底」を持つ表現が適しています。スプライン補間と曲線編集は別物だと意識することが重要です。