Pythonで積分を計算する

scipyの integrate モジュールを使うと定積分が簡単に計算できます

spicy.integrate の使い方

例えば  \displaystyle \int_{0}^{\frac{\pi}{2}} \sin(x) dx を計算するコードは,たったの三行です.

from scipy import integrate
from math import sin, pi  
print( integrate.quad(sin, 0, pi/2.))

結果は数値解なので計算誤差が含まれます.上記の例だと結果は

(0.9999999999999999, 1.1102230246251564e-14)

というtupleになります.tuppleは(定積分の値,予想される計算誤差)なので,定積分の値は0.9999999999999999で約1.0で,誤差は  10^{-14} で十分小さいです.そして正解は1 なので答えも合っています.

なお0.9999999999999999は循環小数ではなく, floatの精度,有効桁は10進数に換算して約14桁で0.9999999999999999になっています.1.0では無いので注意が必要です.

任意の関数を積分するコード

ある関数f(x) を,区間[A, B]で積分するコードです

from scipy import integrate

def f(x):
     # ここで f(x)の式を書く
     return x*4 + 3

A=0
B=1
print( integrate.quad(f, A, B))

要は f(x), A, B を定義して quad(f, A, B) を呼ぶだけです

ラムダ式を使うとdef f(x)の部分が不要になります

print( integrate.quad(lambda x: x*4 + 3, A, B))

計算精度について

integrate.quadの実装はQUADPACKが使われています.QUADPACKは1980年代に開発されたライブラリ*1で,オリジナルはFORTANベースです.その後,改良され,今では高速で実績のあるアルゴリズムとして広く利用されています.

ただしquad()の計算は基本的に float 精度(有効桁が約14桁)ですので,注意が必要です.

より精度が必要な場合は,scipyモジュールが提供する他の関数を利用した方がいいでしょう.
Integration and ODEs (scipy.integrate) — SciPy v1.10.1 Manual

*1:Piessens, Robert; de Doncker-Kapenga, Elise; Überhuber, Christoph W.; Kahaner, David (1983). QUADPACK: A subroutine package for automatic integration. Springer-Verlag. ISBN 978-3-540-12553-2.