技術ドキュメント: integ_order.py
プログラムの動作
integ_order.py は、Pythonで記述された数値積分手法の比較プログラムです。特定の関数 \(f(x) = e^x\) に対して、解析的な定積分値と、複数の異なる数値積分公式(リーマン積分、台形公式、シンプソンの公式、シンプソン3/8公式、ボーデの公式)による近似値を計算し、それらを比較します。
主な機能:
対象関数 \(f(x) = e^x\) とその解析的な積分 \(F(x) = e^x\) を定義します。
定義された関数に対し、指定された区間 \([x, x+h]\) における解析的積分値を計算します。
同じ区間に対し、5種類の数値積分公式を用いて積分値を計算します。
計算されたすべての値を標準出力に表形式で表示します。
計算結果を
integ_order.csvというCSVファイルに保存します。
このプログラムは、異なる数値積分手法の精度や特性を比較検討するための基礎データを提供することを目的としています。
原理
このプログラムでは、関数 \(f(x) = e^x\) を区間 \([x, x+h]\) で積分します。 対象となる関数 \(f(x)\) とその解析的な積分 \(F(x)\) は以下の通りです。
したがって、解析的な定積分値は以下のようになります。
プログラムでは、この解析的積分値と、以下の5種類の数値積分公式による近似値を比較します。
リーマン積分 (短形公式) 区間 \([x, x+h]\) の左端の関数値を用いて長方形の面積を近似します。 $\(\int_x^{x+h} f(t) dt \approx f(x) \cdot h\)$
台形公式 区間 \([x, x+h]\) の両端の関数値を用いて台形の面積を近似します。 $\(\int_x^{x+h} f(t) dt \approx \frac{f(x) + f(x+h)}{2} \cdot h\)$
シンプソンの公式 (1/3 公式) 区間 \([x, x+h]\) を3点(両端と中央)で近似します。 $\(\int_x^{x+h} f(t) dt \approx \frac{f(x) + 4f(x+h/2) + f(x+h)}{6} \cdot h\)$
シンプソン3/8公式 区間 \([x, x+h]\) を4点(両端と2つの内挿点)で近似します。 $\(\int_x^{x+h} f(t) dt \approx \frac{1}{8} (f(x) + 3f(x+h/3) + 3f(x+2h/3) + f(x+h)) \cdot h\)$
ボーデの公式 区間 \([x, x+h]\) を5点(両端と3つの内挿点)で近似します。これはニュートン・コーツの積分公式の一つで、シンプソンの公式よりも高精度です。 $\(\int_x^{x+h} f(t) dt \approx \frac{1}{90} (7f(x) + 32f(x+h/4) + 12f(x+h/2) + 32f(x+3h/4) + 7f(x+h)) \cdot h\)$
プログラムはこれらの公式を $x0$ から $x0 + (nx-1)h$ までの範囲で、\(h\) 間隔で繰り返し適用し、各区間での結果を比較します。
必要な非標準ライブラリとインストール方法
このプログラムは標準ライブラリの他に numpy を使用していますが、実際には数値計算自体にはほとんど使用しておらず、将来的な拡張のためのものと思われます。csv と math はPythonの標準ライブラリです。
必要なライブラリ:
numpy
インストール方法:
numpy がインストールされていない場合は、以下の pip コマンドでインストールできます。
pip install numpy
必要な入力ファイル
このプログラムは、外部からの入力ファイルを必要としません。
積分対象の関数、解析的積分、積分区間の開始点 (x0)、ステップ数 (nx)、ステップ幅 (h) などのすべてのパラメータは、プログラムのソースコード内に直接定義されています。
生成される出力ファイル
プログラムを実行すると、以下のCSVファイルがカレントディレクトリに生成されます。
integ_order.csv
ファイル内容:
integ_order.csv は、各積分区間における解析的積分値と各数値積分手法による近似値を格納したカンマ区切り(CSV)形式のファイルです。
ファイルの1行目はヘッダー行で、以下のカラム名が含まれます。
カラム名 |
説明 |
|---|---|
|
積分区間の開始点( |
|
開始点 |
|
区間 |
|
リーマン積分(短形公式)による近似値 |
|
台形公式による近似値 |
|
シンプソンの公式(1/3 公式)による近似値 |
|
シンプソン3/8公式による近似値 |
|
ボーデの公式による近似値 |
各データ行は、これらのカラムに対応する数値を含みます。
コマンドラインでの使用例 (Usage)
integ_order.py はコマンドライン引数を必要としません。
以下の基本的なコマンドで実行できます。
python integ_order.py
コマンドラインでの具体的な使用例
以下のコマンドを実行します。
python integ_order.py
実行結果の説明:
プログラムを実行すると、まず標準出力に数値積分の開始メッセージと、結果が書き込まれるファイル名が表示されます。 その後、計算された各積分区間における \(x\) の値、関数値 \(f(x)\)、解析的積分値、および各数値積分手法による近似値が表形式で出力されます。
標準出力の例:
Numerical integration using different approximations
Write to [integ_order.csv]
x : f integ(f)[x,x+h] Riemtan Trapezoid Simpson Simpson 3/8 Bode
0.0: 1.0000 0.8244 0.500000 0.824361 0.824361 0.824361 0.824361
0.5: 1.6487 1.3591 0.824361 1.359141 1.359141 1.359141 1.359141
1.0: 2.7183 2.2386 1.359141 2.238612 2.238612 2.238612 2.238612
1.5: 4.4817 3.6908 2.238612 3.690835 3.690835 3.690835 3.690835
2.0: 7.3891 6.0886 3.690835 6.088600 6.088600 6.088600 6.088600
2.5: 12.1825 10.0428 6.088600 10.042849 10.042849 10.042849 10.042849
3.0: 20.0855 16.5562 10.042849 16.556214 16.556214 16.556214 16.556214
3.5: 33.1155 27.2917 16.556214 27.291736 27.291736 27.291736 27.291736
4.0: 54.5982 44.9750 27.291736 44.975017 44.975017 44.975017 44.975017
4.5: 90.0171 74.1956 44.975017 74.195591 74.195591 74.195591 74.195591
同時に、カレントディレクトリに integ_order.csv というファイルが生成され、上記のデータがCSV形式で保存されます。
integ_order.csv の内容は、上記の標準出力の表と同じ形式でデータが記述されます。
x=0.0 の行は以下のようになります(ただし、CSVなのでタブではなくカンマ区切りです)。
x,f,integ(f)[x,x+h],Riemtan,Trapezoid,Simpson,Simpson 3/8,Bode
0.0,1.0,0.8243606353500643,0.5,0.8243606353500643,0.8243606353500643,0.8243606353500643,0.8243606353500643
# ... 以下同様に続く