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