SciPy で離散データの数値積分

SciPy の離散データの数値積分関数の使い方をメモ。 数値積分の関数は以下の三つが用意されています。

表1: 数値積分の関数
関数 説明
cumtrapz 合成台形則の累積数値積分
simps 合成 Simpson 則の数値積分
romb Romberg 積分

cumtrapz では離散データの積分値の累積(配列)を取得できます。

離散データの定義区間の積分値を取得するには simps か romb を使います。 Romberg 積分の romb の方が計算精度が高いですが、データ数が \(2^{k}+1\) でないと計算できません。

例として以下の積分値を求めてみます。

\begin{equation} \int_0^2x^{4}{\rm d}x = 6.4 \nonumber \end{equation}

以下のように cumtrapz で累積積分を求められ、

import numpy as np
from scipy import integrate
import matplotlib.pyplot as plt

x = np.linspace(0, 2, num=2**4+1)
y = x**4

y_int = integrate.cumtrapz(y, x, initial=0)

plt.plot(x, y_int, 'ro', x, y[0] + 0.2 * x**5, 'b-')
plt.show()
15071702.png

simps と romb で定義区間の積分値を計算できます。 高次な関数では romb の方が精度よく求まります。

y_int_Simps = integrate.simps(y, x)
y_int_Romb = integrate.romb(y, x[1]-x[0])
print("Simpson:", y_int_Simps)
print("Romberg:", y_int_Romb)
Simpson: 6.40006510417
Romberg: 6.4

コメント

Comments powered by Disqus
書籍更新情報
2017-02-18
Pythonによる科学技術計算 基礎編
1.4版への更新が可能になりました。
サポートページはこちら
電子書籍
Pythonによる科学技術計算 基礎編
電子書籍
線形代数(1): Pythonによる科学技術計算 実践編