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

◆ _qawf()

void _qawf ( double(*)(double)  f,
double  a,
double  omega,
int  integr,
double  epsabs,
int  limlst,
int  limit,
int  maxp1,
double *  result,
double *  abserr,
int *  neval,
int *  lst,
double  work[],
int  lwork,
int  iwork[],
int  liwork,
int *  info 
)

半無限区間の積分 (フーリエ型積分) (適応自動積分) (25点クレンショー・カーチス公式および15点ガウス・クロンロッド則)

目的
本ルーチンは要求精度を満たすフーリエ型積分 I = ∫ f(x)*w(x) dx [a, +∞] を求める. ただし, 重み関数 w(x) = cos(ω*x) または sin(ω*x) である.
25点修正クレンショー・カーチス則および15点ガウス・クロンロッド則を使用し, 要求精度を満足するように適応自動積分を行う.
引数
[in]f被積分関数f(x)を求めるユーザー定義サブルーチンで, 次のように定義すること.
double f(double x)
{
return f(x)の計算値
}
[in]a積分区間の下限.
[in]omega重み関数のパラメータ ω.
[in]integr重み関数を指定する.
= 1: w(x) = cos(ω*x)
= 2: w(x) = sin(ω*x)
[in]epsabs目的絶対誤差. (epsabs > 0)
[in]limlstサイクル数の最大値. (limlst >= 3)
[in]limit各サイクルにおける部分区間の最大数. (limit >= 1)
[in]maxp1チェビシェフモーメント数の上限. (maxp1 >= 1)
長さが abs(b-a)*2^(-L) の区間について L = 0, 1, ..., maxp1-2.
[out]result求められた I = [a, +∞]における f(x)*w(x) の積分値.
[out]abserr絶対誤差の推定値. 真の誤差に等しいかそれより大きい.
[out]neval被積分関数の評価回数.
[out]lst実際に必要とされたサイクル数.
[out]work[]配列 work[lwork]
作業領域.
work[0], ..., work[lst-1]: それぞれのサイクルの積分値.
work[limlst], ..., work[limlst+lst-1]: それぞれのサイクルのの誤差推定値.
work[]のその他の要素はユーザーにとって有用な情報ではない.
[in]lwork配列 work[]のサイズ. (lwork >= 2*limlst + 4*limit + 25*maxp1)
[out]iwork[]配列 iwork[liwork] (liwork >= limit)
作業領域.
iwork[k] (k = 0, 1, ..., lst-1): それぞれのサイクルのエラーフラグ.
[in]liwork配列 iwork[]のサイズ. (liwork >= limlst + 2*limit)
[out]info= 0: 正常終了
= -4: 入力パラメータ integr の誤り (integr != 1 かつ integr != 2)
= -5: 入力パラメータ epsabs の誤り (epsabs <= 0)
= -6: 入力パラメータ limlst の誤り (limlst < 3)
= -7: 入力パラメータ limit の誤り (limit < 1)
= -8: 入力パラメータ maxp1 の誤り (maxp1 < 1)
= -14: 入力パラメータ lwork の誤り (lwork < 2*limlst + 4*limit + 25*maxp1)
= -16: 入力パラメータ liwork の誤り (liwork < limlst + 2*limit)
= 1: サイクル数の最大値に達した
= 4: 外挿テーブルが要求精度内に収束しない
= 7: 1つ以上のサイクルで悪い被積分関数の挙動があった
出典
SLATEC (QUADPACK)