Anda di halaman 1dari 16

Laporan Praktikum

Komputasi Numerik

KN – 08
DIFERENSIASI NUMERIK

Nama : Farrel Raesya Revaldi


NPM : 140310220028
Hari/Tanggal : Jumat/12 Mei 2023
Waktu : 07.30
Asisten : Julian Evan Christanto

LABORATORIUM KOMPUTASI
DEPARTEMEN FISIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS PADJADJARAN
2023
LEMBAR PENGESAHAN

KN - 08

DIFERENSIASI NUMERIK

Nama : Farrel Raesya Revaldi


NPM : 140310220028
Hari / Tanggal : Jumat/12 Mei 2023
Waktu / Sesi : 07.30
Asisten : Julian Evan Christanto

Pretest Laporan Akhir

Jatinangor, 12 Mei 2023


Asisten

( Julian Evan Christanto )


Farrel Raesya Revaldi
140310220028

I. TUJUAN
Mahasiswa mampu mendiferensiasi numerik suatu fungsi dengan menggunakan
metode aproksimasi beda hingga.
II. Percobaan

II.1. Percobaan 1

II.1.1. Listing Program

import math as mt
import sympy as sp

X = sp.Symbol('X')
y = (sp.sin(3-2*X))**4
h = [0.001, 0.005,0.05,0.1,0.5]
x = int(input("Masukan titik differensiasi: "))
f1o_ = []

def f(x):
return (mt.sin(3-2*x))**4

def forward(x):
for i in range(len(h)):
f1o = (f(x+h[i])-f(x))/h[i]
f1o_.append(f1o)
return f1o_

def backward(x):
for i in range(len(h)):
f1o = (f(x)-f(x-h[i]))/h[i]
f1o_.append(f1o)
return f1o_

def central(x):
for i in range(len(h)):
f1o = (f(x+h[i])-f(x-h[i]))/(2*h[i])
f1o_.append(f1o)
return f1o_

def tampilkan(numerik, metode):


eksak = sp.diff(y, X).subs(X,x).evalf()
for i in range(len(h)):
Farrel Raesya Revaldi
140310220028

print(f"h: {h[i]} \n Nilai Metode {metode}: {numerik[i]}")


print(f"Nilai Eksak: {eksak}")

tampilkan(forward(x),"Maju")
tampilkan(backward(x), "Mundur")
tampilkan(central(x), "Tengah")

II.1.2. Tampilan Program

Figure 1 Hasil Metode Maju


Farrel Raesya Revaldi
140310220028

Figure 2 Hasil Metode Mundur

Figure 3 Hasil Metode Tengah


Farrel Raesya Revaldi
140310220028

II.1.3. Analisa Program

1. Pada baris pertama, dua modul diimpor yaitu `math` dan `sympy`.
Modul `math` digunakan untuk fungsi matematika dasar seperti `sin`,
sedangkan modul `sympy` digunakan untuk menghitung turunan eksak
dari fungsi.

2. Baris selanjutnya, simbol `X` dan `y` didefinisikan menggunakan


modul `sympy`. `X` adalah simbol variabel yang akan digunakan
dalam fungsi, sedangkan `y` adalah fungsi yang ingin kita turunkan.

3. Kemudian, daftar `h` didefinisikan dengan beberapa nilai yang akan


digunakan dalam perhitungan turunan numerik.

4. Pengguna diminta untuk memasukkan titik differensiasi melalui


input. Nilai yang dimasukkan akan disimpan dalam variabel `x`.

5. Selanjutnya, fungsi `f(x)` didefinisikan. Fungsi ini mengembalikan


nilai dari ekspresi `(sin(3-2*x))**4` menggunakan modul `math`.

6. Berikutnya, tiga fungsi untuk menghitung turunan numerik


didefinisikan: `forward`, `backward`, dan `central`. Setiap fungsi
melakukan perhitungan turunan numerik dengan menggunakan rumus
yang sesuai dengan metodenya. Variabel `f1o_` digunakan untuk
menyimpan hasil turunan numerik yang dihitung.

7. Fungsi `tampilkan` digunakan untuk menampilkan hasil perhitungan


turunan numerik dan turunan eksak. Fungsi ini menerima dua
argumen: `numerik` (hasil turunan numerik) dan `metode` (nama
metode). Di dalam fungsi ini, turunan eksak dari fungsi `y` dievaluasi
menggunakan `subs(X, x).evalf()` dari modul `sympy`. Selanjutnya,
Farrel Raesya Revaldi
140310220028

hasil perhitungan turunan numerik dan turunan eksak ditampilkan


dalam loop menggunakan perulangan.

8. Pemanggilan fungsi `tampilkan` dilakukan tiga kali dengan argumen


yang berbeda untuk menampilkan hasil turunan numerik dari metode
diferensiasi maju, mundur, dan tengah.

II.2. Percobaan 2

II.2.1. Listing Program

import math as mt
import sympy as sp

X = sp.Symbol('X')
y = (sp.sin(3*X))/(X*sp.cos(2*X))
h = [0.001,0.005,0.05,0.1, 0.5]
x = int(input("Masukan titik differensiasi: "))
f1o_ = []

def f(x):
return (mt.sin(3*x))/(x*mt.cos(2*x))

def forward(x):
for i in range(len(h)):
f1o = (f(x+h[i])-f(x))/h[i]
f1o_.append(f1o)
return f1o_

def backward(x):
for i in range(len(h)):
f1o = (f(x)-f(x-h[i]))/h[i]
f1o_.append(f1o)
return f1o_

def central(x):
for i in range(len(h)):
f1o = (f(x+h[i])-f(x-h[i]))/(2*h[i])
f1o_.append(f1o)
return f1o_
Farrel Raesya Revaldi
140310220028

def tampilkan(numerik, metode):


eksak = sp.diff(y, X).subs(X,x).evalf()
for i in range(len(h)):
print(f"h: {h[i]} \nNilai Metode {metode}: {numerik[i]}")
print(f"Nilai Eksak: {eksak}")

tampilkan(forward(x),"Maju")
tampilkan(backward(x), "Mundur")
tampilkan(central(x), "Tengah")

II.2.2. Tampilan Program

Figure 4 Hasil Metode Maju


Farrel Raesya Revaldi
140310220028

Figure 5 Hasil Metode Mundur

Figure 6 Hasil Metode Tengah

II.2.3. Analisa Program

1. Pada baris pertama, dua modul diimpor yaitu `math` dan `sympy`.
Modul `math` digunakan untuk fungsi matematika dasar seperti `sin`,
Farrel Raesya Revaldi
140310220028

‘cos’ sedangkan modul `sympy` digunakan untuk menghitung turunan


eksak dari fungsi.

2. Baris selanjutnya, simbol `X` dan `y` didefinisikan menggunakan


modul `sympy`. `X` adalah simbol variabel yang akan digunakan
dalam fungsi, sedangkan `y` adalah fungsi yang ingin kita turunkan.

3. Kemudian, daftar `h` didefinisikan dengan beberapa nilai yang akan


digunakan dalam perhitungan turunan numerik.

4. Pengguna diminta untuk memasukkan titik differensiasi melalui


input. Nilai yang dimasukkan akan disimpan dalam variabel `x`.

5. Selanjutnya, fungsi `f(x)` didefinisikan. Fungsi ini mengembalikan


nilai dari ekspresi `sin(3x)/x*cos(2x)` menggunakan modul `math`.

6. Berikutnya, tiga fungsi untuk menghitung turunan numerik


didefinisikan: `forward`, `backward`, dan `central`. Setiap fungsi
melakukan perhitungan turunan numerik dengan menggunakan rumus
yang sesuai dengan metodenya. Variabel `f1o_` digunakan untuk
menyimpan hasil turunan numerik yang dihitung.

7. Fungsi `tampilkan` digunakan untuk menampilkan hasil perhitungan


turunan numerik dan turunan eksak. Fungsi ini menerima dua
argumen: `numerik` (hasil turunan numerik) dan `metode` (nama
metode). Di dalam fungsi ini, turunan eksak dari fungsi `y` dievaluasi
menggunakan `subs(X, x).evalf()` dari modul `sympy`. Selanjutnya,
hasil perhitungan turunan numerik dan turunan eksak ditampilkan
dalam loop menggunakan perulangan.
Farrel Raesya Revaldi
140310220028

8. Pemanggilan fungsi `tampilkan` dilakukan tiga kali dengan argumen


yang berbeda untuk menampilkan hasil turunan numerik dari metode
diferensiasi maju, mundur, dan tengah.

III. TUGAS AKHIR

III.1. Soal 1:

Seperti yang terlihat pada hasil percobaan di atas, untuk seluruh metode
semakin kecil nilai step size h, akan menghasilkan nilai yang lebih akurat, terlihat
dari nilai error yang makin kecil, namun terjadi hal yang sebaliknya ketka nilai step
size h semakin besar, error semakin besar. Hal itu terjadi karena ketika nilai h besar,
yang terbentuk adalah garis secant, yang memotong kurva atau grafik. Namun
ketika nilai h semakin kecil bahkan mendekati nol, step size semakin kecil, garis
sekan berubah menjadi garis tangent, berupa nilai kemiringan pada satu titik.
Karena differential merupakan mencari garis tangent pada satu titik di kurva, step
size semakin kecil, akan menghasilkan nilai yang akurat atau lebih baik.

III.2. Soal 2:

III.2.1. Listing Program

t = [0,0.1,0.25,0.38,0.56]
x = [0,2,2.8,3.5,4]
mass = 1200

velocityFinalT1 = (x[1]-x[0])/(t[1]-t[0])
velocityFinalT2 = (x[1]-x[3])/(t[1]-t[3])
velocityFinalT3 = (x[4]-x[3])/(t[4]-t[3])
velocityInitialT1 = 0
velocityInitialT2 = (x[0]-x[2])/(t[0]-t[2])
velocityInitialT3 = (x[2]-x[4])/(t[2]-t[4])
velocityT1 = velocityFinalT1 - velocityInitialT1
velocityT2 = velocityFinalT2 - velocityInitialT2
velocityT3 = velocityFinalT3 - velocityInitialT3

impulseT1 = mass*velocityT1
impulseT2 = mass*velocityT2
impulseT3 = mass*velocityT3
Farrel Raesya Revaldi
140310220028

print(f"impuls t=0 : {impulseT1} N.s")


print(f"impuls t=0.25 : {impulseT2} N.s")
print(f"impuls t=0.56 : {impulseT3} N.s")

III.2.2. Tampilan Program

III.2.3. Analisa Program

Pada soal diminta mencari nilai dari impuls. Impuls dapat dicari
menggunakan persamaan, Impuls = massa*kecepatan. Namun dari data
yang diketahui hanya massa saja. Oleh karena itu harus mencari terlebih
dahulu nilai dari kecepatan. Diketahui data mengenai posisi dan waktu pada
tabel, karena kecepatan adalah turunan posisi terhadap waktu, maka dapat
dicari dari nilai dari kecepatan berdasarkan data pada tabel tersebut. Pada
soal ditanyakan impuls pada waktu t = 0, t = 0.25, t = 0.56, oleh karena itu
dicari terlebih dahulu kecepatan pada waktu tersebut. Digunakan metode
forward difference, pada waktu t=0, metode central pada t = 0.25, dan
metode backward, pada t = 0.56, kemudian hasilnya dikalikan denga massa
objek sebesar 1200kg. untuk secara rinci sebagai berikut:

Program di atas merupakan implementasi Python untuk menghitung impuls


pada beberapa titik waktu dalam gerakan benda. Berikut adalah analisis
program tersebut:

1. List `t` berisi nilai-nilai waktu pada titik-titik tertentu dalam gerakan
benda.
2. List `x` berisi posisi benda pada titik-titik waktu yang sesuai.
3. Variabel `mass` menyimpan nilai massa benda.
Farrel Raesya Revaldi
140310220028

4. Menghitung kecepatan akhir pada:


- `velocityFinalT1` menghitung kecepatan akhir menggunakan metode
forward difference, yaitu dengan menghitung nilai x[1]-x[0]/t[1]-t[0].
- `velocityFinalT2` menghitung kecepatan akhir antara t = 0 dan t = 0.25
menggunakan metode forward difference, yaitu dengan menghitung
nilai x[1]-x[3]/t[1]-t[3].
- `velocityFinalT3` menghitung kecepatan akhir antara t = 0.38 dan t =
0.56 menggunakan metode forward difference, yaitu dengan
menghitung nilai x[4]-x[3]/t[4]-t[3].
5. Menghitung kecepatan awal (`velocityInitial`) yang diasumsikan nol,
untuk velocitiyInitialT1, dan mencari kecepatan lain yaitu dengan nilai
kecepatan pada sebelumnya atau kecepatan awal pada waktu 0.1, 0.38.
ini digunakan untuk mencari nilai perubahan kecepatan
6. Menghitung perubahan kecepatan:
- `velocityT1` menghitung selisih antara kecepatan akhir pada t = 0 dan
kecepatan awal.
- `velocityT2` menghitung selisih antara kecepatan akhir pada t = 0.25 dan
kecepatan awal.
- `velocityT3` menghitung selisih antara kecepatan akhir pada t = 0.56 dan
kecepatan awal.
7. Menghitung impuls pada masing-masing titik waktu:
- `impulseT1` menghitung impuls pada t = 0 dengan mengalikan massa
dengan kecepatan pada t = 0.
- `impulseT2` menghitung impuls pada t = 0.25 dengan mengalikan massa
dengan kecepatan pada t = 0.25.
- `impulseT3` menghitung impuls pada t = 0.56 dengan mengalikan massa
dengan kecepatan pada t = 0.56.
8. Menampilkan hasil perhitungan impuls pada masing-masing titik waktu
menggunakan fungsi `print`.
Farrel Raesya Revaldi
140310220028

Hasil menunjukan bahwa impuls pada t=0.25, dan 0.56, memiliki nilai
negatif, artinya terdapat gaya yang menyebabkan momentum objek
berkurang atau gaya yang melawan arah gerak objek. Hal ini dapat terlihat
ketika data x dan t di plot dalam grafik.

Sumbu x = t dan y = x
Grafik membentuk kurva polynomial derajat 2, dan terlihat gradien semakin
mendatar yang artinya kecepatan menurun.

III.3. Soal 3:

Untuk metode forward difference, digunakan pada data yang memiliki nilai
setelahnya, karena pada perumusan untuk mencari differensiasi pada suatu
titik, dibutuhkan nilai f(x+h) dan f(x), maka jika data yang ingin nilai
differensiasi adalah pada titik f(x), dan nilai x adalah batas interval atau
tidak ada lagi nilai setelah itu, maka metode forward tidak dapat digunakan.
Jika menggunakan kasus pada soal 2, maka tidak dapat dicari menggunakan
metode ini untuk mencari nilai kecepatan pada t = 0.56
Farrel Raesya Revaldi
140310220028

Untuk metode central difference, untuk menggunakan differensiasi pada


titik (x) harus diketahui data sebelumnya (x-h) dan harus diketahui nilai
sesudahnya (x+h). oleh karena itu untuk kasus soal no 2, data pada t = 0 dan
t = 0.56 tidak dapat di-differensiasikan karena data merupakan pada ujung
jadi tidak dapat data sesudahnya atau sebelumnya.

Untuk metode backward difference, sama seperti metode forward, yang


membedakanya adalah dibutuhkan nilai sebelumnya. Misal ingin mencari
pada titik x, tetapi harus diketahui nilai x-h.

III.4. Soal 4:

Soal 1

Step Size h Forward Central Backward Error


0.001 -2.574 -2.574 -2.574 0.001
0.005 -2.570 -2.570 -2.570 0.005
0.05 -2.497 -2.497 -2.497 0.078
0.1 -2.366 -2.366 -2.366 0.210
0.5 -1.003 -1.003 -1.003 1.573

Soal 2

Step Size h Forward Central Backward Error


0.001 8.91 8.91 8.91 0.04
0.005 8.73 8.73 8.73 0.22
0.05 7.10 7.10 7.10 1.86
0.1 5.83 5.83 5.83 3.13
0.5 1.10 1.10 1.10 6.96

Dari tabel diatas nilai tidak ada yang berbeda antara metode

IV. KESIMPULAN
Farrel Raesya Revaldi
140310220028

Ketika ingin mencari nilai sebuah turunan suatu fungsi, dapat menggunakan
differensiasi secara numerik. Terdapat beberapa metode untuk mencari nilai
differensiasi, beberapa diantaranya adalah metode selisih maju, selisih
mundur, dan selisih tengah. Untuk metode forward difference, digunakan
pada data yang memiliki nilai setelahnya, karena pada perumusan untuk
mencari differensiasi pada suatu titik, dibutuhkan nilai f(x+h) dan f(x),
maka jika data yang ingin nilai differensiasi adalah pada titik f(x), dan nilai
x adalah batas interval atau tidak ada lagi nilai setelah itu, maka metode
forward tidak dapat digunakan. Untuk metode central difference, untuk
menggunakan differensiasi pada titik (x) harus diketahui data sebelumnya
(x-h) dan harus diketahui nilai sesudahnya (x+h). Untuk metode backward
difference, sama seperti metode forward, yang membedakanya adalah
dibutuhkan nilai sebelumnya. Misal ingin mencari pada titik x, tetapi harus
diketahui nilai x-h.

Anda mungkin juga menyukai