Interpolasi Polinomial

1. Pengertian Interpolasi Polinomial

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.

2. Mengevaluasi Polinomial

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

3. Interpolasi Linier

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.