logo

ジュリアでの数値解析的補間 📂ジュリア

ジュリアでの数値解析的補間

概要

ジュリアでは、数値解析的な補間のために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")

plot_1.svg

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")

plot_2.svg

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")

plot_3.svg

全体のコード

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