Interpolasi merupakan teknik untuk mencari nilai suatu variabel yang hilang pada rentang data yang diketahui. Interpolasi polinomial merupakan teknik interpolasi dengan mengasumsikan pola data yang kita miliki mengikuti polinomial baik berderajat satu(linier) maupun berderajat tinggi. Interpolasi dengan metode ini dilakukan dengan terlebih dahulu membentuk persamaan polinomial. Persamaan polinomial yang terbentuk selanjutnya digunakan untuk melakukan interpolasi dari nilai yang diketahui atau ekstrapolasi(prediksi) dari nilai diluar rentang data yang diketahui.
Kita akan mempelajari teknik untuk substitusi nilai x pada persamaan polinomial untuk memperoleh nilai y. Terdapat berbagai pendekatan dalam melakukan proses tersebut, mulai dari metode naive maupun metode Horner.
Untuk memahim metode-metode evaluasi polinomial yang telah disebutkan tersebut, secara umum persamaan polinomial disajikan pada persamaan
dimana a merupakan koefisien polinomial, x merupakan variabel, dan n merupakan indeks dan pangkat polinomial.
Pada R kita dapat menuliskan sebuah fungsi untuk
melakukan evaluasi polinomial menggunakan metode naive tersebut. Pada
fungsi tersebut, koefisien polinomial akan disimpan kedalam sebuah
vektor dengan urutan pengisian mulai dari koefisien dengan pangkat x
terendah ke tertinggi.
naive_poly <- function(x, coeff){
n <- length(x)
y <- rep(0, n)
for(i in 1:length(coeff)){
y <- y + coeff[i]*(x^(i-1))
}
return(y)
}
Contoh 1 : Hitung nilai y pada persamaan f(x)= x4+3x2-19x+30, jika diketahui nilai x adalah -1,0, dan 1!
-> Untuk dapat menghitung nilai y menggunakan fungsi
naive_poly() pada persamaan tersebut dengan nilai x yang
diketahui, kita perlu merubah koefisien persamaan tersebut dan nilai x
yang diketahui menjadi vektor:
x <- c(-1,0,1)
coeff <- c(30,-19,-15,3,1)
Masukkan vektor-vektor yang telah terbentuk tersebut kedalam fungsi
naive_poly().
naive_poly(x,coeff)
## [1] 32 30 0
Berdasarkan hasil perhitungan diperoleh nilai y masing-masing sebesar 32,30, dan 0. Pembaca dapat mengeceknya sendiri hasil perhitungan tersebut menggunakan cara manual.
Kita dapat meningkatkan efiesiensi proses perhitungan pada fungsi
naive_poly() . Contoh, setiap kali kita melakukan loop
untuk menghitung nilai y pada polinomual, kita dapat memperoleh
eksponensial dari x. Namun untuk setiap koefisien ai, nilai eksponensial
yang terkait xi merupakan seri produk.
untuk xi terdapat sebanyak i koefisien x dikalikan bersamaan. Namun, untuk setiap xi-1 terdapat lebih sedikit 1 perkalian dibanding koefisien x dengan pangkat yang lebih besar dan seterusnya.
Berdasarkan ilustrasi tersebut, kita dapat membentuk fungsi
better_poly() sebagai perbaikan dari fungsi
naive_poly(). Berikut adalah sintaks yang digunakan.
better_poly <- function(x, coeff){
n <- length(x)
y <- rep(0, n)
cached_x <- 1
for(i in 1:length(coeff)){
y <- y + coeff[i]*cached_x
cached_x <- cached_x * x
}
return(y)
}
Contoh 2 -> Hitung nilai y pada persamaan yang disajikan pada
contoh 1 menggunakan nilai x yang telah diketahui pada soal tersebut
menggunakan fungsi better_poly()?
jawab :
better_poly(x, coeff)
## [1] 32 30 0
Sejauh ini kita telah membentuk 2 fungsi yaitu
naive_poly() dan better_poly(). Kedua fungsi
tersebut memiliki perbedaan proses menghitung yang mempengaruhi
efisiensinya masing-masing. sebagai contoh jika diberikan polinomial
berderajat 10, fungsi naive_poly()akan mengerjakan
perkalian dalam proses loop sebanyak 55 kali, sedangkan fungsi
better_poly() akan melakukannya sebanyak 20 kali (2n
perkalian).
Misalkan kita memiliki 3 buah data dengan dua buah variabel kita misalkan variabel x dan variabel y. Pada salah satu data terdapat data yang hilang pada. Agar ketiga data tersebut tetap dapat digunakan dalam iterasi diperlukan interpolasi untuk "menebak" nilai dari data yang hilang.
Interpolasi linier dilakukan dengan terlebih dahulu membentuk fungsi linier. Dengan kata lain kita perlu mencari nilai slope m dan intercept b. Nilai m dihitung sebagai rasio selisih jarak dua titik pada sumbu y dan sumbu x yang dapat dituliskan melalui Persamaan
(8.1) Nilai intercept
(titik potong pada sumbu y) dihitung menggunakan persamaan
b=y2 - mx2 (8.2)
1. Tentukan dua buah titik (x,y) sebagai dasar pembentukan persaman linier
2. Hitung m menggunakan Persamaan (8.1)
3. Hitung b menggunakan Persamaan (8.2)
4. Definiskan fungsi linier berdasarkan nilai m dan b
5. Hitung y dengan cara substitusi nilai x pada persamaan linier untuk melakukan interpolasi atau ekstrapolasi nilai y yang ingin dicari.
Algoritma poin 1 sampai 4 tersebut, kita dapat membentuk fungsi pembentuk persamaan linier dari 2 titik yang diketahui. Fungsi tersebut disajikan pada sintaks berikut:
linear_inter <- function(x, y){
m <- (y[2]-y[1]) / (x[2]-x[1])
b <- y[2] - m*x[2]
return(c(b, m))
}
Contoh 3 -> Diketahui kordinat 2 buah titik yaitu (0, -1) dan (2,3). Jika diketahui titik ketiga memiliki kordinat sumbu x sebesar 1. Lakukan interpolasi untuk menentukan koordinat sumbu y titik ketiga tersebut!
Jawab :
Berdasarkan data-data yang terdapat pada soal tersebut, kita dapat menghitung nilai m dan b. Nilai m dapat dihitung sebagai berikut :
Dengan menggunakan nilai m tersebut kita dapat menghitung nilai b
Berdasarkan hasil perhitungan diperoleh persamaan linear yang terbentuk adalah sebagai berikut:
Berdasarkan persamaan linear tersebut nilai y dapat dihitung.
Kita dapat pula membentuk persamaan linier menggunakan fungsi
linear_inter(). Berikut adalah sintaks yang digunakan :
x <- c(0,2)
y <- c(-1,3)
(coeff <- linear_inter(x,y))
## [1] -1 2
Hasil Interpolasi yang diperoleh dapat dikatakan sesuai dengan lokasi kedua titik data yang ditunjukkan pada gambar diatas. Berdasarkan hal tersebut, kita dapat yakin bahwa hasil interpolasi yang telah kita lakukan telah sesuai.