Interpolasi
Contents
3. Interpolasi#
Indonesia menyelenggarakan sensus penduduk setiap 10 tahun sekali. Misalkan kita ingin mengetahui jumlah penduduk di antara rentang tersebut. Salah satu caranya adalah mencari suatu polynomial yang melewati titik-titik data tersebut.
3.1. Contoh sederhana#
Diberikan suatu titik (2,5) dan (3,8). Tentukan persamaan garis yang melalui kedua titik tersebut.
Jawaban
dan kita punya \(t_1 = 2\), \(t_2 = 3\), \(y_1 = 5\), dan \(y_2 = 8\). Kemudian terapkan ke dalam maka persamaan garisnya adalah
Cara di atas memanfaatkan gradien sebagai acuan kemiringan garis yang melalui dua titik. Lalu bagaimana jika kita ingin mengetahui fungsi apa yang dapat melalui lebih dari dua titik.
Definisi: Interpolasi Polynomial
Diberikan \((n+1)\) titik \((x_0, y_0), (x_1, y_1), \cdots, (x_n, y_n)\), dimana \(x_i\) seluruhnya berbeda, masalah interpolasi polynomial adalah mencari suatu polynomial derajat \(n\), \(P_n(x) = a_0 + a_1 x + \cdots + a_n x^n\), sedemikian sehingga polynomial ini akan menginterpolasi titik data \(\lbrace (x_i, y_i) \rbrace_{i=0}^{n}\) atau dapat ditulis
3.2. Interpolasi sebagai sistem linear#
Diberikan data \((x_i, y_i)\) untuk \(i = 0, 1, 2, \cdots, n\). Kita panggil suatu polynomial
sedemikian sehingga
Dengan kata lain, setiap \(y_i\) diwakili oleh suatu fungsi \(P(x_i)\). Jadi, dengan mensubtitusi ke dalam maka akan membentuk suatu sistem persamaan linear dengan koefisien \(a_0, \cdots, a_n\):
atau dapat ditulis ke dalam persamaan matriks-vektor
atau \(V\textbf{a} = \textbf{y}\), dimana \(V\) disebut juga dengan matriks Vandermonde.
3.3. Contoh 1#
\(x_i\) |
\(y_i\) |
---|---|
0 |
1 |
1 |
0 |
2/3 |
0.5 |
Sistem persamaan di atas dapat dibentuk ke dalam bentuk persamaan matriks
using Plots
using Polynomials
x = [0, 1, 2/3]
y = [1, 0, 0.5]
scatter(x, y, label="titik data",
xlabel="x",
ylabel="y"
)
V = [x[i]^j for i=1:length(x), j=0:length(x)-1]
V
3×3 Matrix{Float64}:
1.0 0.0 0.0
1.0 1.0 1.0
1.0 0.666667 0.444444
a = V \ y
a
3-element Vector{Float64}:
1.0
-0.2500000000000001
-0.7499999999999999
p = Polynomial(a)
xx = range(0, 1, length=100)
yy = p.(xx)
foreach(println, yy[1:length(y)])
1.0
0.997398224670952
0.9946434037343128
plot!(xx, yy, label="interpolant")
3.4. Contoh 2#
Tahun |
Jumlah |
---|---|
1980 |
79.2 |
2000 |
223.6 |
2010 |
260.2 |
2015 |
278.2 |
3.4.1. Plot data#
tahun = [1980, 2000, 2010, 2015]
populasi = [79.2, 223.6, 260.2, 278.2]
t = tahun .- 1980
y = populasi;
scatter(t, y, label="aktual",
xlabel="sejak tahun 1980",
ylabel="jumlah penduduk (juta)",
title="Populasi penduduk di Indonesia"
)
V = [t[i]^j for i=1:4, j=0:3]
4×4 Matrix{Int64}:
1 0 0 0
1 20 400 8000
1 30 900 27000
1 35 1225 42875
c = V \ y
4-element Vector{Float64}:
79.2
11.55904761904761
-0.2824761904761897
0.003276190476190462
y - V*c
4-element Vector{Float64}:
0.0
0.0
0.0
0.0
p = Polynomial(c)
p(2000-1980)
223.6
tt = range(0, 35, length=100)
yy = p.(tt)
foreach(println, yy[1:4])
79.2
83.25137083174018
87.23299841938756
91.14575136117836
plot!(tt, yy, label="interpolant")