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

◆ Polint()

Sub Polint ( N As  Long,
X() As  Double,
Y() As  Double,
C() As  Double,
Info As  Long 
)

補間多項式の生成

目的
本ルーチンは離散データを補完する多項式を生成し配列C()にその情報を設定する. これを使用して, サブルーチンPolyvlは多項式の値と微分係数を求める. また, サブルーチンPolcofは多項式の係数を生成する.
引数
[in]Nデータ点数. (N >= 1)
[in]X()配列 X(LX - 1) (LX >= N)
データのx座標. (すべて異なった値であること)
[in]Y()配列 Y(LY - 1) (LY >= N)
データのy座標.
[out]C()配列 C(LC - 1) (LC >= N)
補間多項式情報. (Polyvl, Polcofが使用する)
[out]Info= 0: 正常終了.
= -1: パラメータ N の誤り. (N <= 0)
= -2: パラメータ X() の誤り.
= -3: パラメータ Y() の誤り.
= -4: パラメータ C() の誤り.
= 1: x座標データに重複がある.
出典
SLATEC
使用例
次の自然対数表を補間して, ln(0.115) および 微分値 ln'(0.115) を求める.
  x       ln(x)
------ ---------
 0.10   -2.3026
 0.11   -2.2073
 0.12   -2.1203
 0.13   -2.0402
------ ---------
Sub Ex_Polint()
Const N As Long = 4
Dim X(N - 1) As Double, Y(N - 1) As Double, C(N - 1) As Double
Dim Xe As Double, Ye As Double, Yep(0) As Double
Dim Info 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
'-- Polynomial interpolation
Call Polint(N, X(), Y(), C(), Info)
If Info <> 0 Then
Debug.Print "Error in Polint: Info =", Info
Exit Sub
End If
'-- Compute interpolated values
Xe = 0.115
Call Polyvl(1, Xe, Ye, Yep(), N, X(), C(), Info)
Debug.Print "ln(" + CStr(Xe) + ") =", Ye
Debug.Print "ln'(" + CStr(Xe) + ") =", Yep(0)
Debug.Print "Info =", Info
End Sub
Sub Polyvl(Nder As Long, XX As Double, Yfit As Double, Yp() As Double, N As Long, X() As Double, C() As Double, Info As Long)
補間多項式の関数値および微分係数
Sub Polint(N As Long, X() As Double, Y() As Double, C() As Double, Info As Long)
補間多項式の生成
実行結果
ln(0.115) = -2.16285
ln'(0.115) = 8.69416666666669
Info = 0