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

◆ Polcof()

Sub Polcof ( XX As  Double,
N As  Long,
X() As  Double,
C() As  Double,
D() As  Double,
Info As  Long 
)

補間多項式の係数

目的
本ルーチンはPolintにより生成された補間多項式の係数を求める.
引数
[in]XXXXのまわりでテイラー展開する.
[in]Nデータ点数. (Polintに入力したもの)
[in]X()配列 X(LX - 1) (LX >= N)
データのx座標. (Polintに入力したもの)
[in]C()配列 C(LC - 1) (LC >= N)
補間多項式情報. (Polintが生成したもの)
[out]D()配列 D(LD - 1) (LD >= N)
テイラー展開式の係数.
P(Z) = D(0) + D(1)*(Z-XX) +D(2)*((Z-XX)^2) + ... + D(N-1)*((Z-XX)^(N-1))
[out]Info= 0: 正常終了.
= -2: パラメータ N の誤り. (N < 1)
= -3: パラメータ X() の誤り.
= -4: パラメータ C() の誤り.
= -5: パラメータ D() の誤り.
出典
SLATEC
使用例
次の自然対数表を補間して補間多項式を求め, それを使ってln(0.115)およびln(0.125)を求める.
  x       ln(x)
------ ---------
 0.10   -2.3026
 0.11   -2.2073
 0.12   -2.1203
 0.13   -2.0402
------ ---------
Sub Ex_Polcof()
Const N As Long = 4
Dim X(N - 1) As Double, Y(N - 1) As Double, C(N - 1) As Double, D(N - 1) As Double
Dim Xe As Double, XX As Double, 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 coefficients of polynomial
XX = 0.12
Call Polcof(XX, N, X(), C(), D(), Info)
Debug.Print D(0), D(1), D(2), D(3)
'-- Compute ln(0.115) and ln(0.125)
Xe = 0.115
Debug.Print "ln(" + CStr(Xe) + ") =", D(0) + D(1) * (Xe - XX) + D(2) * ((Xe - XX) ^ 2) + D(3) * ((Xe - XX) ^ 3)
Xe = 0.125
Debug.Print "ln(" + CStr(Xe) + ") =", D(0) + D(1) * (Xe - XX) + D(2) * ((Xe - XX) ^ 2) + D(3) * ((Xe - XX) ^ 3)
Debug.Print "Info =", Info
End Sub
Sub Polint(N As Long, X() As Double, Y() As Double, C() As Double, Info As Long)
補間多項式の生成
Sub Polcof(XX As Double, N As Long, X() As Double, C() As Double, D() As Double, Info As Long)
補間多項式の係数
実行結果
-2.1203 8.33166666666668 -34.5000000000022 233.333333333222
ln(0.115) = -2.16285
ln(0.125) = -2.079475
Info = 0