Lagrange Interpolation Technical Document

プログラムの動作

interpolate_lagrange.py は、ラグランジュ補間を用いて特定の関数 \(f(x) = 1 / (1 + x^2)\) を近似し、その結果を可視化するPythonスクリプトです。このプログラムの主な目的は、補間多項式の次数を変化させたときに発生するルンゲ現象をデモンストレーションすることです。

プログラムは以下の主要な機能を提供します。

  • 補間点の生成: 指定された区間 [xmin, xmax] 内で、コマンドライン引数またはデフォルト設定で指定された補間次数 norder に基づいて等間隔な補間点 \(x_i\) を生成します。

  • 関数値の計算: 各補間点 \(x_i\) における関数 \(f(x_i) = 1 / (1 + x_i^2)\) の値を計算し、補間データ \(y_i\) を作成します。

  • ラグランジュ補間の実行: より詳細な出力グリッド [xomin, xomax] 上の各点 \(x_0\) に対して、interpolate_lagrange 関数を使用して補間多項式 \(P(x_0)\) の値を計算します。

  • 結果の出力: 真の関数値と補間多項式の値を、コンソールに表示するとともに、CSVファイル interpolate_lagrange.csv に保存します。

  • 結果の可視化: Matplotlibライブラリを用いて、真の関数と補間多項式を比較するグラフを生成し、ルンゲ現象を視覚的に示します。

原理

このプログラムは、ラグランジュ補間とルンゲ現象という2つの主要な数学的原理に基づいています。

ラグランジュ補間

ラグランジュ補間は、与えられた \(n+1\) 個のデータ点 \((x_0, y_0), (x_1, y_1), \dots, (x_n, y_n)\) を全て通過する唯一の \(n\) 次多項式 \(P(x)\) を構築するための方法です。この多項式は以下のように表現されます。

\[P(x) = \sum_{j=0}^{n} y_j L_j(x)\]

ここで、\(L_j(x)\) はラグランジュ基底多項式と呼ばれ、次のように定義されます。

\[L_j(x) = \prod_{k=0, k \neq j}^{n} \frac{x - x_k}{x_j - x_k}\]

interpolate_lagrange 関数はこの数式を直接実装しており、指定された点 \(x_0\) における補間多項式の値を計算します。

ルンゲ現象

ルンゲ現象は、特定の関数(このプログラムで使われている \(f(x) = 1 / (1 + x^2)\) など)を等間隔な補間点を用いて高次のラグランジュ補間を行った場合に発生する現象です。補間多項式の次数 \(n\) を大きくすると、補間区間の端に近い領域で多項式が大きく振動し、真の関数値から大きく乖離することがあります。このプログラムは、norder の値を大きくすることで、この現象を明確に示します。

必要な非標準ライブラリとインストール方法

このプログラムの実行には、以下の非標準ライブラリが必要です。

  • numpy: 数値計算を効率的に行うためのライブラリです。

  • matplotlib: グラフ描画のためのライブラリです。

これらのライブラリは pip コマンドを使用してインストールできます。

pip install numpy matplotlib

必要な入力ファイル

interpolate_lagrange.py は、外部の入力ファイルを必要としません。すべてのデータはプログラム内部で生成されるか、コマンドライン引数によって設定されます。

生成される出力ファイル

プログラムを実行すると、以下の出力が生成されます。

  • コンソール出力: 計算されたデータの一部 (x、真の関数値 f、補間値 f(fit)) が標準出力に表示されます。

  • CSVファイル: interpolate_lagrange.csv という名前のCSVファイルがプログラム実行ディレクトリに生成されます。このファイルには、出力グリッド上の各点における x 座標、真の関数値 \(f(x)\)、およびラグランジュ補間によって得られた値 \(P(x)\) が以下のヘッダーと共に保存されます。

    x,f,f(fit)
    
  • Matplotlibグラフウィンドウ: 真の関数と補間された関数の両方をプロットしたグラフウィンドウが表示されます。このグラフは、補間の精度と、特に高次補間におけるルンゲ現象を視覚的に示します。グラフのタイトルには補間次数が表示されます。

コマンドラインでの使用例 (Usage)

interpolate_lagrange.py は、以下の形式でコマンドラインから実行できます。

python interpolate_lagrange.py [norder]
  • [norder]: オプション引数で、ラグランジュ補間多項式の次数を指定します。この値は整数である必要があります。指定しない場合、デフォルト値は 4 です。

コマンドラインでの具体的な使用例

例1: デフォルトの補間次数 (norder = 4) で実行

python interpolate_lagrange.py

実行結果の説明: コンソールには計算されたデータの一部が表示され、interpolate_lagrange.csv ファイルが生成されます。また、補間次数4のグラフウィンドウが表示されます。このグラフでは、補間多項式が真の関数によく近似していることが確認できます。

例2: 補間次数を高くして実行 (norder = 10)

python interpolate_lagrange.py 10

実行結果の説明: 同様にコンソール出力とCSVファイルが生成されますが、表示されるグラフは補間次数10のものとなります。このグラフでは、区間の端に近い部分で補間多項式が真の関数から大きく外れ、激しく振動している様子が確認できます。これは、ラグランジュ補間におけるルンゲ現象の典型的な例です。norder をさらに大きくすると、この振動はより顕著になります。