줄리아에서 수치해석적 인터폴레이션 하는 법
개요
줄리아에서는 수치해석적인 인터폴레이션을 위해 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