|
|
◆ qag()
| void qag |
( |
double(*)(double) |
f, |
|
|
double |
a, |
|
|
double |
b, |
|
|
double |
epsabs, |
|
|
double |
epsrel, |
|
|
int |
key, |
|
|
int |
limit, |
|
|
double * |
result, |
|
|
double * |
abserr, |
|
|
int * |
neval, |
|
|
int * |
last, |
|
|
double |
work[], |
|
|
int |
lwork, |
|
|
int |
iwork[], |
|
|
int * |
info |
|
) |
| |
有限区間の積分 (適応自動積分) (15/21/31/41/51/61点ガウス・クロンロッド則)
- 目的
- 本ルーチンは要求精度を満たす I = [a, b]におけるfの積分値 を求める. ここで, fはユーザー定義サブルーチンにより与えられる関数である.
15, 21, 31, 41, 51または61点ガウス・クロンロッド則を使用し, 要求精度を満足するように積分区間を分割して計算する適応自動積分を行う.
- 引数
-
| [in] | f | 被積分関数f(x)を求めるユーザー定義サブルーチンで, 次のように定義すること. double f(double x)
{
return f(x)の計算値
}
|
| [in] | a | 積分区間の下限. |
| [in] | b | 積分区間の上限. |
| [in] | epsabs | 要求絶対誤差.
abserr <= max(epsabs, epsrel*|result|) であれば要求精度を満足したものとする. |
| [in] | epsrel | 要求相対誤差.
abserr <= max(epsabs, epsrel*|result|) であれば要求精度を満足したものとする.
epsabs <= 0 かつ epsrel < 50*eps であれば, epsrel = 50*eps とみなす(epsはマシンイプシロン). |
| [in] | key | 使用する積分則.
= 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) |
| [out] | result | 求められた I = [a, b]におけるfの積分値. |
| [out] | abserr | 絶対誤差の推定値. 真の誤差に等しいかそれより大きい. |
| [out] | neval | 被積分関数の評価回数. |
| [out] | last | 分割により作り出された部分区間数. |
| [out] | work[] | 配列 work[lwork]
作業領域.
work[0], ..., work[last-1]: [a, b]を分割する部分区間の左端点.
work[limit], ..., work[limit+last-1]: 部分区間の右端点.
work[2*limit], ..., work[2*limit+last-1]: 部分区間の積分値.
work[3*limit], ..., work[3*limit+last-1]: 部分区間の誤差推定値. |
| [in] | lwork | 配列 work[]のサイズ. (lwork >= 4*limit) |
| [out] | iwork[] | 配列 iwork[liwork] (liwork >= limit)
作業領域.
最初のk要素は部分区間の誤差推定値へのポインタで, work[3*limit+iwork[0]-1], ..., work[3*limit+iwork[k-1]-1] は降順に並ぶ. last <= limit/2+2 であれば k = last, その他の場合には k = limit+1-last である. |
| [out] | info | = 0: 正常終了
= -7: 入力パラメータ limit の誤り (limit < 1)
= -13: 入力パラメータ lwork の誤り (lwork < 4*limit)
= 1: 部分区間数が最大分割数に達した
= 2: 丸め誤差のため要求精度が達成できない
= 3: 積分区間内において被積分関数の挙動が悪い点があった |
- 出典
- SLATEC (QUADPACK)
|