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

◆ Qng()

Sub Qng ( F As  LongPtr,
A As  Double,
B As  Double,
Result As  Double,
Info As  Long,
Optional AbsErr As  Double,
Optional Neval As  Long,
Optional EpsAbs As  Double = -1,
Optional EpsRel As  Double = -1 
)

有限区間の積分 (分点数自動選択) (21/43/87点ガウス・クロンロッド則)

目的
本ルーチンは要求精度を満たす I = [a, b]におけるfの積分値 を求める. ここで, fはユーザー定義サブルーチンにより与えられる関数である.
21, 43または87点ガウス・クロンロッド則より, 要求精度を満足するように分点数を自動的に選択する.
引数
[in]F被積分関数f(x)を求めるユーザー定義サブルーチンで, 次のように定義すること.
Function F(X As Double) As Double
F = f(X)
End Function
Xを変更しないこと.
[in]A積分区間の下限 a.
[in]B積分区間の上限 b.
[out]Result求められた積分値.
[out]Info= 0: 正常終了.
= 1: 最大ステップ数の計算で要求精度を満足できなかった.
[out]AbsErr(省略可)
絶対誤差の推定値. 真の誤差に等しいかそれより大きい.
[out]Neval(省略可)
被積分関数の評価回数.
[in]EpsAbs(省略可)
要求絶対誤差. (省略時 = 0)
AbsErr <= max(EpsAbs, EpsRel*|Result|) であれば要求精度を満足したものとする.
(EpsAbs < 0 であれば省略時の既定値とみなす)
[in]EpsRel(省略可)
要求相対誤差. (省略時 = 1.0e-12)
AbsErr <= max(EpsAbs, EpsRel*|Result|) であれば要求精度を満足したものとする.
EpsAbs <= 0 かつ EpsRel < 50*eps であれば, EpsRel = 50*eps とみなす(epsはマシンイプシロン).
(EpsRel < 0 であれば省略時の既定値とみなす)
出典
SLATEC (QUADPACK)
使用例
次の定積分を求める.
∫ 1/(1 + x^2) dx [0, 4] (= atan(4))
Function F1(X As Double) As Double
F1 = 1 / (1 + X ^ 2)
End Function
Sub Ex_Qng()
Dim A As Double, B As Double, Result As Double, Info As Long
A = 0: B = 4
Call Qng(AddressOf F1, A, B, Result, Info)
Debug.Print "S =", Result, "S(true) =", Atn(4)
Debug.Print "Info =", Info
End Sub
Sub Qng(F As LongPtr, A As Double, B As Double, Result As Double, Info As Long, Optional AbsErr As Double, Optional Neval As Long, Optional EpsAbs As Double=-1, Optional EpsRel As Double=-1)
有限区間の積分 (分点数自動選択) (21/43/87点ガウス・クロンロッド則)
実行結果
S = 1.32581766366803 S(true) = 1.32581766366803
Info = 0