integ_gauss_legendre.py テクニカルドキュメント

プログラムの動作

integ_gauss_legendre.py は、ガウス・ルジャンドル求積法を用いて数値積分を実行するPythonプログラムです。このプログラムの主な目的は、指定された関数を特定の区間で数値的に積分し、その結果を解析解と比較することです。

具体的な機能は以下の通りです。

  • 被積分関数の定義: func(x) 関数により、積分する関数が定義されています。デフォルトでは指数関数 \(f(x) = e^x\) が設定されていますが、コメントアウトされている他の関数(例:\(f(x) = \sqrt{1 - x^2}\))に切り替えることも可能です。

  • 解析解の定義: F(x) 関数により、func(x) の解析的積分が定義されています。これにより、数値積分の結果がどれだけ正確であるかを評価できます。

  • 積分区間: 積分区間は xminxmax 変数で定義されており、デフォルトでは \([-1.0, 1.0]\) となっています。

  • ガウス点と重み: 2点、3点、4点、5点のガウス・ルジャンドル求積法に対応するガウス点(xfrac)と重み(weight)がプログラム内にハードコードされています。

  • 数値積分実行: integ_GL 関数がガウス・ルジャンドル求積法の計算を実行します。

  • 結果の表示: main 関数では、解析解の値と、3点、4点、5点のガウス・ルジャンドル法による数値積分結果を標準出力に表示し、比較を可能にします。

原理

このプログラムは、数値積分手法の一つであるガウス・ルジャンドル求積法(Gauss-Legendre quadrature)に基づいています。ガウス・ルジャンドル求積法は、特定の点(ガウス点)で関数を評価し、対応する重みを掛けて合計することで、積分値を近似する手法です。これにより、低い次数の多項式でも高い精度の積分結果が得られます。

一般的な積分区間 \([a, b]\) における関数 \(f(x)\) の積分は、以下のように近似されます。

\[\int_a^b f(x) dx \approx \frac{b-a}{2} \sum_{i=1}^n w_i f\left(\frac{b-a}{2}x_i + \frac{a+b}{2}\right)\]

ここで、

  • \(n\) は求積点の数(このプログラムでは3, 4, 5点)。

  • \(x_i\) はルジャンドル多項式 \(P_n(x)\) の根であり、正規化された区間 \([-1, 1]\) におけるガウス点です。

  • \(w_i\) は対応する重みです。

プログラム内の xfracweight リストには、各点数 \(n\) に対応する \(x_i\)\(w_i\) の値が格納されています。integ_GL 関数では、与えられた積分区間 \([xmin, xmax]\)\([-1, 1]\) に線形変換し、ガウス点での関数評価と重み付け和を行っています。

コードの冒頭には、このプログラムが「ガウス・ルジャンドル法による数値積分」を実行することを説明する3重引用符で囲まれたドキュメント文字列が含まれています。

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

このプログラムは、Pythonの標準ライブラリである math モジュールのみを使用しており、numpy をインポートしていますが、実際にはその機能は使用していません。したがって、追加でインストールする必要がある非標準ライブラリはありません

必要な入力ファイル

このプログラムは、外部の入力ファイルを必要としません。 被積分関数 func(x)、その解析解 F(x)、および積分区間 xmin, xmax はすべてプログラムのソースコード内に直接定義されています。積分対象の関数や区間を変更する場合は、プログラムを直接編集する必要があります。

生成される出力ファイル

このプログラムは、いかなるファイルも生成しません。 すべての計算結果は、実行時に標準出力(コンソール)に表示されます。 出力される情報には以下のものが含まれます。

  • 解析解の被積分関数値 (f(xmin))

  • 解析解による定積分値 (integ(f)[xmin, xmax])

  • 各点数(3点、4点、5点)のガウス・ルジャンドル求積法におけるガウス点 (x)

  • 各点数における対応する重み (w)

  • 各点数で計算された数値積分の結果 (S)

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

integ_gauss_legendre.py プログラムは、コマンドライン引数を必要としません。 Pythonインタープリタを使用して直接実行します。

python integ_gauss_legendre.py

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

上記の使用例コマンドを実行すると、以下の出力が標準出力に表示されます。

python integ_gauss_legendre.py
Numerical integration using by Gauss-Legendre method

Analytical values:
  f(-1.0)=0.36787944117144233
  integ(f)[-1.0, 1.0]=2.350402387287603

3-point formulat
  x= [-0.5484807469337704, 0.0, 0.5484807469337704]
  w= [0.5555555555555556, 0.8888888888888888, 0.5555555555555556]
  S=2.350402387287593

4-point formulat
  x= [-0.769903914562085, -0.3, 0.3, 0.769903914562085]
  w= [0.347854845137453, 0.652145154862546, 0.652145154862546, 0.347854845137453]
  S=2.350402387287603

5-point formulat
  x= [-0.861136311594052, -0.48496464522437654, 0.0, 0.48496464522437654, 0.861136311594052]
  w= [0.23692688505618908, 0.47862867049936647, 0.5688888888888889, 0.47862867049936647, 0.23692688505618908]
  S=2.350402387287603