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

◆ Pchia()

Function Pchia ( N As  Long,
X() As  Double,
F() As  Double,
D() As  Double,
A As  Double,
B As  Double,
Info As  Long,
Optional Skip As  Boolean = False,
Optional Idxfd As  Long = 0,
Optional Incfd As  Long = 1 
)

区分3次エルミート(または3次スプライン)補間関数の積分値

目的
本ルーチンは区分3次エルミート補間関数の任意区間における積分値を求める. 補間関数はPchim, Pchic, Pchsp または Pchseにより求められた N, X(), F() および D()により定められる.
戻り値
Double
求められた積分値.
引数
[in]Nデータ点数. (N >= 2)
[in]X()配列 X(LX - 1) (LX >= N)
独立変数値. X()の要素は昇順でなければならない.
[in]F()配列 F(LF - 1) (LF >= Incfd*(N - 1) + 1)
関数の値. F(Idxfd + I*Incfd)がX(I)に対応する値である (I = 0〜N-1).
[in]D()配列 D(LD - 1) (LD >= Incfd*(N - 1) + 1)
微分係数の値. D(Idxfd + I*Incfd)がX(I)に対応する値である (I = 0〜N-1).
[in]A積分区間の下限.
[in]B積分区間の上限.
注 - [A, B]は必ずしも[X(0), X(N - 1)]の中になくてもよいが, その場合, 積分結果の精度がよくない可能性がある.
[out]Info= 0: 正常終了.
= -1: パラメータ N の誤り. (N < 2)
= -2: パラメータ X() の誤り. (重複がある, 昇順でないなど)
= -3: パラメータ F() の誤り.
= -4: パラメータ D() の誤り.
= -10: パラメータ Incfd の誤り. (Incfd < 1)
= 1: Aが区間 [X(0), X(N-1)] の外にある.
= 2: Bが区間 [X(0), X(N-1)] の外にある.
= 3: 上記1, 2の両方.
[in]Skip(省略可)
論理変数で, パラメータチェックを省略したいならばTrueを、そうでなければFalseを設定する. これにより, チェックが(Pchim, Pchic, Pchsp あるいは Pchseで)すでに終わっている場合に計算時間を節約することができる. (省略時 = False)
[in]Idxfd(省略可)
F()およびD()の先頭データのインデックス値. (省略時 = 0)
[in]Incfd(省略可)
F()およびD()の要素間隔. (incfd >= 1) (省略時 = 1)
出典
SLATEC (PCHIP)
使用例
次の数表を用いて 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_Pchia()
Const N As Long = 7, A As Double = 0, B As Double = 4
Dim X(N - 1) As Double, Y(N - 1) As Double, D(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
'-- Spline interpolation
Call Pchse(N, X(), Y(), D(), Info)
If Info <> 0 Then
Debug.Print "Error in Pchse: Info =", Info
Exit Sub
End If
'-- Compute integral 1/(1 + x^2) dx [0, 4] (= atan(4))
S = Pchia(N, X(), Y(), D(), A, B, Info)
Debug.Print "S =", S, "S(true) =", Atn(4)
Debug.Print "Info =", Info
End Sub
実行結果
S = 1.31070738095238 S(true) = 1.32581766366803
Info = 0