Komputasi Numerik
KN - 5
INTERPOLASI
NPM : 140310220001
Waktu : 13.00-16.00
LABORATORIUM KOMPUTASI
DEPARTEMEN FISIKA
UNIVERSITAS PADJADJARAN
2023
LEMBAR PENGESAHAN
KN - 5
INTERPOLASI
Nama : MUHAMMAD RAYHAN A.A
NPM : 140310220001
Mahasiswa diharapkan mampu menentukan solusi dari permasalahan interpolasi dengan menggunakan metode Polinomial, Lagrange, dan
Newton Forward Difference, serta mampu membedakan penyelesaian masalah dengan metode interpolasi dan ekstrapolasi.
BAB II
PERCCOBAAN
Pada percobaan diberikan nilai x adalah sebagai berikut: 0; 0,6; 0,9 yang akan digunakan untuk mencari nilai y dari 0,45 dengan fungsi yang
telah diberikan
1. Sin(x)
#interpolasi polinomial
import numpy as np
n = int(input('masukkan orde : '))
X = []
x = []
Y = []
A = [0]*(n+1)
xb = []
for i in range(n+1):
pangkat = 0
x1 = float(input('masukkan nilai x = '))
y1 = np.sin(x1)
for j in range(n+1):
hasil = x1**pangkat
pangkat += 1
x.append(hasil)
X.append(x)
Y.append(y1)
x = []
e = 10**-5
E = 1
while E > e:
for i in range(n+1):
sigma = 0
for j in range(0,i):
sigma += X[i][j] * xb[j]
for j in range(i+1,n+1):
sigma += X[i][j] * A[j]
xn = (1/X[i][i])*(Y[i]-sigma)
xb.append(xn)
E = abs(max(A)-max(xb))
A = xb
xb = []
Untuk mencari nilai a dari fungsi ini dapat digunakan beberapa cara numerik seperti eliminasi Gauss, iterasi Jacobi ataupun iterasi Gauss-
Seidel, pada program ini yang digunakan adalah Gauss-Seidel agar iterasi berjalan dengan cepat. Setelah nilai dari a didapat, maka akan
dimasukkan ke persamaan Pn(x) diatas untuk mendapatkan nilai y dari x yang akan diinterpolasi
2. ln(2x+3)/2x^2
#interpolasi polinomial
import numpy as np
n = int(input('masukkan orde : '))
X = []
x = []
Y = []
A = [0]*(n+1)
xb = []
for i in range(n+1):
pangkat = 0
x1 = float(input('masukkan nilai x = '))
y1 = np.log(2*x1+3)/(2*x1**2)
for j in range(n+1):
hasil = x1**pangkat
pangkat += 1
x.append(hasil)
X.append(x)
Y.append(y1)
x = []
e = 10**-5
E = 1
while E > e:
for i in range(n+1):
sigma = 0
for j in range(0,i):
sigma += X[i][j] * xb[j]
for j in range(i+1,n+1):
sigma += X[i][j] * A[j]
xn = (1/X[i][i])*(Y[i]-sigma)
xb.append(xn)
E = abs(max(A)-max(xb))
A = xb
xb = []
Program diatas adalah penerapan interpolasi polinomial pada python untuk mencari nilai y dari x = 0.45 dengan fungsi:
2
ln ( 2 x+ 3 ) /2 x
. Pada bagian awal program, beberapa variabel harus di inisiasi terlebih dahulu dalam bentuk list kosong yang nantinya akan diisi oleh nilai x
dan nilai y yang akan diinterpolasi. Untuk memasukkan nilai- nilai tadi diperlukan perulangan agar lebih mudah dibuat dan dapat
menyesuaikan dengan orde yang ditentukan user, didalam perulangan ini user perlu memasukkan nilai nilai x yang diketahui dan nilai y nya
akan dihitung otomatis menggunakan library numpy dengan memanfaatkan nilai x yang tadi dimasukkan, selaijn itu pula pada perulangan ini
hasil yang keluar adalah matriks vandermonde yang secara visual berbentuk seperti berikut
0 1 2
x x x
x0 x1 x2
0 1 2
x x x
Sehingga diperlukan suatu variabel yang berfungsi sebagai pangkat dan akan terus bertambah pada saat iterasi berjalan dan akan di reset pada
saat iterasi akan berakhir kemudian berlanjut ke iterasi berikutnya. Hasil dari matriks vandermonde dan nilai y yang didapat tersebut
disimpan kedalam matriks yang telah diinisiasi sebelumnya menggunakan sintaks append. Inti dari pemograman ini adalah mencari nilai dari
koefisien dari fungsi yang berbentuk seperti berikut
Untuk mencari nilai a dari fungsi ini dapat digunakan beberapa cara numerik seperti eliminasi Gauss, iterasi Jacobi ataupun iterasi Gauss-
Seidel, pada program ini yang digunakan adalah Gauss-Seidel agar iterasi berjalan dengan cepat. Setelah nilai dari a didapat, maka akan
dimasukkan ke persamaan Pn(x) diatas untuk mendapatkan nilai y dari x yang akan diinterpolasi
Pada output didapat hasil ”nan” hal ini dapat terjadi karena terdapat input dari user bernilai nol, letak masalahnya terdapat pada ’y1 =
np.log(2*x1+3)/(2*x1**2)’ sehingga menjadi nilai yang tak terdefinisi karena adanya pembagian dengan angka nol.
3. E^x+sqrt(2x+1)
#interpolasi polinomial
import numpy as np
n = int(input('masukkan orde : '))
X = []
x = []
Y = []
A = [0]*(n+1)
xb = []
for i in range(n+1):
pangkat = 0
x1 = float(input('masukkan nilai x = '))
y1 = np.exp(x1) + np.sqrt(2*x1 + 1)
for j in range(n+1):
hasil = x1**pangkat
pangkat += 1
x.append(hasil)
X.append(x)
Y.append(y1)
x = []
e = 10**-5
E = 1
while E > e:
for i in range(n+1):
sigma = 0
for j in range(0,i):
sigma += X[i][j] * xb[j]
for j in range(i+1,n+1):
sigma += X[i][j] * A[j]
xn = (1/X[i][i])*(Y[i]-sigma)
xb.append(xn)
E = abs(max(A)-max(xb))
A = xb
xb = []
e + √ 2 x +1
x
Pada bagian awal program, beberapa variabel harus di inisiasi terlebih dahulu dalam bentuk list kosong yang nantinya akan diisi oleh nilai x
dan nilai y yang akan diinterpolasi. Untuk memasukkan nilai- nilai tadi diperlukan perulangan agar lebih mudah dibuat dan dapat
menyesuaikan dengan orde yang ditentukan user, didalam perulangan ini user perlu memasukkan nilai nilai x yang diketahui dan nilai y nya
akan dihitung otomatis menggunakan library numpy dengan memanfaatkan nilai x yang tadi dimasukkan, selaijn itu pula pada perulangan ini
hasil yang keluar adalah matriks vandermonde yang secara visual berbentuk seperti berikut
0 1 2
x x x
x0 x1 x2
0 1 2
x x x
Sehingga diperlukan suatu variabel yang berfungsi sebagai pangkat dan akan terus bertambah pada saat iterasi berjalan dan akan di reset pada
saat iterasi akan berakhir kemudian berlanjut ke iterasi berikutnya. Hasil dari matriks vandermonde dan nilai y yang didapat tersebut
disimpan kedalam matriks yang telah diinisiasi sebelumnya menggunakan sintaks append. Inti dari pemograman ini adalah mencari nilai dari
koefisien dari fungsi yang berbentuk seperti berikut
Untuk mencari nilai a dari fungsi ini dapat digunakan beberapa cara numerik seperti eliminasi Gauss, iterasi Jacobi ataupun iterasi Gauss-
Seidel, pada program ini yang digunakan adalah Gauss-Seidel agar iterasi berjalan dengan cepat. Setelah nilai dari a didapat, maka akan
dimasukkan ke persamaan Pn(x) diatas untuk mendapatkan nilai y dari x yang akan diinterpolasi
4. 1/(1+16x^2)
#interpolasi polinomial
import numpy as np
n = int(input('masukkan orde : '))
X = []
x = []
Y = []
A = [0]*(n+1)
xb = []
for i in range(n+1):
pangkat = 0
x1 = float(input('masukkan nilai x = '))
y1 = 1/(1+16*x1**2)
for j in range(n+1):
hasil = x1**pangkat
pangkat += 1
x.append(hasil)
X.append(x)
Y.append(y1)
x = []
e = 10**-5
E = 1
while E > e:
for i in range(n+1):
sigma = 0
for j in range(0,i):
sigma += X[i][j] * xb[j]
for j in range(i+1,n+1):
sigma += X[i][j] * A[j]
xn = (1/X[i][i])*(Y[i]-sigma)
xb.append(xn)
E = abs(max(A)-max(xb))
A = xb
xb = []
Untuk mencari nilai a dari fungsi ini dapat digunakan beberapa cara numerik seperti eliminasi Gauss, iterasi Jacobi ataupun iterasi Gauss-
Seidel, pada program ini yang digunakan adalah Gauss-Seidel agar iterasi berjalan dengan cepat. Setelah nilai dari a didapat, maka akan
dimasukkan ke persamaan Pn(x) diatas untuk mendapatkan nilai y dari x yang akan diinterpolasi
5. Interpolasi Lagrange derajat satu, dua dan tiga untuk memprediksi populasi daerah “X” sesuai dengan Tabel 5.1 pada tahun 1945,
for i in range(1,n+2):
x.append(float(input('masukkan tahun : ')))
for i in range(len(x)):
h = float(input('masukkan populasi : '))
y.append(h)
for i in range(0,n+1):
f.append(1)
for j in range(0,n+1):
if j == i:
continue
f[i] *= (x_cari-x[j])/(x[i]-x[j])
Y += f[i]*y[i]
Tahun 1945
Tahun 1955
Tahun 1965
Tahun 1975
Tahun 1985
Tahun 1995
\Tahun 2005
Program diatas merupakan metode interpolasi Lagrange yang digunakan untuk mencari hubungan antar titik di suatu data tabel. Interpolasi ini
dapat dilakukan untuk beberapa orde seperti orde 1(linear), 2(kuadratik), dan 3(kubik). Interpolasi ini dapat dihitung menggunakan rumus:
Dimana:
Untuk membuat program ini, user perlu menginput berapa orde dari interpolasi yang diperlukan dan nilai tahun yang akan dicari datanya,
kemudian menginisiasi beberapa variabel berupa list kosong sebagai tempat untuk menyimpan data hasil perhitungan serta membuat suatu
variabel yang bernilai nol untuk penjumlahan pada saat iterasi.
Pada paris berikutnya terdapat perulangan yang digunakan untuk menginput tahun dan data penduduk di tahun tersebut, banyaknya
iterasi/perulangan bergantung pada orde yang diinputkan.
Iterasi dari interpolasi akan berjalan ketika nilai 1 dimasukkan ke list f dan memulai iterasi bersarang menggunakan iterator i dan j
didalamnya, pada iterasi j diberikan syarat bahwa i tidak boleh sama dengan j sehingga harus dilewat menggunakan sintaks continue,
kemudian sistem akan menghitung menggunakan rumus:
f[i] *= (x_cari-x[j])/(x[i]-x[j])
Hal ini dikarenakan nilai pada f[i] sudah diisi dengan 1, sehingga tinggal dikalikan dengan hasil dari perhitungan dari rumus diatas. Keluar
dari iterasi j, hasil perhiyungan akan sikalikan dengan data populasi penduduk dan dijumlahkan ke Y yang memiliki nilai nol dan akan terus
dijumlahkan sesuai dengan ordenya
BAB III
TUGAS AKHIR
import math as mt
def faktorial(n):
if n == 0:
return 1
elif n == 1:
return 1
elif n >= 1:
return n*faktorial(n-1)
for i in range(0,o+1):
x1 = float(input('masukkan x[%i] : ' %(i)))
x.append(x1)
y.append(mt.sin(x1))
h = x[1] - x[0]
p = (x_cari - x[0])/h
if o == 1:
for i in range(o):
for j in range(o):
delt1 = y[j+1] - y[j]
delta1.append(delt1)
delt1 = 0
l = p
d = 0
y_cari = y[0] + p*delta1[0]
elif o == 2:
for i in range(o-1):
for j in range(o):
delt1 = y[j+1] - y[j]
delta1.append(delt1)
delt1 = 0
for j in range(o-1):
delt2 = delta1[j+1] - delta1[j]
delta2.append(delt2)
l = p
d = 0
y_cari = y[0] + p*delta1[0]
for i in range(o-1):
for j in range(i):
l *= (p-j+1)
d += l
y_cari += (d*delta2[i])/(faktorial(i+1))
d = 0
BAB IV
PENUTUP
Kesimpulan
Metode polinomial adalah Metode polinomial adalah metode numerik yang digunakan untuk memperkirakan fungsi dengan menggunakan
polinomial yang cocok dengan titik-titik data yang sudah diketahui. Tujuannya adalah untuk memperkirakan nilai fungsi pada titik-titik yang
tidak diketahui berdasarkan polinomial yang dibentuk dari titik-titik data yang sudah diketahui.Metode polinomial dapat digunakan dengan
polinomial orde yang berbeda-beda, seperti polinomial orde satu (garis lurus), polinomial orde dua (parabola), atau polinomial orde yang lebih
tinggi. Pada programnya, metode ini memanfaatkan matriks vandermonde, yaitu matriks persegi yang dibentuk dari titik-titik data pada
sumbu x dan pangkat-pangkat dari x dan iterasi Jacobi atau Gauss-Seidel dikarenakan hasil dari matrks vandermonde dan matriks konstanta y
akan berbentuk suatu sistem persamaan linearm tujuan dari metode ini adalah mencari koefisien a pada setiap x di matriks vandermonde yang
Metode lagrange adalah metode interpolasi polinomial yang digunakan untuk memperkirakan nilai fungsi pada titik-titik yang tidak diketahui.
Metode ini didasarkan pada pendekatan polinomial orde rendah yang melewati titik-titik data yang sudah diketahui, metode ini dapat
diperluas menjadi beberapa orde tergantung berapa titik data yang diberikan. Interpolasi ini dapat dilakukan untuk beberapa orde seperti orde
1(linear), 2(kuadratik), dan 3(kubik). Interpolasi ini dapat dihitung menggunakan rumus:
Dimana:
Metode Neton forward difference adalah metode yang menggunakan selisih hingga orde pertama (forward difference) untuk memperkirakan
turunan pertama suatu fungsi. Tujuan dari metode ini adalah mengurangi nilai y pada setiap y secara urut sehingga menemukan hasil yang
mengerucut, dan hasil interpolasinya adala perkalian antara p dengan selisih y pada rentang yang telah diketahui tersebut.
Interpolasi adalah teknik yang digunakan untuk memperkirakan nilai suatu fungsi pada titik-titik antara titik-titik data yang sudah diketahui.
Dalam metode interpolasi, titik-titik data yang sudah diketahui dihubungkan dengan polinomial atau fungsi lainnya untuk mendapatkan nilai
fungsi pada titik-titik yang tidak diketahui. Metode interpolasi dapat digunakan untuk mengisi kekosongan data atau memperkirakan nilai
suatu fungsi pada titik-titik yang tidak terlalu jauh dari titik-titik data yang sudah diketahui.Sedangkan ekstrapolasi adalah teknik yang
digunakan untuk memperkirakan nilai suatu fungsi pada titik-titik di luar rentang titik-titik data yang sudah diketahui. Dalam metode
ekstrapolasi, polinomial atau fungsi lainnya digunakan untuk memperkirakan nilai fungsi pada titik-titik yang berada di luar rentang titik-titik
data yang sudah diketahui. Metode ekstrapolasi dapat digunakan untuk memperkirakan nilai suatu fungsi pada titik-titik yang berada jauh dari
titik-titik data yang sudah diketahui atau pada rentang waktu yang belum pernah diamati. Perbedaan utama antara interpolasi dan ekstrapolasi
adalah bahwa interpolasi digunakan untuk memperkirakan nilai suatu fungsi pada titik-titik antara titik-titik data yang sudah diketahui,
sedangkan ekstrapolasi digunakan untuk memperkirakan nilai suatu fungsi pada titik-titik di luar rentang titik-titik data yang sudah diketahui.