|
|
◆ qagi()
| def qagi |
( |
f |
, |
|
|
bound |
, |
|
|
inf |
, |
|
|
epsabs |
= 1.0e-10, |
|
|
epsrel |
= 1.0e-10, |
|
|
limit |
= 100 |
|
) |
| |
半無限区間/無限区間の積分 (適応自動積分) (15点ガウス・クロンロッド則)
- 目的
- 本ルーチンは要求精度を満たす I = [bound, +∞], [-∞, bound] または [-∞, +∞]におけるf(x)の積分値 を求める. ここで, f(x)はユーザー定義サブルーチンにより与えられる関数である.
15点ガウス・クロンロッド則を使用し, 要求精度を満足するように積分区間を分割して計算する適応自動積分を行う.
半無限積分を有限区間[0, 1]の積分に変数変換し, それに積分公式を適用することにより必要な積分を求める. ∫ f(x)dx [bound, +∞] = ∫ f(bound + (1 - t)/t) / t^2 dt [0, 1]
また, 無限積分は 2つの半無限積分の和として求められる. ∫ f(x)dx [-∞, +∞] = ∫ (f(x) + f(-x)) dx [0, +∞]
- 戻り値
- (result, abserr, info)
result (float):
求められた積分値.
abserr (float):
絶対誤差の推定値. 真の誤差に等しいかそれより大きい.
info (int):
= 0: 正常終了
= -1: 入力パラメータ f の誤り
= -6: 入力パラメータ limit の誤り (limit < 1)
= 1: 部分区間数が最大分割数に達した
= 2: 要求精度の達成を阻害する丸め誤差の発生が検出された
= 3: 積分区間内において被積分関数の挙動が非常に悪い点がある
= 4: アルゴリズムが収束しない. 要求精度は達成できず, ここで返される結果が得られる最良のものと考えられる
= 5: 積分が発散した, または, 収束が遅い
- 引数
-
| [in] | f | 被積分関数f(x)を求めるユーザー定義サブルーチンで, 次のように定義すること. _CODE def f(x): return f(x)の関数値 _ENDCODE |
| [in] | bound | 半無限積分の積分区間の下限または上限 (無限積分(inf = 2)の場合には無視される). |
| [in] | inf | 積分区間の指定.
= 1: 半無限積分 [bound, +∞]
= -1: 半無限積分 [-∞, bound]
= 2: 無限積分 [-∞, +∞]
(その他の値が指定された場合, inf = 2 とみなす) |
| [in] | epsabs | (省略可)
要求絶対誤差. (省略時 = 1.0e-10)
abserr <= max(epsabs, epsrel*|result|) であれば要求精度を満足したものとする. |
| [in] | epsrel | (省略可)
要求相対誤差. (省略時 = 1.0e-10)
abserr <= max(epsabs, epsrel*|result|) であれば要求精度を満足したものとする.
epsabs <= 0 かつ epsrel < 50*eps であれば, epsrel = 50*eps とみなす(epsはマシンイプシロン). |
| [in] | limit | (省略可)
積分区間を分割する部分区間の最大数. (limit >= 1) (省略時 = 1) |
- 出典
- SLATEC (QUADPACK)
- 使用例
- 次の定積分を求める.
∫ 1/(1 + x^2) dx [0, +∞] (= π/2)
def f(x):
return 1/(1 + x**2)
def TestQagi():
bound = 0.0
inf = 2
s, abserr, info = qagi(f, bound, inf)
print('qagi [-inf, +inf]')
print(s, abserr, info)
inf = 1
s, abserr, info = qagi(f, bound, inf)
print('qagi [0, +inf]')
print(s, abserr, info)
inf = -1
s, abserr, info = qagi(f, bound, inf)
print('qagi [-inf, 0]')
print(s, abserr, info)
def qagi(f, bound, inf, epsabs=1.0e-10, epsrel=1.0e-10, limit=100) 半無限区間/無限区間の積分 (適応自動積分) (15点ガウス・クロンロッド則)
- 実行結果
>>> TestQagi()
3.141592653589793 2.5779659138999894e-10 0
1.5707963267948966 1.2889829569499947e-10 0
1.5707963267948966 1.2889829569499947e-10 0
|