ジュリアでの数値解析的補間
概要
ジュリアでは、数値解析的な補間のためにInterpolations.jl
パッケージを使用する1。ジュリアで変数の値を出力する際に使用する補間法と混同しないように注意しよう。
コード
Interpolate()
julia> y = rand(10)
10-element Vector{Float64}:
0.8993801321974316
0.12988982511901515
0.49781160399025925
0.22555299914088356
0.4848674643768577
0.6089318286915111
0.10444895196527337
0.5921775799940143
0.2149546302906653
0.32749334953170317
julia> f = interpolate(y, BSpline(Linear()));
julia> f(1.2)
0.7454820707817483
julia> f(0.1)
ERROR: BoundsError: attempt to access 10-element interpolate(::Vector{Float64}, BSpline(Linear())) with element type Float64 at index [0.1]
基本的には上記のようにデータを渡して、補間関数 f=
$f$ 自体をリターンしてもらって使用することができる。例では、10個の点が与えられ、1番目(0.899)と2番目(0.129)の間の1.2あたりにある値(0.745)がどのように補間されるかを示している。具体的にどの方法を使用するかは、公式ドキュメントのAPIセクションを参照しよう2。
linear_interpolation()
x = 1:10
f_lin = linear_interpolation(x, y);
scatter(x, y, label = "Data"); plot!(1:0.01:10, f_lin.(1:0.01:10), label = "Linear")
cubic_spline_interpolation()
f_cub = cubic_spline_interpolation(x, y);
scatter(x, y, label = "Data"); plot!(1:0.01:10, f_cub.(1:0.01:10), label = "Cubic")
constant_interpolation()
f_con = constant_interpolation(x, y);
scatter(x, y, label = "Data"); plot!(1:0.01:10, f_con.(1:0.01:10), label = "Constant")
全体のコード
using Interpolations, Plots
y = rand(10)
f = interpolate(y, BSpline(Linear()));
f(1.2)
f(0.1)
x = 1:10
f_lin = linear_interpolation(x, y);
scatter(x, y, label = "Data"); plot!(1:0.01:10, f_lin.(1:0.01:10), label = "Linear")
f_cub = cubic_spline_interpolation(x, y);
scatter(x, y, label = "Data"); plot!(1:0.01:10, f_cub.(1:0.01:10), label = "Cubic")
f_con = constant_interpolation(x, y);
scatter(x, y, label = "Data"); plot!(1:0.01:10, f_con.(1:0.01:10), label = "Constant")
環境
- OS: Windows
- julia: v1.8.5