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

◆ Qk15i()

Sub Qk15i ( F As  LongPtr,
A As  Double,
Inf As  Long,
Result As  Double,
Optional AbsErr As  Double 
)

半無限区間/無限区間の積分 (ガウス・クロンロッド則 15固定分点)

目的
関数f(x)の半無限あるいは無限区間の積分を15点ガウス・クロンロッド則により求める. 被積分関数f(x)はユーザー定義サブルーチンにより与えられる.

関数f(x)を変数変換して関数f01(t)に変換することにより, 半無限区間の積分を有限区間[0, 1]の積分によって計算する.
∫ f(x)dx [a, +∞] = ∫ f01(t)dt [0, 1] ただし, f01(t) = f(a + (1 - t)/t)/t^2
なお, 無限積分は 2つの半無限積分の和として求められる.
∫ f(x)dx [-∞, +∞] = ∫ (f(x) + f(-x)) dx [0, +∞]
引数
[in]F被積分関数f(x)を求めるユーザー定義サブルーチンで, 次のように定義すること.
Function F(X As Double) As Double
F = f(X)
End Function
Xを変更しないこと.
[in]A半無限積分の積分区間の下限または上限 a. (無限積分(Inf = 2)の場合には無視される)
[in]Inf積分区間の指定.
= 1: 半無限積分 [a, +∞]
= -1: 半無限積分 [-∞, a]
= 2: 無限積分 [-∞, +∞]
(その他の値が指定された場合, Inf = 2 とみなす)
[out]Result求められた積分値.
[out]AbsErr(省略可)
絶対誤差の推定値. 真の誤差に等しいかそれより大きい.
出典
SLATEC (QUADPACK)
使用例
次の定積分を求める.
∫ 1/(1 + x^2) dx [0, +∞] (= π/2)
Function F1(X As Double) As Double
F1 = 1 / (1 + X ^ 2)
End Function
Sub Ex_Qk15i()
Dim A As Double, Inf As Long, Result As Double
A = 0
Inf = 1
Call Qk15i(AddressOf F1, A, Inf, Result)
Debug.Print "S =", Result, "S(true) =", Dconst(13) / 2
End Sub
Function Dconst(I As Long, Optional Info As Long) As Double
基本定数
Sub Qk15i(F As LongPtr, A As Double, Inf As Long, Result As Double, Optional AbsErr As Double)
半無限区間/無限区間の積分 (ガウス・クロンロッド則 15固定分点)
実行結果
S = 1.57079632684678 S(true) = 1.5707963267949