XLPack 6.1
C/C++ API リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ _qk15i_r()

void _qk15i_r ( double  bound,
int  inf,
double  a,
double  b,
double *  result,
double *  abserr,
double *  resabs,
double *  resasc,
double *  xx,
double  yy,
int *  irev 
)

半無限区間/無限区間の積分 (ガウス・クロンロッド則 15固定分点) (リバースコミュニケーション版)

目的
関数f(x)の半無限あるいは無限区間の積分を15点ガウス・クロンロッド則により求める. 被積分関数f(x)は変数irevに従ってユーザーが必要な関数値を計算して与える.

関数f(x)を変数変換して関数f01(t)に変換することにより, 半無限区間の積分を有限区間[0, 1]の積分にマップする.
∫ f(x)dx [bound, +∞] = ∫ f01(t)dt [0, 1] ただし, f01(t) = f(bound+ (1 - t)/t)/t^2
なお, 無限積分は 2つの半無限積分の和として求められる.
∫ f(x)dx [-∞, +∞] = ∫ (f(x) + f(-x)) dx [0, +∞]

本ルーチンは
  I = [a, b]におけるf01の積分値(誤差推定付き) および
  J = [a, b]におけるabs(f01)の積分値
を計算する. ここで, [a, b]は[0, 1]の部分区間である.
引数
[in]boundオリジナルの積分区間の下限または上限. (無限積分(inf = 2)の場合には無視される)
[in]infオリジナルの積分区間の指定.
= 1: 半無限積分 [bound, +∞]
= -1: 半無限積分 [-∞, bound]
= 2: 無限積分 [-∞, +∞]
(その他の値が指定された場合, inf = 2 とみなす)
[in]a変換後の積分区間の下限. (0 <= a <= 1)
[in]b変換後の積分区間の上限. (0 <= b <= 1)
[out]result求められた I = [a, b]におけるf01の積分値.
[out]abserr絶対誤差の推定値. 真の誤差に等しいかそれより大きい.
[out]resabs求められた J = [a, b]におけるabs(f01)の積分値.
[out]resasc求められた [a, b]におけるabs(f01 - I/(b - a))の積分値.
[out]xxirev = 1〜6: 再呼び出し時に与える関数値を求めるべき点を返す.
[in]yyirev = 1〜6: 再呼び出し時に関数値f(xx)を与えること.
[in,out]irevリバースコミュニケーションの制御変数.
[in] 最初の呼び出し時に 0 に設定しておくこと. 2回目以降の呼び出し時には値を変更してはならない.
[out] 0 以外の場合, 下記処理を行いirevを変更せずに再び本ルーチンを呼び出すこと.
= 0: 処理終了.
= 1〜6: xxにおける関数値を求めyyに設定する. yy以外の変数を変更してはならない.
出典
SLATEC (QUADPACK)