Interpolasi dengan menggunakan Lagrange Interpolating Polynomials

Interpolasi adalah permasalahan pencarian titik-titik di antara sejumlah diskret titik data yang diketahui. Interpolasi dapat diterapkan dalam ranah 2 dimensi maupun 3 dimensi. Dalam ranah 2 dimensi, interpolasi dapat menghasilkan kurva perkiraan yang mengkaitkan antara dua besaran fisis, atau bisa juga nilai medan skalar pada setiap titik pada bidang datar. Dalam dunia pengolahan citra seperti di dunia fisika medis, nilai medan skalar yang dimaksud bisa berupa nilai skala keabuan dari suatu citra. Dalam ranah 3 dimensi, interpolasi dapat menghasilkan nilai medan skalar pada setiap titik dalam ruang. Contoh penggunaan dalam ranah 3 dimensi seperti yang dilakukan di artikel ini. Dalam artikel tersebut, dicari pola persebaran radiasi sinar X di suatu ruang general X-ray dengan menggunakan metode interpolasi berdasarkan data radiasi di beberapa titik dalam ruang tersebut. 

Salah satu metode interpolasi dalam ranah 2 dimensi yang dapat digunakan untuk menghasilkan polinomial pendekatan untuk sejumlah diskret data adalah metode polinomial interpolasi Lagrange (PIL). Andaikan kita memilik sejumlah data berikut

.

Maka PIL orde yang nilainya setiap adalah , yakni , diberikan oleh rumus berikut

dengan

 .

Berikut ini akan dicontohkan perhitungan PIL dengan menggunakan scilab. Kode scilabnya diberikan di bawah ini (https://github.com/ardhi175/Metode-Numerik)

clc
function HitungLnk=Lnk(x, n, i, datax)
    // indeks datax = i 
    pembilangLnk=1
    penyebutLnk=1
    for j=1:n+1
        if j<>i then
            pembilangLnk=pembilangLnk*(x-datax(j))
            penyebutLnk=penyebutLnk*(datax(i)-datax(j))
        end
    end
    HitungLnk=pembilangLnk/penyebutLnk
endfunction

maksimaldata=100
datax=zeros(1,maksimaldata)
datay=zeros(1,maksimaldata)
//jumlah data = n+1
jumlahdata=input("Berapa jumlah data (maksimal 100 data)?")
n=jumlahdata-1
printf("Anda akan mencari polinomial order %i dari sejumlah %i data\n",n,jumlahdata)
for i=1:jumlahdata
    printf("\n Masukkan data ke-%i\n",i-1)
    datax(i)=input("data x =")
    datay(i)=input("data y =")
end
xcari=input("Berapa nilai x yang ingin dicari nilai polinomialnya?")
Pn=0
for i=1:jumlahdata
    Pn=Pn+datay(i)*Lnk(xcari,n,i,datax)
end
printf("P_%i (%g) = %g\n",n,xcari,Pn)

Pada kode di atas dibuat fungsi Lnk untuk menghitung , untuk setiap . Program akan meminta berapa jumlah data yang dimiliki oleh pengguna dan nilainya disimpan dalam variabel jumlahdata. Nilai pada variabel jumlahdata ini akan digunakan sebagai batas iterasi yang diperlukan untuk meminta masukan data-data yang diketahui. Selain itu, banyaknya jumlah data yang diberikan oleh pengguna juga diperlukan untuk menentukan batas iterasi ketika menghitung semua dan terakhir untuk menghitung . Data yang diketahui akan disimpan dalam array datax, sementara data yang bersesuaian akan disimpan dalam array datay.

Pada kode program tersebut telah ditentukan batas maksimal data yang diinput sebesar 100. Namun demikian pengguna dapat menggantinya menjadi nilai yang lebih tinggi ataupun lebih rendah, asalkan jumlah data yang diinputkan oleh pengguna tidak melebih batas maksimal data tersebut. Untuk lebih memahami penjelasan terkait polinomial interpolasi lagrange dan juga perhitungannya dengan menggunakan scilab, silahkan simak video pada tautan ini.

Comments