Anda di halaman 1dari 21

Laporan Praktikum

Komputasi Numerik

KN - 5

INTERPOLASI

Nama : MUHAMMAD RAYHAN A.A

NPM : 140310220001

Hari/Tanggal : 14 APRIL 2023

Waktu : 13.00-16.00

Asisten : JULIAN EVAN CHRISNANTO

LABORATORIUM KOMPUTASI

DEPARTEMEN FISIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS PADJADJARAN

2023

LEMBAR PENGESAHAN
KN - 5

INTERPOLASI
Nama : MUHAMMAD RAYHAN A.A

NPM : 140310220001

Hari / Tanggal : 14 APRIL 2023

Waktu / Sesi : 13.00-16.00

Asisten : JULIAN EVAN CHRISNANTO

Pretest Laporan Akhir


Jatinangor, 14 April 2023
Asisten
( )
BAB I
PENDAHULUAN
 Tujuan

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 = []

xp = float(input('masukkan x interpolasi : '))


jumlah = 0
pangkat = 0
for i in range(n+1):
jumlah += A[i]*(xp**pangkat)
pangkat += 1
eksak = np.sin(xp)

print('Nilai yang didapat untuk x = %f adalah f(x) = %f'%(xp,jumlah))


print('nilai eksak dari y = %f' %(eksak))
print('Error = %f' %(eksak - jumlah))
Program diatas adalah penerapan interpolasi polinomial pada python untuk mencari nilai y dari x = 0.45 dengan fungsi:
sin ⁡(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
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 = []

xp = float(input('masukkan x interpolasi : '))


jumlah = 0
pangkat = 0
for i in range(n+1):
jumlah += A[i]*(xp**pangkat)
pangkat += 1
eksak = np.sin(xp)

print('Nilai yang didapat untuk x = %f adalah f(x) = %f'%(xp,jumlah))


print('nilai eksak dari y = %f' %(eksak))
print('Error = %f' %(abs(eksak - jumlah)))

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 = []

xp = float(input('masukkan x interpolasi : '))


jumlah = 0
pangkat = 0
for i in range(n+1):
jumlah += A[i]*(xp**pangkat)
pangkat += 1
eksak = np.sin(xp)

print('Nilai yang didapat untuk x = %f adalah f(x) = %f'%(xp,jumlah))


print('nilai eksak dari y = %f' %(eksak))
print('Error = %f' %(abs(eksak - jumlah)))
Program diatas adalah penerapan interpolasi polinomial pada python untuk mencari nilai y dari x = 0.45 dengan fungsi

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 = []

xp = float(input('masukkan x interpolasi : '))


jumlah = 0
pangkat = 0
for i in range(n+1):
jumlah += A[i]*(xp**pangkat)
pangkat += 1
eksak = np.sin(xp)

print('Nilai yang didapat untuk x = %f adalah f(x) = %f'%(xp,jumlah))


print('nilai eksak dari y = %f' %(eksak))
print('Error = %f' %(abs(eksak - jumlah)))
Program diatas adalah penerapan interpolasi polinomial pada python untuk mencari nilai y dari x = 0.45 dengan fungsi:
1/¿)
. 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
5. Interpolasi Lagrange derajat satu, dua dan tiga untuk memprediksi populasi daerah “X” sesuai dengan Tabel 5.1 pada tahun 1945,

1955, 1965, 1975, 1985, 1995, 2005.


#interpolasi lagrange
n = int(input('orde : '))
x = []
y = []
f = []

x_cari = float(input('tahun yang populasinya akan dicari : '))


Y = 0

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]

print('Populasi pada tahun %i sebanyak %f'%(x_cari,Y))

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)

o = int(input('masukkan orde : '))


x = []
y = []
delta1 = []
delta2 = []
x_cari = float(input('masukkan x cari : '))

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

print('Nilai yang didapat untuk x = %f adalah f(x) = %f'%(x_cari,y_cari))


print('nilai eksak dari y = %f' %(mt.sin(x_cari)))
print('Error = %f' %(abs(mt.sin(x_cari) - y_cari)))
Program diatas adalah program yang digunakan untuk melakukan interpolasi dengan menggunakan metode Newton forward. Metode Newton
forward difference adalah salah satu metode interpolasi numerik yang digunakan untuk memperkirakan nilai fungsi pada titik-titik yang tidak
diketahui di antara titik-titik data yang sudah diketahui. Metode ini menggunakan perbedaan forward untuk mencari nilai aproksimasi dari
turunan fungsi pada setiap titik data, dan kemudian menggunakan nilai-nilai ini untuk memperkirakan nilai fungsi pada titik-titik yang tidak
diketahui.
Pada metode ini beberapa list kosong harus dibuat untuk menyimpan hasil perhitungan, seperti untuk x,y dan hasil pengurangan(delta).
Kemudian user akan diminta untuk menginput o(orde) dan x pada perulangan yang berjalan sebanyak o, untuk y didapat dari hasil
perhitungan menggunakan sintaks di library math, linrary ini memungkinkan jumlah dari elemen x dan y nantinya akan berjumlah sama,
berbeda dengan numpy dimana dalam 1 kali perulangan akan menghasilkan sebuah list pada elemen[0] yang didalamnya memiliki 3 elemen
angka, sehingga lebih sulit untuk dioperasikan .Pada program ini dibagi menjadi 2 cara, yaitu orde 1 dan 2, dimana pada orde 1 pengurangan
dilakukan hanya sekali, karena hanya memiliki 2 nilai x yang diketahui, lalu hasil pengurangan akan dikalikan dengan nilai p, nilai p ini
adalah hasil pengurangan antara nilai x yang akan dicari interpolasinya dengan nilai x yang pertama diinput dibagi dengan selisih jarak antara
x1 dan x0(pertama diinput). Y interpolasi dicari dengan menjulahkan antara nilai y pada elemen ke-0 dengan hasil perkalian p dengan hasil
pengurangan(delta). Pada orde 2 tidak jauh berbeda namun terdiri dari 2 kali pengurangan, yaitu pengurangan antara nilai y yang didapat dari
sintaks math lalu dimasukkan kedalam suatu list, dan pengurangan kedua(delta 2) adalah pengurangan dari hasil pengurangan
sebelumnya(delta 1), seterusnya akan sama seperti orde 1 tetapi operasi penjumlahannya melibatkan faktorial, pada orde 1 sebenarnya
menggunakan faktorial namun penggunaannya akan tidak praktis.

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

akan berbentuk seperti:


Yang kemudian akan mensubtitusi nilai x yang akan dicari interpolasinya ke fungsi diatas.

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.

Anda mungkin juga menyukai