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

◆ Qawf()

Sub Qawf ( F As  LongPtr,
A As  Double,
Omega As  Double,
Integr As  Long,
Result As  Double,
Info As  Long,
Optional AbsErr As  Double,
Optional Neval As  Long,
Optional EpsAbs As  Double = -1,
Optional Limlst As  Long = -1,
Optional Lst As  Long,
Optional Limit As  Long = -1,
Optional Maxp1 As  Long = -1 
)

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

目的
本ルーチンは要求精度を満たすフーリエ型積分 I = ∫ f(x)*w(x) dx [a, +∞] を求める. ただし, 重み関数 w(x) = cos(ω*x) または sin(ω*x) である.
積分区間を小区間に分割し, 与えられた要求精度を満足するまで各小区間をQawoにより適応自動積分し積算する. 25点修正クレンショー・カーチス則および15点ガウス・クロンロッド則が使用される.
引数
[in]F被積分関数f(x)を求めるユーザー定義サブルーチンで, 次のように定義すること.
Function F(X As Double) As Double
F = f(X)
End Function
Xを変更しないこと.
[in]A積分区間の下限 a.
[in]Omega重み関数のパラメータ ω.
[in]Integr重み関数を指定する.
= 1: w(x) = cos(ω*x)
= 2: w(x) = sin(ω*x)
[out]Result求められた積分値.
[out]Info= 0: 正常終了.
= -4: パラメータ Integr の誤り. (Integr <> 1 かつ Integr <> 2)
= 1: 小区間Ckの数が最大値に達した.
= 4: 収束の加速のための補外表が要求精度内に収まらなかった.
= 7: 1つ以上の小区間において積分を求められなかった.
[out]AbsErr(省略可)
絶対誤差の推定値. 真の誤差に等しいかそれより大きい.
[out]Neval(省略可)
被積分関数の評価回数.
[in]EpsAbs(省略可)
要求絶対誤差. (EpsAbs > 0) (省略時 = 1.0e-12)
(EpsAbs <= 0 であれば省略時の既定値とみなす)
[in]Limlst(省略可)
小区間の数の最大値. (Limlst >= 3) (省略時 = 50)
(Limlst < 3 であれば省略時の既定値とみなす)
[out]Lst(省略可)
実際に必要とした小区間の数.
[in]Limit(省略可)
各小区間をQawoで積分する際に使用する部分区間数の最大値. (Limit >= 1) (省略時 = 100)
(Limit < 1 であれば省略時の既定値とみなす)
[in]Maxp1(省略可)
チェビシェフモーメント数の上限 (Maxp1 >= 1) (省略時 = 21)
(Maxp1 < 1 であれば省略時の既定値とみなす)
出典
SLATEC (QUADPACK)
使用例
次の定積分を求める.
∫ exp(-x^2)cos(x) dx [0, +∞] (= exp(-1/4)*1/2*√π)
Function F6(X As Double) As Double
F6 = Exp(-X ^ 2)
End Function
Sub Ex_Qawf()
Dim A As Double, Omega As Double, Integr As Long, Result As Double
Dim Info As Long
A = 0
Omega = 1
Integr = 1
Call Qawf(AddressOf F6, A, Omega, Integr, Result, Info)
Debug.Print "S =", Result, "S(true) =", Exp(-1 / 4) * Dconst(17) / 2
Debug.Print "Info =", Info
End Sub
Function Dconst(I As Long, Optional Info As Long) As Double
基本定数
Sub Qawf(F As LongPtr, A As Double, Omega As Double, Integr As Long, Result As Double, Info As Long, Optional AbsErr As Double, Optional Neval As Long, Optional EpsAbs As Double=-1, Optional Limlst As Long=-1, Optional Lst As Long, Optional Limit As Long=-1, Optional Maxp1 As Long=-1)
半無限区間の積分 (フーリエ型積分) (適応自動積分) (25点クレンショー・カーチス公式および15点ガウス・クロンロッド則)
実行結果
S = 0.690194223521571 S(true) = 0.690194223521572
Info = 0