|
|
◆ 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) 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
|