butiran

linear interpolation

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 ].

between two points

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.

![]({{ site.baseurl}}/assets/img/0/50/0501-a.png)
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$.

n points

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$.

example

Terdapat data beberapa titik seperti diberikan pada gambar berikut ini.

![]({{ site.baseurl}}/assets/img/0/50/0501-b.png)
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$.

![]({{ site.baseurl}}/assets/img/0/50/0501-c.png)
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 .

code

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 .

results

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}$
213.33
315.67
$\color{#88e}{4}$$\color{#88e}{18}$
514.33
610.67
$\color{#88e}{7}$$\color{#88e}{7}$
86.33
95.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.

![]({{ site.baseurl}}/assets/img/0/50/0501-d.png)
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.

exer

  1. Dengan menggunakan program 0501-lin-inter.py carilah nilai $y$ untuk $x = 3.5, 6.5, 9.5$. Tampilkan sampai tiga angka di belakang koma.
  2. Bagaimana dengan cepat mencari nilai-nilai yang diminta pada soal sebelumnya tanpa melakukan kompilasi programnya?

note

  1. Techopedia, “Linear Interpolation”, Technopedia, 29 Jun 2017, url https://www.techopedia.com/definition/20366/linear-interpolation [20220221].
  2. Wikipedia contributors, “Linear interpolation”, Wikipedia, The Free Encyclopedia, 7 January 2022, 14:58 UTC, url https://en.wikipedia.org/w/index.php?oldid=1064278127 [20220221].
  3. David S. Fulford, “Linear Interpolation In Python a Single Line of Code”, Towards Data Science, 29 Jun 2020, url https://towardsdatascience.com/linear-interpolation-in-python-a-single-line-of-code-25ab83b764f9 [20220221].
  4. “Linear Interpolation Calculator”, EasyCalculation.com, Free Online Calculator and Converter, url https://www.easycalculation.com/analytical/linear-interpolation.php [20220221].
  5. Jimmy Raymond, “Linear Interpolation Equation Calculator Engineering - Interpolator Formula”, AJ Design Software, 2015, url https://www.ajdesigner.com/phpinterpolation/linear_interpolation_equation.php [20220221].
  6. Admin, “Similar Triangles”, BYJU’S, 10 Mar 2021, url https://byjus.com/maths/similar-triangles/ [20220221].
  7. Eric W. Weisstein, “Floor Function”, from MathWorld–A Wolfram Web Resource, Wolfram Research, Inc., 2022, url https://mathworld.wolfram.com/FloorFunction.html [20220221].

comments

 

{% comment %} {% endcomment %}

{% comment %} {% endcomment %}