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

◆ Deiint()

Sub Deiint ( F As  LongPtr,
Result As  Double,
Info As  Long,
Optional Neval As  Long,
Optional Eps As  Double = -1 
)

無限区間の積分 (自動積分) (二重指数関数(DE)公式)

目的
本ルーチンは要求精度を満たす[-∞, +∞]におけるf(x)の積分値を求める. ここで, f(x)はユーザー定義サブルーチンfにより与えられる関数である.
積分値は二重指数関数(DE)公式を使用した自動積分により求められる.

二重指数関数(DE)公式(Definを参照)において以下の変換関数を使用することにより無限区間[-∞, +∞]に対する公式を得る.
φ(t) = sinh((π/2)sinh(t))
これはゆるやかに減衰するような被積分関数に適している.
引数
[in]F被積分関数f(x)を求めるユーザー定義サブルーチンで, 次のように定義すること.
Function F(X As Double) As Double
F = f(X)
End Function
Xを変更しないこと.
[out]Result求められた積分値.
[out]Info= 0: 正常終了.
= 1: 負側の減衰が遅いため収束判定条件を緩めた.
= 2: 正側の減衰が遅いため収束判定条件を緩めた.
= 3: 上の両方.
= 4: 積分計算が収束しなかった. (Epsが小さすぎる, 区間内に特異点があるなどの原因による)
[out]Neval(省略可)
被積分関数の評価回数.
[in]Eps(省略可)
要求絶対誤差. (省略時 = 1.0e-14)
(Eps <= 0 であれば省略時の既定値とみなす)
出典
森正武、「FORTRAN77数値計算プログラミング(増補版)」岩波書店 (1987)
使用例
次の定積分を求める.
∫ 1/(1 + x^2) dx [-∞, +∞] (= π)
Function F1(X As Double) As Double
F1 = 1 / (1 + X ^ 2)
End Function
Sub Ex_Deiint()
Dim Result As Double, Info As Long
Call Deiint(AddressOf F1, Result, Info)
Debug.Print "S =", Result, "S(true) =", Dconst(13)
Debug.Print "Info =", Info
End Sub
Function Dconst(I As Long, Optional Info As Long) As Double
基本定数
Sub Deiint(F As LongPtr, Result As Double, Info As Long, Optional Neval As Long, Optional Eps As Double=-1)
無限区間の積分 (自動積分) (二重指数関数(DE)公式)
実行結果
S = 3.14159265358979 S(true) = 3.14159265358979
Info = 0