Fungsi linier yang dibuat untuk menghubungkan dua buah titik data terdekat akan menyediakan informasi sehingga titik-titik lain di antara kedua titik data tersebut dapat diperoleh menggunakan fungsi tersebut. Hal ini dengan asumsi bahwa hubungan antara variabel bebas dan terikatnya antara kedua titik data bersifat linier.
range and Link to heading
Ilustrasi paling sederhana untuk interpolasi adalah mencari fungsi
Terdapat dua titik data dan yang memenuhi
Substitusi Persamaan (2) ke Persamaan (1) akan memberikan
dan
Substitusi Persamaan (3) ke Persamaan (4) akan memberikan
Dengan demikian Persamaan (1) dapat dituliskan kembali menjadi
range and Link to heading
Rentang dalam Persamaan (6) dapat diperluas menjadi dan dengan
dan
sehingga dapat memberikan
atau
Titik data dalam Persamaan (2) perlu dimodifikasi menjadi
yang apabila disubstitusikan ke Persamaan (1) akan memberikan
dan
Dari Persamaan (12) dan (13) akan diperoleh
dan
range and Link to heading
Dengan menggunakan persamaan-persamaan sebelumnya dapat dituliskan bentuk yang umum, bila terdapat data dan , dapat diperoleh
dan
dengan fungsinya adalah
Perhatikan bahwa bila terdapat titik data, maka hanya akan terdapat fungsi interpolasi linier sepert yang diberikan dalam Persamaan (17).
an example Link to heading
Sebagai contoh dapat dimisalkan terdapat titik-titik data sebagai berikut.
Tabel 1. Titik data , dengan .
1 | 0 | 0 |
2 | 1 | 1 |
3 | 2 | 3 |
4 | 3 | 6 |
5 | 4 | 10 |
Dengan menggunakan Persamaan (15) dan (16) dapat diperoleh nilai-nilai dan sebagai berikut.
Tabel 2. Nilai-nilai dan untuk data pada Tabel 1.
Secara sederhana proses untuk memperoleh nilai-nilai dan pada Tabel 1 dapat mengikuti diagram alir berikut, yang merupakan ilustrasi umum dengan detil iterasi untuk setiap titik data tersiratkan dalam beberapa blok.
Gambar 1. Diagram alir untuk menghitung nilai-nilai dan dari titik data.
codes Link to heading
Nilai-nilai dan pada Tabel 2 dapat pula dihitung dengan menggunakan program berikut
x = [0, 1, 2, 3, 4]
y = [0, 1, 3, 6, 10]
N = min(len(x), len(y))
c0 = []
c1 = []
for i in range(N - 1):
c1i = (y[i+1] - y[i]) / (x[i+1] - x[i])
c0i = 0.5 * (y[i+1] + y[i]) - 0.5 * (x[i+1] + x[i]) * c1i
c0.append(c0i)
c1.append(c1i)
print("c0 =", c0)
print("c1 =", c1)
yang akan memberikan hasil
c0 = [0.0, -1.0, -3.0, -6.0]
c1 = [1.0, 2.0, 3.0, 4.0]
dengan contoh programnya tersedia di https://onecompiler.com/python/3zjzynwmr.
Selanjutnya adalah bagaimana menggunakan nilai-nilai dan untuk semua rentang data, yang dalam contoh di atas terdapat empat rentang data. Salah satu implementasinya adalah seperti dalam kode berikut.
import math
import matplotlib.pyplot as plt
xdata = [0, 1, 2, 3, 4]
ydata = [0, 1, 3, 6, 10]
c0 = [0.0, -1.0, -3.0, -6.0]
c1 = [1.0, 2.0, 3.0, 4.0]
def interp(x, xdata, c0, c1):
i = -1
for j in range(len(xdata) - 1):
if (xdata[j] <= x) and (x <= xdata[j+1]):
i = j
break
y = c0[i] + c1[i] * x
return y
N = 17
x = [i * 0.25 for i in range(N)]
y = [interp(i, xdata, c0, c1) for i in x]
plt.grid()
plt.xlabel("x")
plt.ylim([0, 4])
plt.ylabel("y")
plt.ylim([-1, 11])
plt.yticks([*range(11)], [*range(11)])
plt.plot(x, y, '.', xdata, ydata, "ro")
plt.show()
Hasil dari kode di atas, yang tersedia di http://tpcg.io/_OE0CH4, diberikan pada Gambar 2 di bawah ini.
Gambar 2. Hasil interpolasi linier untuk titik-titik data pada Tabel 1 yang terdiri dari titik-titik data dan titik-titik hasil interpolasi.
Perhatikan bahwa terdapat titik-titik lain yang bukan merupakan titik-titik data pad Gambar 2. Titik-titik data digambarkan dengan lingkaran berukuran lebih besar, sedangkan titik-titik hasil interpolasi linier di antara dua titik data berurutan digambarkan dengan lingkaran berukuran lebih kecil.
exercises Link to heading
- Perhatikan Gambar 1, tunjukkan bahwa interpolasi yang dihasilkan merupakan interpolasi linier pada setiap rentangnya. Setidaknya sampaikan argumen secara kualitatif dengan menggunakan gambar tersebut.
- Gunakan data lain untuk memeriksa apakah program yang diberikan tetap bekerja.