Interpolasi linier merupakan salah satu jenis interpolasi, yang melibatkan pembangkitan nilai baru berdasarkan himpunan nilai-nilai yang ada, yang dicapai dengan membuat secara geometri sebuah garis lurus antara dua titik berurutan pada sebuah grafik atau bidang [1]. Interpolasi dari himpunan titik-titik data didefinisikan sebagai rangkaian interpolan linier antar setiap pasang titik-titik data, yang menghasilkan kurva kontinu akan tetapi dengan turunan diskontinu [2]. Dalam bahasa pemrograman Python dengan menggunakan numpy
interpolasi linier dapat dilakukan dengan hanya satu baris kode [3]. Terdapat banyak kalkulator interpolasi linier yang telah tersedia secara daring [4], yang juga dilengkapi rumusnya [5].
Terdapat dua pasang data yaitu $(x_1, y_1)$ dan $(x_2, y_2)$, ingin dicari nilai $y$ untuk suatu nilai $x$ di mana $x_1 < x < x_2$. Hal ini dapat dilakukan dengan memperhatikan ilustrasi berikut ini.
Gambar 1. Hubungan titik-titik data $(x_1, y_1)$ dan $(x_2, y_2)$ dengan nilai yang ingin diperoleh $y$ bila diketahui $x$.
Dari Gambar 1, melalui hubungan segitiga sebangun [6], dapat diperoleh perumusan berikut ini
\begin{equation}\label{eqn:linear-interpolation-two-points} \begin{array}{rcl} \displaystyle \frac{y - y_1}{y_2 - y_1} & = & \displaystyle \frac{x - x_1}{x_2 - x_1} \newline y - y_1 & = & \displaystyle \left( \frac{y_2 - y_1}{x_2 - x_1} \right) (x - x_1) \newline y & = & \displaystyle \left( \frac{y_2 - y_1}{x_2 - x_1} \right) (x - x_1) + y_1 \newline & = & \displaystyle \left( \frac{y_2 - y_1}{x_2 - x_1} \right) x + \left[ y_1 - \left( \frac{y_2 - y_1}{x_2 - x_1} \right) x_1 \right] \newline f(x) & = & c_1 x + c_0, \end{array} \end{equation}
dengan
\begin{equation}\label{eqn:linear-interpolation-two-points-c0} c_0 = y_1 - \left( \frac{y_2 - y_1}{x_2 - x_1} \right) x_1 \end{equation}
dan
\begin{equation}\label{eqn:linear-interpolation-two-points-c1} c_1 = \frac{y_2 - y_1}{x_2 - x_1}. \end{equation}
Persamaan \eqref{eqn:linear-interpolation-two-points-c0} dan \eqref{eqn:linear-interpolation-two-points-c1} dapat digeneralisasi sehingga berlaku untuk $N$ pasang data dengan $N > 2$.
Terdapat $N$ titik data dengan $N > 2$ dalam bentuk $(x_1, x_2)$, .., $(x_N, x_N)$. Dalam interpolasi linier di mana suatu titik $x$ pasti berada pada rentang $x_i \le x \le x_{i+1}$, perlu ditentukan nilai $i$, dengan $1 < i < N-1$. Bila diasumsikan bahwa rentang antara dua titik adalah sama
\begin{equation}\label{eqn:points-interval} L = x_{i+1} - x_i, \end{equation}
salah satu cara untuk menentukannya $i$ adalah dengan menggunakan
\begin{equation}\label{eqn:interval} i = 1 + \left\lfloor \frac{x - x_1}{L} \right\rfloor. \end{equation}
Kurung $\lfloor \ \rfloor$ merupakan fungsi floor [7]. Setelah mendapatkan $i$ untuk suatu $x$ dari Persamaan \eqref{eqn:interval}, maka digunakan Persamaan \eqref{eqn:linear-interpolation-two-points}, \eqref{eqn:linear-interpolation-two-points-c0}, dan \eqref{eqn:linear-interpolation-two-points-c1} untuk mendapatkan nilai $y$.
Terdapat data beberapa titik seperti diberikan pada gambar berikut ini.
Gambar 2. Titik-titik data $(1, 11)$, $(4, 18)$, $(7, 7)$, dan $(10, 5)$.
Akan dilakukan interpolasi linier pada empat titik data yang diberikan pada Gambar 2 sehingga dapat dicari nilai $y$ pada sembarang $x$ untuk $1 \le x \le 10$.
Gambar 3. Garis-garis fungsi interpolasi linier untuk titik-titik data $(1, 11)$, $(4, 18)$, $(7, 7)$, dan $(10, 5)$.
Hasil interpolasi linier berupa rangkaian garis-garis lurus antar dua titik terdekat dari Gambar 2 diberikan pada Gambar 3.
Terdapat program sederhana menggunakan bahasa pemrograman Python berikut ini
# 0501-lin-inter.py
# Linear interpolation
# Sparisoma Viridi | https://github.com/dudung
# 20220221 Create this example.
# import package
import numpy as np
# define data points
x = [1, 4, 7, 10]
y = [11, 18, 7, 5]
# create coefficients c0 and c1 with zero values
c0 = [0, 0, 0]
c1 = [0, 0, 0]
# calculate c0 and c1
N = len(c0)
for i in range(N):
c1[i] = (y[i+1] - y[i]) / (x[i+1] - x[i])
c0[i] = y[i] - c1[i] * x[i]
# define linear interpolation function f(x)
def f(xx):
i = int(np.floor((xx - x[0])/(x[1] - x[0])))
if i > N - 1:
i = i - 1
y = c0[i] + c1[i] * xx
return y
# use the function
for xx in range(1, 11):
yy = f(xx)
print(xx, yy)
yang akan memberikan hasil berikut
==== RESTART: 0501-lin-inter.py ====
1 11.0
2 13.333333333333332
3 15.666666666666666
4 18.0
5 14.333333333333332
6 10.666666666666664
7 7.0
8 6.333333333333333
9 5.666666666666666
10 5.0
saat dijalankan. Program tersebut dapat dijalan secara daring di OneCompiler 3xu2hf4vv.
Hasil keluaran program dapat disajikan dalam bentuk tabel berikut ini.
Tabel 1 Hasil keluaran program 0501-lin-inter.py
.
$x$ | $y$ |
---|---|
$\color{#88e}{1}$ | $\color{#88e}{11}$ |
2 | 13.33 |
3 | 15.67 |
$\color{#88e}{4}$ | $\color{#88e}{18}$ |
5 | 14.33 |
6 | 10.67 |
$\color{#88e}{7}$ | $\color{#88e}{7}$ |
8 | 6.33 |
9 | 5.67 |
$\color{#88e}{10}$ | $\color{#88e}{5}$ |
Perhatikan bahwa nilai-nilai telah dibulatkan sampai dua angka di belakang koma pada Tabel 1 untuk yang bukan bilangan bulat. Nilai-nilai berwarna ($\color{#88e}\blacksquare$) adalah titik-titik data, sedangkan yang lainnnya merupakan hasil interpolasi.
Gambar 4. Garis-garis fungsi interpolasi linier dan titik-titik hasil interpolasi ($\circ$) serta titik-titik datanya semula ($\color{#88e}\blacksquare$).
Perhatikan bahwa pada Gambar 4 telah terdapat titik-titik di pada garis-garis hasil interpolasi linier, yang semula hanya menghubungkan titik-titik data pada Gambar 3 dan belum ada titik-titik lain di antara titik-titik data.
0501-lin-inter.py
carilah nilai $y$ untuk $x = 3.5, 6.5, 9.5$. Tampilkan sampai tiga angka di belakang koma.— Sparisoma Viridi (@6unpnp) February 21, 2022