Sub Ex_Pchic()
Const N = 4, Ne = 2
Dim X(N - 1) As Double, Y(N - 1) As Double, D(N - 1) As Double
Dim Ic(1) As Long, Vc(1) As Double
Dim Xe(Ne - 1) As Double, Ye(Ne - 1) As Double, Yep(Ne - 1) As Double
Dim Info As Long, I As Long
'-- Data
X(0) = 0.1: Y(0) = -2.3026
X(1) = 0.11: Y(1) = -2.2073
X(2) = 0.12: Y(2) = -2.1203
X(3) = 0.13: Y(3) = -2.0402
Ic(0) = 1: Ic(1) = 1
Vc(0) = 1 / X(0): Vc(1) = 1 / X(3)
Call
Pchic(Ic(), Vc(), 0, N, X(), Y(), D(), Info)
If Info <> 0 Then
Debug.Print "Error in
Pchic: Info =", Info
Exit Sub
End If
'-- Compute interpolated values
Xe(0) = 0.115: Xe(1) = 0.125
Call
Pchfd(N, X(), Y(), D(), Ne, Xe(), Ye(), Yep(), Info)
Debug.Print "ln(" + CStr(Xe(0)) + ") =", Ye(0)
Debug.Print "ln(" + CStr(Xe(1)) + ") =", Ye(1)
Debug.Print "ln'(" + CStr(Xe(0)) + ") =", Yep(0)
Debug.Print "ln'(" + CStr(Xe(1)) + ") =", Yep(1)
Debug.Print "Info =", Info
End Sub
Function Hermite(N As Long, X As Double, Optional Info As Long) As Double
エルミート多項式 Hn(x)
Sub Pchfd(N As Long, X() As Double, F() As Double, D() As Double, Ne As Long, Xe() As Double, Fe() As Double, De() As Double, Info As Long, Optional Skip As Boolean=False, Optional Idxfd As Long=0, Optional Incfd As Long=1)
区分3次エルミート(または3次スプライン)補間関数値および微分値
Sub Pchic(Ic() As Long, Vc() As Double, Switch As Double, N As Long, X() As Double, F() As Double, D() As Double, Info As Long, Optional Idxfd As Long=0, Optional Incfd As Long=1)
区分3次エルミート補間