|
|
◆ Pchcm()
| Sub Pchcm |
( |
N As |
Long, |
|
|
X() As |
Double, |
|
|
F() As |
Double, |
|
|
D() As |
Double, |
|
|
Ismon() As |
Long, |
|
|
Info As |
Long, |
|
|
Optional Skip As |
Boolean = False, |
|
|
Optional Idxfd As |
Long = 0, |
|
|
Optional Incfd As |
Long = 1 |
|
) |
| |
区分3次エルミート関数の単調性のチェック
- 目的
- 本ルーチンは, n, x[], f[]およびd[]により定められる区分3次エルミート関数の単調性のチェックを行う.
- 引数
-
| [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). |
| [out] | Ismon() | 配列 Ismon(LIsmon - 1) (LIsmon >= N)
どの区間においてN, X(), F(), D()で定義される区分3次エルミート関数が単調であるかを示す.
データ区間[X(I), X(I+1)]について次の値を返す(I = 0〜N-2).
Ismon(I) = -3: おおむね単調減少
Ismon(I) = -1: 厳密に単調減少
Ismon(I) = 0: 一定
Ismon(I) = 1: 厳密に単調増加
Ismon(I) = 2: 単調でない
Ismon(I) = 3: おおむね単調増加
Ismon(N-1)は区間[X(0), X(N-1)]全体についての単調性を示す. |
| [out] | Info | = 0: 正常終了.
= -1: パラメータ N の誤り. (N < 2)
= -2: パラメータ X() の誤り. (X()が昇順でないなど)
= -3: パラメータ F() の誤り.
= -4: パラメータ D() の誤り.
= -5: パラメータ Ismon() の誤り.
= -9: パラメータ Incfd の誤り. (Incfd < 1) |
| [in] | Skip | (省略可)
論理変数で, パラメータチェックを省略したいならばTrueを, そうでなければFalseを設定する. これにより, チェックが(Pchim, Pchic, Pchsp あるいは Pchseで)すでに終わっている場合に計算時間を節約することができる. (省略時 = False) |
| [in] | Idxfd | (省略可)
F()およびD()の先頭データのインデックス値. (省略時 = 0) |
| [in] | Incfd | (省略可)
F()およびD()の要素間隔. (Incfd >= 1) (省略時 = 1) |
- 出典
- SLATEC (PCHIP)
- 使用例
- 次の自然対数表を補間する区分3次エルミート関数の単調性をチェックする.
x ln(x)
------ ---------
0.10 -2.3026
0.11 -2.2073
0.12 -2.1203
0.13 -2.0402
------ ---------
Sub Ex_Pchcm()
Const N = 4
Dim X(N - 1) As Double, Y(N - 1) As Double, D(N - 1) As Double
Dim Ismon(N - 1) As Long, 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
Call Pchim(N, X(), Y(), D(), Info)
If Info <> 0 Then
Debug.Print "Error in Pchim: Info =", Info
Exit Sub
End If
'-- Check monotonicity
Call Pchcm(N, X(), Y(), D(), Ismon(), Info)
Debug.Print Ismon(0), Ismon(1), Ismon(2), Ismon(3)
Debug.Print "Info =", Info
End Sub
Function Hermite(N As Long, X As Double, Optional Info As Long) As Double エルミート多項式 Hn(x)
Sub Pchim(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次エルミート補間 (デフォルト境界条件)
Sub Pchcm(N As Long, X() As Double, F() As Double, D() As Double, Ismon() As Long, Info As Long, Optional Skip As Boolean=False, Optional Idxfd As Long=0, Optional Incfd As Long=1) 区分3次エルミート関数の単調性のチェック
- 実行結果
-
|