|
|
◆ pchia()
| function pchia |
( |
n::Integer |
, |
|
|
x::Array{Float64} |
, |
|
|
f::Array{Float64} |
, |
|
|
d::Array{Float64} |
, |
|
|
a::Real |
, |
|
|
b::Real |
, |
|
|
incfd::Integer |
= 1, |
|
|
skip::Bool(keyword argument) |
= false |
|
) |
| |
区分3次エルミート(または3次スプライン)補間関数の積分値
- 目的
- pchiaは区分3次エルミート補間関数の任意区間における積分値を求める. 補間関数はpchim, pchic, pchsp または pchseにより求められた n, x, f および d により定められる.
- 戻り値
- (s, info)
s (Float64):
求められた積分値.
info (Int32):
= 0: 正常終了
= -1: 入力パラメータ n の誤り (n < 2)
= -2: 入力パラメータ x の誤り (重複がある, 昇順でないなど)
= -3: 入力パラメータ f の誤り
= -4: 入力パラメータ d の誤り
= -5: 入力パラメータ incfd の誤り (incfd < 1)
= -6: 入力パラメータ skip の誤り (skip != 0 かつ skip != 1)
= 1: aが区間[x[0], x[n-1]]の外にある
= 2: bが区間[x[0], x[n-1]]の外にある
= 3: 上記1, 2の両方
- 引数
-
| [in] | n | データ点数. (n >= 2) |
| [in] | x | 1次元配列 (Float64, n)
独立変数値. xの要素は昇順でなければならない. |
| [in] | f | 1次元配列 (Float64, incfd*(n - 1) + 1)
関数の値. f[i*incfd]がx[i]に対応する値である (i = 0〜n-1). |
| [in] | d | 1次元配列 (Float64, incfd*(n - 1) + 1)
微分係数の値. d[i*incfd]がx[i]に対応する値である (i = 0〜n-1). |
| [in] | a | 積分区間の下限. |
| [in] | b | 積分区間の上限.
注 - [a, b]は必ずしも[x[0], x[n - 1]]の中になくてもよいが, その場合, 積分結果の精度がよくない可能性がある. |
| [in] | incfd | (省略可)
f および d の要素間隔. (incfd >= 1) (省略時 = 1) |
| [in] | skip | (省略可(キーワード引数))
論理変数で, パラメータチェックを省略したいならばtrueを, そうでなければfalseを設定する. これにより, チェックが(pchim, pchic, pchsp あるいは pchseで)すでに終わっている場合に計算時間を節約することができる. (省略時 = false) |
- 出典
- 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
----- -------------
function TestPchia()
n = 7
x = [ -1.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0 ]
y = [ 0.5, 1, 0.5, 0.2, 0.1, 0.05882, 0.03846 ]
d = Vector{Cdouble}(undef, n)
println(info)
if info == 0
a = 0.0
b = 4.0
s, info = pchia(n, x, y, d, a, b)
println(s, " ", info)
end
end
function pchia(n::Integer, x::Array{Float64}, f::Array{Float64}, d::Array{Float64}, a::Real, b::Real, incfd::Integer=1, skip::Bool(keyword argument)=false) 区分3次エルミート(または3次スプライン)補間関数の積分値
function pchse(n::Integer, x::Array{Float64}, f::Array{Float64}, d::Array{Float64}, incfd::Integer=1) 区分3次スプライン補間 ("not a knot"境界条件)
- 実行結果
> TestPchia()
0
1.310707380952381 0
|