|
|
◆ _qawf_r()
| void _qawf_r |
( |
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, |
|
|
double * |
xx, |
|
|
double |
yy, |
|
|
int * |
irev |
|
) |
| |
半無限区間の積分 (フーリエ型積分) (適応自動積分) (25点クレンショー・カーチス公式および15点ガウス・クロンロッド則) (リバースコミュニケーション版)
- 目的
- 本ルーチンは要求精度を満たすフーリエ型積分 I = ∫ f(x)*w(x) dx [a, +∞] を求める. ただし, 重み関数 w(x) = cos(ω*x) または sin(ω*x) である.
25点修正クレンショー・カーチス則および15点ガウス・クロンロッド則を使用し, 要求精度を満足するように適応自動積分を行う.
- 引数
-
| [in] | a | 積分区間の下限. |
| [in] | omega | 重み関数のパラメータ ω. |
| [in] | integr | 重み関数を指定する.
= 1: w(x) = cos(omega * x)
= 2: w(x) = sin(omega * 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: 正常終了
= -3: 入力パラメータ integr の誤り (integr != 1 かつ integr != 2)
= -4: 入力パラメータ epsabs の誤り (epsabs <= 0)
= -5: 入力パラメータ limlst の誤り (limlst < 3)
= -6: 入力パラメータ limit の誤り (limit < 1)
= -7: 入力パラメータ maxp1 の誤り (maxp1 < 1)
= -13: 入力パラメータ lwork の誤り (lwork < 2*limlst + 4*limit + 25*maxp1)
= -15: 入力パラメータ liwork の誤り (liwork < limlst + 2*limit)
= 1: サイクル数の最大値に達した
= 4: 外挿テーブルが要求精度内に収束しない
= 7: 1つ以上のサイクルで悪い被積分関数の挙動があった |
| [out] | xx | irev = 1〜48: 再呼び出し時に与える関数値を求めるべき点を返す. |
| [in] | yy | irev = 1〜48: 再呼び出し時に関数値f(xx)を与えること. |
| [in,out] | irev | リバースコミュニケーションの制御変数.
[in] 最初の呼び出し時に 0 に設定しておくこと. 2回目以降の呼び出し時には値を変更してはならない.
[out] 0 以外の場合, 下記処理を行いirevを変更せずに再び本ルーチンを呼び出すこと.
= 0: 処理終了.
= 1〜48: xxにおける関数値を求めyyに設定する. yy以外の変数を変更してはならない. |
- 出典
- SLATEC (QUADPACK)
|