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

◆ Avint()

Sub Avint ( N As  Long,
X() As  Double,
Y() As  Double,
A As  Double,
B As  Double,
Result As  Double,
Info As  Long 
)

有限区間の積分 (データ入力) (放物線近似)

目的
本ルーチンは任意の横座標間隔の関数値がデータで与えられる関数の積分値を求める. 積分区間の上下限が横軸データと一致している必要はない.
積分区間に少なくとも3点のデータがあるものとして, 放物線を重ね合わせてデータを近似する方法が使われる.
Avintは以下の2つの場合を特別扱いする.
  • 積分区間の上下限が同一の場合: 入力データに関わらず0を返す.
  • データ数が2の場合: 台形則を使用する.
引数
[in]Nデータ数. (N >= 2)
[in]X()配列 X(LX - 1) (LX >= N)
X座標の値 (昇順であること).
[in]Y()配列 Y(LY - 1) (LY >= N)
Y座標の値 (関数値).
[in]A積分区間の下限. (A <= B)
[in]B積分区間の上限. (B >= A)
[out]Result求められた積分近似値.
[out]Info= 0: 正常終了.
= -1: パラメータ N の誤り. (N < 2)
= -2: パラメータ X() の誤り.
= -3: パラメータ Y() の誤り.
= -4: パラメータ A (または B) の誤り. (A > B)
= 1: 積分区間内のデータ数が3点より少ない.
= 2: X座標の値が昇順でない.
出典
SLATEC
使用例
次の数表を用いて S = ∫ 1/(1 + x^2) dx [0, 4] (= atan(4)) を求める.
x 1/(1 + x^2)
----- -------------
-1 0.5
0 1
1 0.5
2 0.2
3 0.1
4 0.05882
5 0.03846
----- -------------
Sub Ex_Avint()
Const N = 7, A = 0, B = 4
Dim X(N - 1) As Double, Y(N - 1) As Double, S As Double
Dim Info As Long, I As Long
'-- Data
X(0) = -1: Y(0) = 0.5
X(1) = 0: Y(1) = 1
X(2) = 1: Y(2) = 0.5
X(3) = 2: Y(3) = 0.2
X(4) = 3: Y(4) = 0.1
X(5) = 4: Y(5) = 0.05882
X(6) = 5: Y(6) = 0.03846
'-- Compute integral 1/(1 + x^2) dx [0, 4] (= atan(4))
Call Avint(N, X(), Y(), A, B, S, Info)
Debug.Print "S =", S, "S(true) =", Atn(4)
Debug.Print "Info =", Info
End Sub
Sub Avint(N As Long, X() As Double, Y() As Double, A As Double, B As Double, Result As Double, Info As Long)
有限区間の積分 (データ入力) (放物線近似)
実行結果
S = 1.33197416666667 S(true) = 1.32581766366803
Info = 0