|
|
◆ qag()
| def qag |
( |
f |
, |
|
|
a |
, |
|
|
b |
, |
|
|
epsabs |
= 1.0e-10, |
|
|
epsrel |
= 1.0e-10, |
|
|
key |
= 1, |
|
|
limit |
= 100 |
|
) |
| |
有限区間の積分 (適応自動積分) (15/21/31/41/51/61点ガウス・クロンロッド則)
- 目的
- 本ルーチンは要求精度を満たす I = [a, b]におけるfの積分値 を求める. ここで, fはユーザー定義サブルーチンにより与えられる関数である.
15, 21, 31, 41, 51または61点ガウス・クロンロッド則を使用し, 要求精度を満足するように積分区間を分割して計算する適応自動積分を行う.
- 戻り値
- (result, abserr, info)
result (float):
求められた I = [a, b]におけるfの積分値.
abserr (float):
絶対誤差の推定値. 真の誤差に等しいかそれより大きい.
info (int):
= 0: 正常終了
= -1: 入力パラメータ f の誤り
= -7: 入力パラメータ limit の誤り (limit < 1)
= 1: 部分区間数が最大分割数に達した
= 2: 丸め誤差のため要求精度が達成できない
= 3: 積分区間内において被積分関数の挙動が悪い点があった
- 引数
-
| [in] | f | 被積分関数f(x)を求めるユーザー定義サブルーチンで, 次のように定義すること. _CODE def f(x): return f(x)の関数値 _ENDCODE |
| [in] | a | 積分区間の下限. |
| [in] | b | 積分区間の上限. |
| [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] | key | (省略可)
使用する積分則. (省略時 = 1)
= 1: qk15
= 2: qk21
= 3: qk31
= 4: qk41
= 5: qk51
= 6: qk61
key < 1 であれば key = 1 とみなす. key > 6 であれば key = 6 とみなす. |
| [in] | limit | (省略可)
積分区間[a, b]を分割する部分区間の最大数. (limit >= 1) (省略時 = 100) |
- 出典
- SLATEC (QUADPACK)
- 使用例
- 次の定積分を求める.
∫ 1/(1 + x^2) dx [0, 4] (= atan(4))
def f(x):
return 1/(1 + x**2)
def TestQag():
a = 0
b = 4
s, abserr, info = qag(f, a, b)
print(s, abserr, info)
def qag(f, a, b, epsabs=1.0e-10, epsrel=1.0e-10, key=1, limit=100) 有限区間の積分 (適応自動積分) (15/21/31/41/51/61点ガウス・クロンロッド則)
- 実行結果
>>> TestQag()
1.3258176636680326 1.2911582553319398e-10 0
|