XLPack 7.0
XLPack 数値計算ライブラリ (C API) リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ qagp()

void qagp ( double(*)(double)  f,
double  a,
double  b,
int  npts2,
double  points[],
double  epsabs,
double  epsrel,
int  limit,
double *  result,
double *  abserr,
int *  neval,
int *  last,
double  work[],
int  lwork,
int  iwork[],
int  liwork,
int *  info 
)

有限区間の積分 (適応自動積分) (積分区間内に既知の特異点がある場合) (21点ガウス・クロンロッド則)

目的
本ルーチンは要求精度を満たす I = [a, b]におけるf(x)の積分値 を求める. 被積分関数の積分が困難になるような(例えば, 特異性, 不連続性を持つ)積分区間の区切り点をユーザーが指定することができる.
21点ガウス・クロンロッド則を使用し, 要求精度を満足するように適応自動積分を行う.
引数
[in]f被積分関数f(x)を求めるユーザー定義サブルーチンで, 次のように定義すること.
double f(double x)
{
return f(x)の計算値
}
[in]a積分区間の下限.
[in]b積分区間の上限.
[in]npts2(ユーザーが与える積分区間の区切り点の数) + 2. (npts2 >= 2)
[in]points[]配列 points[lpoints] (lpoints >= npts2)
points[0]〜points[npts2-3]に積分区間の区切り点を指定.
[in]epsabs要求絶対誤差.
abserr <= max(epsabs, epsrel*|result|) であれば要求精度を満足したものとする.
[in]epsrel要求相対誤差.
abserr <= max(epsabs, epsrel*|result|) であれば要求精度を満足したものとする.
epsabs <= 0 かつ epsrel < 50*eps であれば, epsrel = 50*eps とみなす(epsはマシンイプシロン).
[in]limit積分区間[a, b]を分割する部分区間の最大数. (limit >= npts2 - 1)
[out]result求められた I = [a, b]におけるf(x)の積分値.
[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]: 部分区間の誤差推定値.
work[4*limit], ..., work[4*limit+npts2-1]: 昇順に並べ替えた端点および区切り点.
[in]lwork配列 work[]のサイズ. (lwork >= 4*limit + npts2)
[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 である.
iwork[limit], ..., iwork[limit+last-1] は部分区間の分割レベルである. [aa, bb]を[p1, p2]の部分区間とすると, abs(bb-aa) = abs(p2-p1)*2^(-L) のときに [aa, bb]はレベルLであるとする. ただし, p1およびp2はユーザーが与えた端点または区切り点である.
iwork[2*limit], ..., iwork[2*limit+npts2] はユーザーにとって有用な情報ではない.
[in]liwork配列 iwork[]のサイズ. (liwork >= 2*limit + npts2)
[out]info= 0: 正常終了
= -4: 入力パラメータ npts2 の誤り (npts2 < 2)
= -8: 入力パラメータ limit の誤り (limit < npts2 - 1)
= -14: 入力パラメータ lwork の誤り (lwork < 4*limit + npts2)
= -16: 入力パラメータ liwork の誤り (liwork < 2*limit + npts2)
= 1: 部分区間数が最大分割数に達した
= 2: 丸め誤差のため要求精度が達成できない
= 3: 積分区間内において被積分関数の挙動が悪い点があった
= 4: 外挿テーブルの丸め誤差のためにアルゴリズムが収束しない
= 5: 積分が発散している, または, 収束が遅い
= 6: 区切り点が積分区間外に指定されている
出典
SLATEC (QUADPACK)