Anda di halaman 1dari 83

Modul Perkuliahan

MA201547 Persamaan Differensial Numerik

Abrari Noor Hasmi,S.Si., M.Si.


Program Studi Matematika
Institut Teknologi Kalimantan
Tahun Ajaran 2020/2021
Daftar Isi

1 Tentang Mata Kuliah 3


1.1 Silabus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Peta Konsep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Peta Kompetensi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Rencana Pembelajaran Semester . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5 Rencana Penilaian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2 Modul Pertemuan 2 15
2.1 Teori Metode Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Instruksi Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Contoh Kode Pemrograman . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4 Perhitungan Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3 Modul Pertemuan 3 21
3.1 Teori Metode Taylor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Instruksi Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3 Contoh Kode Pemrograman . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.4 Perhitungan Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4 Modul Pertemuan 4 28
4.1 Teori Metode Runge Kutta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2 Instruksi Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3 Contoh Kode Pemrograman . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4 Visualisasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5 Modul Pertemuan 6 34
5.1 Teori Adams Bashforth dan Adams Moulton . . . . . . . . . . . . . . . . . . 34
5.2 Instruksi Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.3 Contoh Kode Penyelesaian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.3.1 Penyelesaian Metode Adams-Bashforth . . . . . . . . . . . . . . . . . 35
5.3.2 Perbandingan dengan Metode Runge Kutta . . . . . . . . . . . . . . 38
5.3.3 Penyelesaian Metode Adams Moulton . . . . . . . . . . . . . . . . . . 40
5.4 Orde Konvergensi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

1
6 Modul Pertemuan 7 45
6.1 Teori Metode Prediktor Korektor . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.2 Instruksi Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.3 Contoh Kode Pemrograman . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.4 Perbandingan dengan Metode Lain . . . . . . . . . . . . . . . . . . . . . . . . 49

7 Modul Pertemuan 9 53
7.1 Teori Metode Linear Shooting . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.2 Instruksi Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.3 Contoh Kode Pemrograman . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

8 Modul Pertemuan 10 58
8.1 Teori : Non-Linear Shooting Method . . . . . . . . . . . . . . . . . . . . . . . 58
8.2 Instruksi Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
8.3 Contoh Kode Pemrograman . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

9 Modul Pertemuan 10 64
9.1 Teori Metode Beda Hingga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
9.2 Instruksi Tugas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
9.3 Contoh Kode Pemrograman . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

10 Daftar Tugas 70
10.1 Tugas 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
10.2 Tugas 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
10.3 Tugas 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
10.4 Tugas 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
10.5 Tugas 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
10.6 Tugas 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
10.7 Tugas 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
10.8 Tugas 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
10.9 Tugas Besar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

11 Soal Kuis 79

12 Soal UTS 80

13 Soal UAS 81

Daftar Pustaka 82

2
SILABUS PEMBERLAJARAN
MATA KULIAH KODE DOSEN PENGAMPU BOBOT (SKS) SEMESTER TANGGAL PENYUSUNAN

PERSAMAAN DIFERENSIAL NUMERIK / MA201547 Abrari Noor Hasmi, S.Si., M.Si. 3 Pilihan 20 Februari 2021
NUMERICAL DIFFERENTIAL EQUATION

OTORISASI KOORDINATOR MK KOORDINATOR PROGRAM STUDI

Abrari Noor Hasmi, S.Si., M.Si. Kartika Nugraheni, S.Si., M.Si.

CAPAIAN CAPAIAN PEMBELAJARAN LULUSAN (CPL) YANG DITITIPKAN PADA MATA KULIAH
PEMBELAJARAN
(CP) 1. Sikap

S.9 Menunjukkan sikap bertanggungjawab atas pekerjaan di bidang keahliannya secara mandiri

2. Keterampilan Umum

KU.1 Mampu menerapkan pemikiran logis, kritis, sistematis, dan inovatif dalam konteks pengembangan atau implementasi ilmu
pengetahuan dan teknologi yang memperhatikan dan menerapkan nilai humaniora yang sesuai dengan bidang keahliannya;

KU.2 Mampu menunjukkan kinerja mandiri, bermutu, dan terukur;

3. Pengetahuan
P.2 Menguasai prinsip-prinsip pemodelan matematika, program linear, persamaan diferensial, dan metode numerik

4. Keterampilan Khusus

KK.1 Mampu mengidentifikasi, menjelaskan, merumuskan, dan memecahkan permasalahan matematika sederhana melalui pendekatan
matematis

KK.2 Mampu menerapkan konsep dasar matematika untuk menganalisis dan mengkaji keakuratan permasalahan matematika sederhana
sesuai dengan fenomena dan metode yang tepat
3
CAPAIAN PEMBELAJARAN MATA KULIAH (CPMK)

Mahasiswa mampu memaparkan hasil analisis yang telah dilakukan terhadap metode numerik yang digunakan dalam menyelesaikan persamaan
differensial baik secara individu maupun kelompok.
DESKRIPSI Persamaan Diferensial (baik Persamaan Diferensial Biasa maupun Persamaan Diferensial Parsial) kadang tidak dapat diselesaikan menggunakan
SINGKAT MK metode analitik. Oleh karena itu, diperlukan pengetahuan tentang metode penyelesaian numerik. Pada mata kuliah Persamaan Differensial
Numerik, dipelajari metode-metode numerik dalam menyelesaikan persamaan diferensial biasa berbentuk masalah nilai awal dan masalah nilai
batas. Aspek-aspek yang dibahas, meliputi penurunan rumus, implementasi algoritma, serta estimasi eror. Penyelesaian permasalahan numerik
diimplementasikan melalui algoritma dengan bahasa pemrograman menggunakan komputer. Dalam proses perkuliahan, digunakan metode
ceramah dan diskusi aktif. Pemberian tugas (baik mandiri maupun kelompok) dilakukan dengan tujuan membantu mahasiswa dalam memahami
metode-metode numerik dan menggunakan metode numerik untuk menyelesaikan permasalahan diferensial.

BAHAN KAJIAN Dalam mata kuliah ini mahasiswa akan mempelajari pokok bahasan-pokok bahasan sebagai berikut:

1. Definisi persamaan diferensial


2. Metode Taylor
3. Metode Euler
4. Metode Runga Kutta
5. Metode Adams Moulton
6. Metode Adams Bashford
7. Metode Prediktor Korektor
8. Metode Linear Shooting Method
9. Metode Beda Hingga

PUSTAKA UTAMA

1. Burden, R. L. & Faires, J. D. (2011). Numerical Analysis Ninth Edition. USA: Brooks/Cole, Cengage Learning.
PENDUKUNG

2. Linge, S. & Langtangen, H.P. (2020). Programming for Computations – Python. Switzerland, Springer.
MEDIA 1. Slide
PEMBELAJARAN 2. Kuliah.itk.ac.id
4
3. Google Collaboratory
4. Online Meeting: Zoom/Gmeet

MATA KULIAH MA201419. Persamaan Diferensial Parsial


PRASYARAT
5
PETA KONSEP
6
7
PETA KOMPETENSI
8
9
RENCANA PEMBELAJARAN SEMESTER
Bentuk/ Penilaian Dura
Min Sub-CPMK Pengalaman Media
Metode si Pust
ggu (Kemampuan akhir Bahan Kajian Belajar Pembelaj
Pembelaja Kriteria Indikator Bobot (men aka
ke- yg direncanakan) Mahasiswa aran
ran it)

(1) (2) (4) (5) (6) (7) (8) (9) (10) (11) (12)

Mahasiswa mampu ● Memahami aturan


membedakan jenis- • Jenis-jenis LMS, perkuliahan beserta hal-hal
jenis persamaan persamaan Kuliah/ Zoom, yang disepakati.
differensial Ketepatan
differensial dan Ceramah, Pretest, Slide, ● Menjelaskan tujuan mata
1 • Urgensi dalam kuliah persamaan 0% 150 [1]
mengetahui motivasi diskusi, keaktifan Google
penggunaan menjawab differensial numerik secara
penggunaan metode latihan soal Collabora
metode numerik umum
numerik pada tory
persamaan differensial ● Membedakan jenis-jenis
persamaan differensial
Mahasiswa mampu ● Menjelaskan ide dasar
metode penyelesaian
menghasilkan program Kuliah/ LMS, Ketepatan
Diskusi, menggunakan metode Euler
sederhana untuk Ceramah, Zoom, dalam
ceramah, ● Memahami implementasi
mengahampiri solusi ● Metode Euler diskusi, Slide, menghitung metode Euler pada program
2 Latihan 3.75% 150 [1]
masalah nilai awal latihan Google dan python
pemrograma
menggunakan metode pemrogram Collabora menyusun ● Mampu menghitung solusi
n
Euler dan menghitung an tory program numerik menggunakan
errornya. metode Euler serta
mengetahui errornya
Mahasiswa mampu Diskusi, ● Menjelaskan ide dasar
Kuliah/ LMS,
menghasilkan program ceramah, Ketepatan metode penyelesaian
Ceramah, Zoom, menggunakan metode Taylor
3 sederhana untuk ● Metode Taylor Latihan dalam 3.75% 150 [1]
diskusi, Slide, orde 2 dan 3
mengahampiri solusi pemrograma menjawab
tugas Google
masalah nilai awal n, Kuis
10
menggunakan metode Collabora ● Memahami implementasi
Taylor tory metode Taylor pada program
python
● Mampu menghitung solusi
numerik menggunakan
metode Taylor serta
mengetahui errornya
● Menjelaskan ide dasar
Mahasiswa mampu metode penyelesaian
LMS, menggunakan metode
menghasilkan program Diskusi,
Kuliah/ Zoom, Runge Kutta orde tinggi
sederhana untuk ceramah, Ketepatan ● Memahami implementasi
● Metode Runge Ceramah, Slide,
4 mengahampiri solusi Latihan dalam metode Runge Kutta pada 3.75% 150 [1]
Kutta diskusi, Google
masalah nilai awal pemrograma menjawab program python
latihan soal Collabora
menggunakan metode n, ● Mampu menghitung solusi
tory
Runge Kutta numerik menggunakan
metode Runge Kutta serta
mengetahui errornya
LMS,
Zoom, Ketepatan ● Mampu menghitung solusi
5 Kuis ● Minggu 1-4 Kuis Kuis Google dalam numerik menggunakan 20% 150 [1]
Collabora menjawab metode Euler, Taylor, Runge
tory Kutta

● Menjelaskan ide dasar


Mahasiswa mampu metode penyelesaian
menghasilkan program menggunakan metode
Diskusi,
sederhana untuk Kuliah/ Metode Adams Moulton dan
ceramah, Video, Ketepatan Adams Bashford
mengahampiri solusi ● Metode Prediktor ceramah,
6-7 Latihan LMS, dalam ● Memahami implementasi 7% 150 [1]
masalah nilai awal Korektor diskusi,
pemrograma Zoom menjawab metode Metode Prediktor
menggunakan metode latihan soal
n, Korektor pada program
Metode Prediktor
Korektor python
● Mampu menghitung solusi
numerik menggunakan
11
metode Metode Prediktor
Korektor serta mengetahui
errornya
8 UJIAN TENGAH SEMESTER (UTS)

●Menjelaskan ide dasar


metode penyelesaian sistem
persamaan differensial
●Memahami modifikasi pada
Mahasiswa mampu metode numerik untuk
menghasilkan program menyelesaikan sistem
Diskusi,
sederhana untuk Kuliah/ persamaan differensial
● Metode Linear ceramah, Video, Ketepatan
mengahampiri solusi ceramah, ●Menjelaskan perbedaan
9-10 Latihan LMS, dalam masalah nilai awal dengan 7% 150 [1]
masalah nilai batas Shooting diskusi,
pemrograma Zoom menjawab nilai batas
menggunakan metode latihan soal
n, ●Menjelaskan ide
Metode Linear
Shooting penyelesaian masalah nilai
batas menggunakan metode
linear shooting
●Menerapkan metode linear
shooting menggunakan
python
Mahasiswa mampu • Menjelaskan ide
menghasilkan program Diskusi, penyelesaian masalah nilai
Kuliah/
sederhana untuk ceramah, Video, Ketepatan batas menggunakan metode
● Metode Beda ceramah, beda hingga
11 mengahampiri solusi Latihan LMS, dalam 3.75% 150 [1]
Hingga diskusi, • Menerapkan metode beda
masalah nilai batas pemrograma Zoom menjawab
latihan soal hingga menggunakan python
menggunakan metode n,
Metode Beda Hingga

Mahasiswa mampu ● Identifikasi Asistensi ●Keaktifan dalam berdiskusi


12- memaparkan analisis Masalah LMS, Keaktifan menyelesaikan masalah 4x15
Tugas Diskusi 2.5% [1]
15 menggunakan metode ● Simulasi Numerik Zoom Berdiskusi nyata menggunakan metode 0
Besar
numerik untuk ● Laporan simulasi numerik
12
menyelesaikan
persamaan differensial

16 UJIAN AKHIR SEMESTER (UAS)


13
RENCANA PENILAIAN
Metode Penilaian dan Kaitan dengan Sub CPMK

Komponen Persent Sub CPMK


Penilaian ase
1 2 3 4 5 6 7 8
Tugas 1 3.75 √
Tugas 2 3.75 √
Tugas 3 3.75 √
Kuis 1 20 √ √ √
Tugas 4 3.75 √
Tugas 5 3.75 √
UTS 25 √ √ √ √ √
Tugas 6 3.75 √
Tugas 7 3.75 √
Tugas 8 3.75 √
Tugas Besar 25 √
(UAS)

KOMPOSISI NILAI EVALUASI


1. Tugas Harian 30%
2. Kuis 20%
3. UTS 25%
4. Tugas Besar 25%

14
Bab 2

Modul Pertemuan 2

2.1 Teori Metode Euler


Metode Euler menyelesaikan masalah nilai awal berbentuk

y0 = f (t, y) y(t0 ) = y0

dengan menggunakan skema numerik sebagai berikut:

yi+1 = yi + ∆ti f (ti , yi ) (1)

2.2 Instruksi Tugas


Lakukan approksimasi solusi persamaan differensial di bawah ini:

y0 = y − t2 + 1, 0 ≤ t ≤ 2, y(0) = 0.5

Dengan menggunakan metode Euler maju dengan diskretisasi 2−1 , 2−2 , 2−3 , 2−4 , 2−5 , 2−6 .
Diketahui solusi eksak :
y(t) = (t + 1)2 − 0.5et

Dengan membandingkan solusi numerik dengan solusi eksak, tentukan orde dari er-
ror pada metode Euler!

15
2.3 Contoh Kode Pemrograman
Langkah pengerjaan adalah sebagai berikut: 1. Definisikan Nt+1 interval yang akan dihi-
tung, definisikan yi ≈ y(ti ) 2. Gunakan persamaan (1) untuk secara iteratif mengaproks-
masi nilai yi
Hal pertama yang kita lakukan adalah membaca library numpy dan memberikannya
alias untuk memudahkan/mempersingkat pemanggilan fungsi pada library tersebut.
[2]: import numpy as np
import matplotlib.pyplot as plt

Dilanjutkan dengan mendefinisikan fungsi yang berisi algoritme penyelesaian per-


samaan differensial yaitu fungsi fun_Euler. Dalam python pendefinisian fungsi diawali
dengan menggunakan kata kunci def diikuti dengan nama fungsi. Fungsi ini akan memi-
liki masukan nilai awal y0 , vektor t yang berisi diskritisasi waktu serta fungsi f . Fungsi
f merupakan fungsi python dengan masukan nilai t, y serta lebar selang pada waktu ter-
tentu. Program akan mengeluarkan vektor y yang merupakan aproksimasi solusi secara
numerik dengan metode Euler. Perhatikan bahwa untuk fun_Euler tidak secara mengha-
ruskan setiap elemen berurutan di t memiliki lebar selang h yang seragam, karena untuk
setiap langkah program akan menghitung lebar selang h.
[3]: def fun_Euler(y0,t,f):
n=len(t) #panjang vektor t
y_ = np.zeros(n) #inisialisasi luaran fungsi
y_[0]=y0 #inisiasi nilai awal
for i in range(n-1): #perulangan utama
h = t[i+1]-t[i] #menghitung lebar selang
y_[i+1]=y_[i]+h*f(t[i],y_[i],h) #algoritma metode Euler, f adalah
,→ruas kanan

return y_ #output dari fungsi

def f(t,y,h): #ruas kanan dari persamaan differensial


return y-t**2+1

Selanjutnya kita akan menentukan inisialisasi solusi masalah nilai awal. Kita perlu
menentukan nilai awal, nilai akhir dan lebar selang. Untuk itu kita akan menggunakan
fungsi numpy.arange dengan masukan tinit, tend, dan dt akan membuat vektor dari waktu
awal, sampai waktu akhir yang antar dua vektor berurutan terjarak sebesar dt. Karena

16
pada dasarnya waktu diakhir tidak dimasukan dalam perhitungan arange, maka waktu
akhir akan dilebihkan sedikit, yaitu sebesar dt.
Setelah membuat diskritisasi waktu, kita tinggal memanggil fungsi fun_Euler yang
telah kita definisikan sebelumnya. Kita dapat melihat hasil aproksimasi solusi dengan
perintah print().
[4]: #parameter masalah
tinit = 0
tend = 2
y0 = 0.5

#diskritisasi waktu
# for i in range(5):
dt = 2**-1
t_1 = np.arange(tinit,tend+dt,dt) #arange untuk membuat vektor dari
,→tinit, tend, dengan beda dt.

y1=fun_Euler(y0,t_1,f)# aproksimasi solusi dengan metode Euler

#solusi Eksak
t_ex = np.linspace(tinit,tend,201)
y_ex = (t_ex+1)**2-0.5*np.exp(t_ex)

#Visualisasi
plt.figure(figsize = [8.4, 3.2])
plt.plot(t_1,y1, label = r'dt$=2^{-1}$') #lambang $ sebagai simbol untuk
,→latex

plt.plot(t_ex,y_ex,'-.', label = 'eksak')


plt.xlabel('t');plt.ylabel('y')
plt.title('Aproksimasi Menggunakan Metode Euler')
plt.legend()
plt.grid()
plt.savefig('fig_eul_all_h')
plt.show()

17
Lanjutkan untuk diskritisasi waktu yang lain . . . .
[1]: #parameter masalah
tinit = 0
tend = 2
y0 = 0.5

#diskritisasi waktu
for i in range(5):
dt = 2**-(1+i)
t_1 = np.arange(tinit,tend+dt,dt)
y1=fun_Euler(y0,t_1,f)
plt.plot(t_1,y1, label = r'dt$=2^{-%i}$' %(i+1))

# aproksimasi solusi dengan metode Euler


t_ex = np.linspace(tinit,tend,5)
y_ex = (t_ex+1)**2-0.5*np.exp(t_ex)
plt.plot(t_ex,y_ex, label = 'eksak')
plt.xlabel('t')
plt.ylabel('y')
plt.legend()
plt.grid()
plt.show()

18
,→ ---------------------------------------------------------------------------

NameError Traceback (most recent


,→call last)

<ipython-input-1-576a54e3b0ff> in <module>
7 for i in range(5):
8 dt = 2**-(1+i)
----> 9 t_1 = np.arange(tinit,tend+dt,dt)
10 y1=fun_Euler(y0,t_1,f)
11 plt.plot(t_1,y1, label = r'dt$=2{-%i}$' %(i+1))

NameError: name 'np' is not defined

2.4 Perhitungan Error


Selanjutnya kita akan menghitung error solusi persamaan differensial. Kita akan meng-
gunakan metrik Euclid yang secara formal didefinisikan sebagai:
Z 4
1/2
2
E(∆ti ) = |wTaylor2 − y Eksak |2 = (y Euler (t) − y Eksak (t)) dt
2

sedangkan secara numerik apabila lebar selang adalah h maka norm diatas dapat diap-
roksimasi dengan menggunakan metode trapesium dengan cara:
" #1/2
Nt−1
∆ti
E(∆ti ) = |wTaylor2 − y Eksak |2 = (e0 + e Nt ) + ∆ti ∑ ei
2 i =1

dengan ei = (y Euler (ti ) − y Eksak (ti ))2 . Yang dapat disederhanakan dengan mengabaikan
kontribusi a0 dan a N t :
" #1/2
Nt−1
E(∆ti ) = ∆ti ∑ ei
i =1

19
Apabila tidak diketahui solusi eksak, maka bisa diganti dengan solusi dengan nilai ukur-
an waktu terkecil. .
[ ]: def fun_Eksak(t_ex):
#Menghitung solusi eksak
return (t_ex+1)**2-0.5*np.exp(t_ex)

def fun_err(t,y):
"""menentukan metrik euklidean untuk
diskritisasi waktu t dan solusi aproksimasi y"""
y_ex = fun_Eksak(t) #menentukan solusi eksak untuk diskritisasi waktu
,→t

h = t[1] - t[0] #lebar selang


e1 = y[1:-1] - y_ex[1:-1]
return np.sqrt(h*e1.dot(e1))

err1 =fun_err(t_1,y1)
print(err1)

Hitung Error untuk diskritisasi waktu yang lain dan plot dengan sumbu x adalah ∆t
dan sumbu y adalah nilai Errornya.
Orde konvergensi dapat diperoleh dari serangkaian solusi numerik dengan parameter
∆ti yang berbeda lalu mengasumsikan bahwa error memiliki bentuk :

E(∆ti−1 ) = C (∆ti−1 )r E(∆ti ) = C (∆ti )r

yang dengan demikian r dapat ditentukan dengan :

E(∆ti )
ln E(∆t
i −1 )
r=
ln(∆ti /∆ti−1 )

Berdasarkan perhitungan solusi numerik, hitung orde konvergensi metode Euler, ban-
dingkan dengan orde teoritik yaitu r = 1
[ ]:

20
Bab 3

Modul Pertemuan 3

3.1 Teori Metode Taylor


Metode Taylor merupakan perumuman dari metode Taylor. Untuk memperoleh metode
Taylor, maka tinjau deret Taylor dari fungsi y(t + ∆t) sebagai berikut:

y00 (t) y000 (t)


y(t + ∆t) = y(t) + y0 (t)∆t + (∆t)2 + (∆t)3 + · · ·
2! 3!

Metode Taylor orde ke-n diperoleh dengan mempertahankan suku deret Taylor sam-
pai orde ke-n dan mengabaikan suku ke-n + 1. Misalkan y merupakan solusi dari masa-
lah nilai awal yang diberikan oleh:

y0 (t) = f (t, y(t)), y ( t0 ) = y0

Maka suku y0 ‘, y00 0 , · · · dapat diperoleh dengan menurunkan kedua ruas pada masalah
nilai awal dengan t. Perhatikan bahwa turunan yang ada pada ruas kanan haruslah tu-
runan total (bukan turunan parsial), yaitu:

df ∂f ∂ f dy
y00 = f 0 (t) = = +
dt ∂t ∂y dt

Diberikan masalah nilai awal:

y0 = y − t2 + 1, 0 ≤ t ≤ 2, y(0) = 0.5

Tentukan aproksimasi Taylor orde 2 dan orde 4 untuk y(0.5) dengan menggunakan ∆t =
0.5.

21
Penyelesaian Untuk penyelesaian Taylor orde 2 maka diperlukan nilai y00 yang dapat
diperoleh dengan:

∂ ∂
y00 (t) = ( y − t2 + 1) + ( y − t2 + 1) · y 0
∂t ∂y
= −2t + 1 · y0
= −2t + y − t2 + 1

dengan demikian w1 ≈ y(0.5) dapat dihitung dengan

(∆t)2
w1 = w0 + ∆t(w0 − t20 + 1) + (w0 − t20 + 1 − 2t0 )
2
0.52
= 0.5 + 0.5(0.5 − 02 + 1) + (0.5 − 02 + 1 − 2 · 0)
2
= 1.4375

sedangkan untuk w2 ≈ 1 dapat dihitung dengan :

(∆t)2
w2 = w1 + ∆t(w1 − t21 + 1) + (w1 − t21 + 1 − 2t1 )
2
0.52
= 1.4375 + 0.5(1.4375 − 0.52 + 1) + (1.4375 − 0.52 + 1 − 2 · 0.5)
2
= 2.6796

Untuk penyelesaian Taylor orde 4 maka diperlukan pula nilai y000 dan y(4) yang dapat
diperoleh dengan:

∂ ∂
y000 (t) = (−2t + y − t2 + 1) + (−2t + y − t2 + 1) · y0
∂t ∂y
= −2 − 2t + 1 · y0
= −2t + y − t2 − 1

∂ ∂
y (4) ( t ) = (−2t + y − t2 − 1) + (−2t + y − t2 − 1) · y0
∂t ∂y
= −2 − 2t + 1 · y0
= −2t + y − t2 − 1

22
dengan demikian w1 ≈ y(0.5) dapat dihitung dengan

(∆t)2 (∆t)3
w1 = w0 + ∆t(w0 − t20 + 1) + (w0 − t20 + 1 − 2t0 ) + (w0 − t20 − 2t0 − 1)
2 6
(∆t)4
+ (w0 − t20 − 2t0 − 1)
24
0.52 0.53
= 0.5 + 0.5(0.5 − 02 + 1) + (0.5 − 02 + 1 − 2 · 0) + (0.5 − 02 − 2 · 0 − 1)
2 6
0.54
+ (0.5 − 02 − 2 · 0 − 1)
24
= 1.42578

sedangkan untuk w2 ≈ 1 dapat dihitung dengan :

(∆t)2
w2 = w1 + ∆t(w1 − t21 + 1) + (w1 − t21 + 1 − 2t1 )
2
0.52
= 1.4375 + 0.5(1.4375 − 0.52 + 1) + (1.4375 − 0.52 + 1 − 2 · 0.5)
2
= 2.64132

Hasil dari solusi menggunakan beberapa metode numerik dapat dilihat pada tabel
dibawah ini:

t eksak Euler Taylor 2 Taylor 4

0.5 1.4256 1.29 1.4375 1.4257


1 2.6408 2.25 2.6796 2.6413

3.2 Instruksi Tugas


Lakukan approksimasi solusi persamaan differensial di bawah ini:

y2 + y
y0 = , 1 ≤ t ≤ 3, y (1) = −2
t

Dengan menggunakan metode Euler dan Taylor orde 2,3,4 dengan diskretisasi
2−1 , 2−2 , 2−3 , 2−4 , 2−5 , 2−6 . Diketahui solusi eksak :

2t
y(t) =
1 − 2t

23
1. Tentukan nilai error aproksimasi solusi metode Taylor dengan solusi eksak untuk
masing-masing lebar selang.
2. Gambarkan perbandingan antara solusi eksak dengan solusi numerik (Euler, Taylor
orde 2, Taylor orde 3, Taylor orde 4) untuk lebar selang h = 0.25 pada satu grafik.
Berilah interpretasi hasil yang diperoleh
3. Hitunglah orde konvergensi dari metode Euler, Taylor orde 2, Taylor orde 3, Taylor
orde 4, menggunakan ∆ti = 2−6 dan ∆ti−1 = 2−5
4. Lakukan perhitungan manual masalah nilai awal diatas dengan menggunakan h =
2−1 untuk metode Taylor orde 3.

3.3 Contoh Kode Pemrograman


Mula-mula kita akan mengerjakan untuk metode Taylor orde 2. Hal pertama yang kita
lakukan adalah membaca library numpy dan memberikannya alias sebagai “np” untuk
memudahkan/mempersingkat pemanggilan fungsi pada library tersebut.
[ ]: import numpy as np

Dilanjutkan dengan mendefinisikan fungsi yang berisi algoritme penyelesaian per-


samaan differensial yaitu fungsi fun_Taylor. Dalam python pendefinisian fungsi diawali
dengan menggunakan kata kunci def diikuti dengan nama fungsi. Fungsi ini akan memi-
liki masukan nilai awal y0 , vektor t yang berisi diskritisasi waktu serta fungsi f . Fungsi
f merupakan fungsi python dengan masukan nilai t, y serta lebar selang pada waktu ter-
tentu. Program akan mengeluarkan vektor y yang merupakan aproksimasi solusi secara
numerik dengan metode Taylor. Perhatikan bahwa untuk fun_Taylor tidak secara meng-
haruskan setiap elemen berurutan di t memiliki lebar selang h yang seragam, karena
untuk setiap langkah program akan menghitung lebar selang h.
Ide dalam mengimplementasikan program, secara umum kita menuliskan program
dalam bentuk:

w0 = y 0
wi+1 = wi + hT n (ti , wi , h)

dengan T n (ti , wi , h) didefinisikan sebagai:

h 0 h n −1 ( n −1)
T n ( t i , wi , h ) = f ( t i , wi ) + f ( t i , wi ) + · · · + f ( t i , wi )
2 n!

24
[ ]: def fun_Taylor(y0,t,f):
n=len(t) #panjang vektor t
y_ = np.zeros(n) #inisialisasi luaran fungsi
y_[0]=y0 #inisiasi nilai awal
for i in range(n-1): #perulangan utama
h = t[i+1]-t[i] #menghitung lebar selang
y_[i+1]=y_[i]+h*f(t[i],y_[i],h) #algoritma metode Euler, f adalah
,→ruas kanan

return y_ #output dari fungsi

Untuk setiap orde metode Taylor kita akan mendefinisikan ruas kanan persamaan di-
fferensial. Sebagai contoh untuk orde 2 kita definisikan fun_T2, sedangkan untuk Taylor
orde 3 kita gunakan fun_T3 sebagai berikut:
[ ]: def fun_T2(t,y,h): #ruas kanan dari persamaan differensial
#return 1+(t-y)**2 -h*(t-y)**3
return (y**2+y)/t +h*(y**3+y**2)/t**2

def fun_T3(t,y,h): #ruas kanan dari persamaan differensial


return fun_T2(t,y,h) + h**2*(y**4+y**3)/t**3

Selanjutnya kita akan menentukan inisialisasi solusi masalah nilai awal. Kita perlu
menentukan nilai awal, nilai akhir dan lebar selang. Untuk itu kita akan menggunakan
fungsi numpy.arange dengan masukan tinit, tend, dan dt akan membuat vektor dari waktu
awal, sampai waktu akhir yang antar dua vektor berurutan terjarak sebesar dt. Karena
pada dasarnya waktu diakhir tidak dimasukan dalam perhitungan arange, maka waktu
akhir akan dilebihkan sedikit, yaitu sebesar dt.
Setelah membuat diskritisasi waktu, kita tinggal memanggil fungsi fun_Taylor yang
telah kita definisikan sebelumnya. Kita dapat melihat hasil aproksimasi solusi dengan
perintah print().
[ ]: #parameter masalah
tinit = 1
tend = 3
y0 = -2

#diskritisasi waktu

25
dt = 2**-2
t_1 = np.arange(tinit,tend+dt,dt)
# aproksimasi solusi dengan metode Taylor orde 2
y1=fun_Taylor(y0,t_1,fun_T2)

Lanjutkan untuk selang waktu yang lain dan metode yang lain
Jangan lupa untuk Plot

3.4 Perhitungan Error


Selanjutnya kita akan menghitung error solusi persamaan differensial. Kita akan meng-
gunakan metrik Euclid yang secara formal didefinisikan sebagai:
Z 4
1/2
2
E(∆ti ) = |wTaylor2 − y Eksak |2 = (y Euler (t) − y Eksak (t)) dt
2

sedangkan secara numerik apabila lebar selang adalah h maka norm diatas dapat diap-
roksimasi dengan menggunakan metode trapesium dengan cara:
" #1/2
Nt−1
∆ti
E(∆ti ) = |wTaylor2 − y Eksak |2 = (e0 + e Nt ) + ∆ti ∑ ei
2 i =1

2
dengan ei = y Taylor2 (ti ) − y Eksak (ti ) . Yang dapat disederhanakan dengan mengabaikan
kontribusi a0 dan a N t :
" #1/2
Nt−1
E(∆ti ) = ∆ti ∑ ei
i =1

Apabila tidak diketahui solusi eksak, maka bisa diganti dengan solusi dengan nilai ukur-
an waktu terkecil.
Selanjutnya kita definisikan fungsi untuk menghitung error untuk setiap pilihan wak-
tu.
[ ]: def fun_Eksak(t_ex):
return 2*t_ex/(1-2*t_ex)

def fun_err(t,y):
y_ex = fun_Eksak(t)
h = t[1] - t[0]

26
e1 = y - y_ex
return np.sqrt(h*e1.dot(e1))

err1 =fun_err(t_1,y1)
print(err1)

0.08267507354985985

Orde konvergensi dapat diperoleh dari serangkaian solusi numerik dengan parameter
∆ti yang berbeda lalu mengasumsikan bahwa error memiliki bentuk :

E(∆ti−1 ) = C (∆ti−1 )r E(∆ti ) = C (∆ti )r

yang dengan demikian r dapat ditentukan dengan :

E(∆ti )
ln E(∆t
i −1 )
r=
ln(∆ti /∆ti−1 )

Berdasarkan perhitungan solusi numerik, hitung orde konvergensi metode Euler, Ta-
ylor orde 2, 3, dan 4, bandingkan dengan orde teoritik yaitu r = 1, 2,3 dan 4
[ ]:

27
Bab 4

Modul Pertemuan 4

4.1 Teori Metode Runge Kutta


Metode Runge Kutta mencoba menentukan solusi masalah nilai awal dengan orde akura-
si yang lebih baik dibandingkan metode Euler namun menghindari perhitungan turunan
tingkat tinggi yang seringkali sulit untuk diperoleh. Ide dalam penurunan metode Ru-
nge Kutta adalah dengan melakukan beberapa kali evaluasi suku ruas kanan masalah
nilai awal dibeberapa titik yang berbeda, dan nantinya mencocokan koefisien kombinasi
linear dari titik-titik berikut sehingga diperoleh orde akurasi yang sama seperti metode
Taylor. Tergantung pada akurasinya, kita mengenal Runge Kutta orde 1,2, 3 dst. Pada
modul ini, akan disebutkan beberapa metode Runge Kutta yang umum digunakan.
Metode titik tengah yang terkategori Runge Kutta orde 2 memiliki skema diskritisasi
sebagai berikut:
w0 = α
 
h h
wi +1 = wi + h f t i + , wi + f ( t i , wi )
2 2
Metode Euler Modifikasi termasuk dalam metode Runge Kutta orde 2 dan memiliki
skema diskritisasi sebagai berikut:
w0 = α
h
wi+1 = wi + [ f (ti , wi ) + f (ti+1 , wi + h f (ti , wi )]
2

28
Metode Heun merupakan metode Runge Kutta orde 3 memiliki skema diskritisasi :

w0 = α
k 1 = f ( t i , wi )
h h
k 2 = f ( t i + , wi + k 1 )
3 3
2h 2h
k 3 = f ( t i + , wi + k 2 )
3 3
h
wi+1 = wi + (k1 + 3k3 )
4

Metode Runge Kutta orde 4 memiliki skema:

w0 = α
k 1 = f ( t i , wi )
h h
k 2 = f ( t i + , wi + k 1 )
2 2
h h
k 3 = f ( t i + , wi + k 2 )
2 2
k4 = f (ti + h, wi + hk3 )
h
wi+1 = wi + (k1 + 2k2 + 2k3 + k4 )
6

4.2 Instruksi Tugas


Lakukan approksimasi solusi persamaan differensial di bawah ini:

y2 + y
y0 = , 1 ≤ t ≤ 3, y (1) = −2
t

Dengan menggunakan metode Titik Tengah, Euler dimodifikasi, Heun dan Runge Kutta
orde 4 dengan diskretisasi 2−1 , 2−2 , 2−3 , 2−4 , 2−5 , 2−6 .. Diketahui solusi eksak :

2t
y(t) =
1 − 2t

4.3 Contoh Kode Pemrograman


Mula-mula kita akan mengerjakan untuk metode Titik Tengah. Hal pertama yang kita
lakukan adalah membaca library numpy dan memberikannya alias sebagai “np” untuk

29
memudahkan/mempersingkat pemanggilan fungsi pada library tersebut.
[1]: import numpy as np

Dilanjutkan dengan mendefinisikan fungsi yang berisi algoritme penyelesaian persa-


maan differensial yaitu fungsi fun_Midpoint. Dalam python pendefinisian fungsi diawali
dengan menggunakan kata kunci def diikuti dengan nama fungsi. Fungsi ini akan memi-
liki masukan nilai awal y0 , vektor t yang berisi diskritisasi waktu serta fungsi f . Fungsi
f merupakan fungsi python dengan masukan nilai t, y serta lebar selang pada waktu
tertentu. Program akan mengeluarkan vektor y yang merupakan aproksimasi solusi se-
cara numerik dengan metode titik tengah. Perhatikan bahwa untuk fun_Midpoint tidak
secara mengharuskan setiap elemen berurutan di t memiliki lebar selang h yang seragam,
karena untuk setiap langkah program akan menghitung lebar selang h.
[2]: def fun_Midpoint(y0,t,f):
n=len(t)
y = np.zeros(n)
y[0]=y0
for i in range(n-1):
h = t[i+1]-t[i]
k1 = y[i]+h/2*f(t[i],y[i])
y[i+1]=y[i]+h*f(t[i]+h/2,k1)

return y

Selanjutnya kita tentukan ruas kanan persamaan differensial yang ingin diaproksima-
si
[3]: def f(t,y):
"""ruas kanan dari persamaan differensial """
return (y**2+y)/t

Selanjutnya kita akan menentukan inisialisasi solusi masalah nilai awal. Kita perlu
menentukan nilai awal, nilai akhir dan lebar selang. Untuk itu kita akan menggunakan
fungsi numpy.arange dengan masukan tinit, tend, dan dt akan membuat vektor dari waktu
awal, sampai waktu akhir yang antar dua vektor berurutan terjarak sebesar dt. Karena
pada dasarnya waktu diakhir tidak dimasukan dalam perhitungan arange, maka waktu
akhir akan dilebihkan sedikit, yaitu sebesar dt.
Setelah membuat diskritisasi waktu, kita tinggal memanggil fungsi fun_Midpoint yang
telah kita definisikan sebelumnya. Kita dapat melihat hasil aproksimasi solusi dengan

30
perintah print().
[4]: #parameter masalah
tinit = 1
tend = 3
y0 = -2

#diskritisasi waktu
dt = 2**-2
t_1 = np.arange(tinit,tend+dt,dt)

# aproksimasi solusi dengan metode titik tengah


y1=fun_Midpoint(y0,t_1,f)
y1
[4]: array([-2. , -1.70833333, -1.53882812, -1.43261605, -1.3607281 ,
-1.30908308, -1.27026765, -1.24006168, -1.21590114])

Selanjutnya kita akan menghitung error solusi persamaan differensial. Kita akan
menggunakan metrik Euclid yang secara formal didefinisikan sebagai:
Z 1/2
4 2
error = |w Midpoint − y Eksak |2 = w Midpoint (t) − y Eksak (t) dt
2

sedangkan secara numerik apabila lebar selang adalah h maka norm diatas dapat diap-
roksimasi dengan
" #1/2
N 2
error = |w Midpoint − y Eksak |2 = h ∑ w Midpoint (ti ) − y Eksak (ti )
i =0

sehingga pada praktiknya kita akan perlu mendefinisikan fungsi solusi eksak, yang bisa
bergantung pada diskritisasi waktu yang kita masukan. Dilanjutkan dengan mendefini-
sikan fungsi untuk menghitung error untuk setiap pilihan waktu.
[5]: def fun_Eksak(t_ex):
#Menghitung solusi eksak
return 2*t_ex/(1-2*t_ex)

def fun_err(t,y):

31
y_ex = fun_Eksak(t)
h = t[1] - t[0]
e1 = y[1:-1] - y_ex[1:-1]
return np.sqrt(h*e1.dot(e1))

err1 =fun_err(t_1,y1)
print(err1)

0.03979050824399428

4.4 Visualisasi
Pada bagian ini kita akan membandingkan secara visual solusi eksak dengan solusi nu-
merik menggunakan metode titik tengah. Untuk itu kita akan menggunakan library ma-
tplotlib.pyplot . Library ini memiliki banyak kemiripan dengan visualisasi pada matlab.
[6]: import matplotlib.pyplot as plt

Selanjutnya kita plot solusi eksak dan solusi numerik dengan menggunakan perin-
tah matplotlib.pyplot.plot . Pada perintah kita menentukan sumbu horizontal dan sum-
bu vertikal. Pada perintah ini ada pilihan untuk memberikan nama/label pada gra-
fik. Nama ini nantinya bisa ditampilkan pada legenda grafik. Selain itu kita bisa me-
nentukan jenis garis yang digunakan, misalnya perintah “–r” untuk garis putus-putus
berwarna merah (green). Kemungkinan garis yang lain dapat dibaca lebih lengkap pa-
da:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html .Legenda grafik di-
tampilkan dengan perintah legend sedang perintah grid untuk menampilkan garis-garis
bantu pada grafik, dan perintah show untuk menampilkan grafik
[7]: t_ex = np.linspace(tinit,tend,201)
plt.plot(t_ex,fun_Eksak(t_ex), label = 'eksak')
plt.plot(t_1,y1,'--r', label = 'Midpoint')
plt.xlabel('t') #label sumbu horizontal
plt.ylabel('y') #label sumbu vertikal
plt.legend()
plt.grid() #menampilkan grid
plt.title('Perbandingan solusi untuk lebar selang 0.25')
plt.show()

32
[ ]:

33
Bab 5

Modul Pertemuan 6

5.1 Teori Adams Bashforth dan Adams Moulton


Adams Bashforth menggunakan pendekatan lain untuk memperoleh peningkatan akura-
si solusi persamaan dibandingkan metode-metode sebelumnya. Berbeda dengan metode
yang sebelumnya dipelajari, yang hanya menggunakan hasil perhitungan pada waktu se-
karang untuk estimasi nilai satu langkah kedepan, pada metode Adams Bashforth, hasil
perhitungan pada waktu-waktu sebelumnya dipergunakan kembali untuk menghitung
estimasi nilai pada satu langkah kedepan. Sebagaimana pada metode Taylor dan Runge
Kutta, semakin banyak perhitungan yang digunakan, maka akan semakin akurat dan ba-
ik hasil yang digunakan. Metode Adams-Bashforth orde 2 memiliki diskritisasi sebagai
berikut:
w0 = α, w1 = α1
h
wi+1 = wi + [3 f (ti , wi ) − f (ti−1 , wi−1 )]
2
Pada prakteknya w1 bisa diperoleh dari beberapa cara, baik diketahui disoal maupun
diaproksimasi dahulu dengan metode satu langkah, misal metode Runge Kutta. Perhi-
tungan f (ti−1 , wi−1 ) bisa diperoleh dari perhitungan pada waktu sebelumnya, sehingga
tidak perlu dihitung ulang.
Selain metode Adams Bashford ada juga metode lain yang yaitu metode Adams Mo-
ulton yang menyelesaikan persamaan differensial secara implisit. Untuk kasus satu lang-
kah, dengan ketelitian orde 2, skema diskritisasi diperoleh dengan:

w0 = α

34
h
wi+1 = wi + [ f (ti+1 , wi+1 ) + f (ti , wi )]
2
Perhatikan bahwa wi+1 muncul diruas kiri dan ruas kanan. Secara umum tidak ada solusi
analitik untuk menyelesaikan persamaan diatas, namun bisa digunakan metode mencari
akar persamaan untuk menentukan nilai wi+1 misalnya menggunakan metode Newton-
Raphson.

5.2 Instruksi Tugas


Lakukan approksimasi solusi persamaan differensial di bawah ini:

y2 + y
y0 = , 1 ≤ t ≤ 3, y (1) = −2
t

Dengan menggunakan metode Adams-Bashforth orde 2 dan Adams Moulton orde 2. Di-
ketahui solusi eksak :
2t
y(t) =
1 − 2t

5.3 Contoh Kode Penyelesaian

5.3.1 Penyelesaian Metode Adams-Bashforth


Mula-mula kita akan mengerjakan untuk metode Titik Tengah. Hal pertama yang kita
lakukan adalah membaca library numpy dan memberikannya alias sebagai “np” untuk
memudahkan/mempersingkat pemanggilan fungsi pada library tersebut.
[1]: import numpy as np

Dilanjutkan dengan mendefinisikan fungsi yang berisi algoritme penyelesaian per-


samaan differensial yaitu fungsi fun_AB2. Dalam python pendefinisian fungsi diawali
dengan menggunakan kata kunci def diikuti dengan nama fungsi. Fungsi ini akan me-
miliki masukan nilai awal y0 , vektor t yang berisi diskritisasi waktu serta fungsi f . Fungsi
f merupakan fungsi python dengan masukan nilai t, y serta lebar selang pada waktu ter-
tentu. Program akan mengeluarkan vektor y yang merupakan aproksimasi solusi secara
numerik dengan metode titik tengah.
Contoh implementasinya dapat dilihat pada program berikut:
[2]: def fun_AB2(y0,y1,t,f):
n=len(t)

35
y = np.zeros(n)
y[0]=y0
y[1]=y1
h = t[1]-t[0]
f0 = f(t[0],y[0])
f1 = f(t[1],y[1])
for i in range(1,n-1):
y[i+1] = y[i]+h/2*(3*f1-f0)
f0 = f1
f1 = f(t[i+1],y[i+1])

return y

Selanjutnya kita tentukan ruas kanan persamaan differensial yang ingin diaproksima-
si
[3]: def f(t,y):
"""ruas kanan dari persamaan differensial """
return (y**2+y)/t

def fun_Eksak(t_ex):
#Menghitung solusi eksak
return 2*t_ex/(1-2*t_ex)

Selanjutnya kita akan menentukan inisialisasi solusi masalah nilai awal. Kita perlu
menentukan nilai awal, nilai akhir dan lebar selang. Untuk itu kita akan menggunakan
fungsi numpy.arange dengan masukan tinit, tend, dan dt akan membuat vektor dari waktu
awal, sampai waktu akhir yang antar dua vektor berurutan terjarak sebesar dt. Karena
pada dasarnya waktu diakhir tidak dimasukan dalam perhitungan arange, maka waktu
akhir akan dilebihkan sedikit, yaitu sebesar dt.
Setelah membuat diskritisasi waktu, kita tinggal memanggil fungsi fun_AB2 yang te-
lah kita definisikan sebelumnya. Kita dapat melihat hasil aproksimasi solusi dengan per-
intah print().
[4]: #parameter masalah
tinit = 1
tend = 3
y0 = -2

36
#diskritisasi waktu
dt = 2**-2
y1 = fun_Eksak(tinit+dt)
t_1 = np.arange(tinit,tend+dt,dt)

# aproksimasi solusi dengan metode titik tengah


y=fun_AB2(y0,y1,t_1,f)
y
[4]: array([-2. , -1.66666667, -1.58333333, -1.46354167, -1.39513514,
-1.34023063, -1.2986869 , -1.26583442, -1.23934277])

Selanjutnya kita akan menghitung error solusi persamaan differensial. Kita akan
menggunakan metrik Euclid yang secara formal didefinisikan sebagai:
Z 4
1/2
2
E(∆ti ) = |w Num − y Eksak |2 = (y Num (t) − y Eksak (t)) dt
2

sedangkan secara numerik apabila lebar selang adalah h maka norm diatas dapat diap-
roksimasi dengan menggunakan metode trapesium dengan cara:
" #1/2
Nt−1
∆ti
E(∆ti ) = |w Num − y Eksak |2 = (e0 + e Nt ) + ∆ti ∑ ei
2 i =1

dengan ei = (w Num (ti ) − y Eksak (ti ))2 . Yang dapat disederhanakan dengan mengabaikan
kontribusi a0 dan a N t :
" #1/2
Nt−1
E(∆ti ) = ∆ti ∑ ei
i =1

Apabila tidak diketahui solusi eksak, maka bisa diganti dengan solusi dengan nilai ukur-
an waktu terkecil.
[5]: def fun_err(t,y):
y_ex = fun_Eksak(t)
h = t[1] - t[0]
e1 = y[1:-1] - y_ex[1:-1]
return np.sqrt(h*e1.dot(e1))

err1 =fun_err(t_1,y)

37
print(err1)

0.0742393453483327

5.3.2 Perbandingan dengan Metode Runge Kutta


Selanjutnya kita akan membandingkan dengan metode titik tengah yang sama-sama me-
miliki orde 2:
[6]: def fun_Midpoint(y0,t,f):
n=len(t)
y = np.zeros(n)
y[0]=y0
for i in range(n-1):
h = t[i+1]-t[i]
k1 = y[i]+h/2*f(t[i],y[i])
y[i+1]=y[i]+h*f(t[i]+h/2,k1)

return y
[7]: y_mid =fun_Midpoint(y0,t_1,f)
err_mid =fun_err(t_1,y_mid)
print(err_mid)

0.03979050824399428

terlihat bahwa secara umum metode titik tengah lebih baik dibandingkan dengan me-
tode Adams-Bashfort. Begitupun apabila dibandingkan secara grafis:
[9]: import matplotlib.pyplot as plt
t_ex = np.linspace(tinit,tend,201)
plt.plot(t_ex,fun_Eksak(t_ex), label = 'eksak')
plt.plot(t_1,y,'--r', label = 'AB2')
plt.plot(t_1,y_mid,'-*g', label = 'Midpoint')
plt.xlabel('t') #label sumbu horizontal
plt.ylabel('y') #label sumbu vertikal
plt.legend()
plt.grid() #menampilkan grid
plt.title('Perbandingan solusi untuk lebar selang 0.25')

38
plt.show()

Meskipun demikian kelebihan dari metode banyak langkah adalah lebih efisien, hal
ini mengingat lebih sedikit komputasi yang dilakukan. Hal ini bisa dilihat misalnya dari
kode berikut yang membandingkan waktu komputasi fungsi midpoint dan AB2 untuk
10000 perulangan.
[10]: import timeit
t_mp = timeit.timeit(lambda: fun_Midpoint(y0,t_1,f), number=10000)
t_ab2 = timeit.timeit(lambda: fun_AB2(y0,y1,t_1,f), number=10000)
print(t_mp, t_ab2)

0.3258266999996522 0.19282049999992523

39
5.3.3 Penyelesaian Metode Adams Moulton
Sebagai contoh untuk kasus persamaan pada modul ini, metode Adams Moulton dua
langkah dapat dituliskan dengan:
" #
h wi2+1 + wi+1 wi2 + wi
wi +1 = wi + +
2 t i +1 ti

dengan menuliskan:

h wi2+1 + wi+1 h wi2 + wi


L ( w i +1 ) = wi +1 − − wi −
2 t i +1 2 ti

dengan turunan:
dL h 2wi+1 + 1
= 1−
dwi+1 2 t i +1
maka pada setiap langkah metode implisit kita harus menentukan wi+1 sehingga
L(wi+1 ) = 0 berikut adalah contoh implementasi metode Adams Moulton 1 langkah:
[17]: def fun_AM(y0,t,f, fdot):
tol = 10**(-5)
n=len(t)
y = np.zeros(n)
y[0]=y0
h = t[1]-t[0]
f0 = f(t[0],y[0])
for i in range(0,n-1):
ytemp = y[i]
ftemp = f(t[i+1], ytemp)
L = ytemp - y[i] - h/2*(ftemp +f0)
#iterasi menggunakan Newton Raphson
while abs(L)>tol:
dL = (1-h/2*fdot(t[i+1], ytemp))
ytemp = ytemp - L / dL
ftemp = f(t[i+1], ytemp)
L = ytemp - y[i] - h/2*(ftemp +f0)

y[i+1] = ytemp

40
f0 = ftemp

return y

def fdot(t,y):
"""turunan dari ruas kanan dari persamaan differensial """
return (2*y+1)/t

dengan menggunakan diskritisasi yang sama seperti sebelumnya kita peroleh:


[18]: yim1 = fun_AM(y0,t_1,f, fdot)
yim1
[18]: array([-2. , -1.64411058, -1.47915065, -1.3823379 , -1.31835491,
-1.27283074, -1.23875049, -1.21226636, -1.19108649])

yang apabila dibandingkan dengan metode lain menghasilkan error yang paling kecil:
[19]: err_am1 =fun_err(t_1,yim1)
print(err1, err_mid, err_am1)

0.0742393453483327 0.03979050824399428 0.021630026704102103

Hal ini dapat diamati pula dengan membandingkannya dengan metode orde 2 yang
lain:
[20]: plt.plot(t_ex,fun_Eksak(t_ex), label = 'eksak')
plt.plot(t_1,y,'--r', label = 'AB2')
plt.plot(t_1,y_mid,'-*g', label = 'Midpoint')
plt.plot(t_1,yim1,'-.m', label = 'AM1')
plt.xlabel('t') #label sumbu horizontal
plt.ylabel('y') #label sumbu vertikal
plt.legend()
plt.grid() #menampilkan grid
plt.title('Perbandingan solusi untuk lebar selang 0.25')
plt.show()

41
Meskipun demikian, karena setiap langkahnya harus melakukan iterasi, maka secara
umum untuk lebar yang sama, diperlukan waktu yang lebih lama untuk menggunak-
an metode ini. Meskipun demikian, perlu diingat pula bahwa metode Adams Moulton
dapat menggunakan lebar selang yang lebih besar dibandingkan dengan metode runge
kutta maupun Adams Bashforth
[21]: t_mp = timeit.timeit(lambda: fun_Midpoint(y0,t_1,f), number=10000)
t_ab2 = timeit.timeit(lambda: fun_AB2(y0,y1,t_1,f), number=10000)
t_am2 = timeit.timeit(lambda: fun_AM(y0,t_1,f, fdot), number=10000)
print(t_mp, t_ab2, t_am2)

0.3384894999999233 0.1864319999995132 0.8527562999997826

5.4 Orde Konvergensi


Orde konvergensi dapat diperoleh dari serangkaian solusi numerik dengan parameter
∆ti yang berbeda lalu mengasumsikan bahwa error memiliki bentuk :

E(∆ti−1 ) = C (∆ti−1 )r E(∆ti ) = C (∆ti )r

42
yang dengan demikian r dapat ditentukan dengan :

E(∆ti )
ln E(∆t
i −1 )
r=
ln(∆ti /∆ti−1 )

untuk metode Adams Bashfort 2:


[22]: dti = 2**-6
t_i = np.arange(tinit,tend+dti,dti)
y1 = fun_Eksak(tinit+dti)
ei_ab2 = fun_err(t_i, fun_AB2(y0,y1,t_i,f))
dti1 = 2**-5
y1 = fun_Eksak(tinit+dti1)
t_i1 = np.arange(tinit,tend+dti1,dti1)
ei1_ab2 = fun_err(t_i1, fun_AB2(y0,y1,t_i1,f))
rab2 = np.log(ei_ab2/ei1_ab2)/np.log(0.5)
rab2
[22]: 1.9645139385963357

Sedangkan untk Adams Moulton 1 langkah :


[24]: dti = 2**-5
t_i = np.arange(tinit,tend+dti,dti)
ei_am2 = fun_err(t_i, fun_AM(y0,t_i,f,fdot))
dti1 = 2**-4
t_i1 = np.arange(tinit,tend+dti1,dti1)
ei1_am2 = fun_err(t_i1, fun_AM(y0,t_i1,f, fdot))
rab2 = np.log(ei_am2/ei1_am2)/np.log(0.5)
rab2
[24]: 2.130951343108812

[93]: alpha = -3
def f_stiff(t,y):
return alpha*y

def f_stiff_dot(t,y):
return alpha

43
def y_stiff_ex(t):
return np.exp(alpha*t)
[94]: tinit =0
tend = 5
y0 = 1
#diskritisasi waktu
dt = 0.7
t_1 = np.arange(tinit,tend+dt,dt)
y_st_mp = fun_Midpoint(y0,t_1,f_stiff)
y_st_am = fun_AM(y0,t_1,f_stiff,f_stiff_dot)
[96]: plt.plot(t_1, y_st_mp, label = 'MP')
plt.plot(t_1, y_st_am, label = 'AM')
plt.plot(t_1,y_stiff_ex(t_1), label = 'Exact')
plt.legend()
[96]: <matplotlib.legend.Legend at 0x15e50db3860>

[ ]:

[ ]:

44
Bab 6

Modul Pertemuan 7

6.1 Teori Metode Prediktor Korektor


Metode Prediktor Korektor 2 langkah menggunakan metode eksplisit Adams-Bashfort
sebagai prediktor dan Adams Moulton 1 langkah (metode trapesium) sebagai korektor.
Sehingga skema prediktor korektor adalah sebagai berikut:

w0 = α, w1 = α1

h
w p = wi + [3 f (ti , wi ) − f (ti−1 , wi−1 )]
2
h
wi+1 = wi + [ f (ti+1 , w p ) + f (ti , wi )]
2
Pada prakteknya w1 bisa diperoleh dari beberapa cara, baik diketahui disoal maupun
diaproksimasi dahulu dengan metode satu langkah, misal metode Runge Kutta.
Perhitungan f (ti−1 , wi−1 ) bisa diperoleh dari perhitungan pada waktu sebelumnya,
sehingga tidak perlu dihitung ulang.
Sebagaimana metode-metode lain, metode prediktor korektor dapat ditingkatkan
ordenya dengan melakukan lebih banyak komputasi. Berikut adalah skema untuk Meto-
de Prediktor Korektor orde 3:

w0 = α, w1 = α1 , w2 = α2
h
w p = wi + [23 f (ti , wi ) − 16 f (ti−1 , wi−1 ) + 5 f (ti−2 , wi−2 )]
12
h
wi +1 = wi + [5 f (ti+1 , w p ) + 8 f (ti , wi ) − f (ti−1 , wi−1 )]
12

45
Sedangkan untuk Metode Prediktor Korektor orde 4:

w0 = α, w1 = α1 , w2 = α2 , w3 = α3
h
w p = wi + [55 f (ti , wi ) − 59 f (ti−1 , wi−1 ) + 37 f (ti−2 , wi−2 ) − 9 f (ti−3 , wi−3 )]
24
h
wi +1 = wi + [9 f (ti+1 , w p ) + 19 f (ti , wi ) − 5 f (ti−1 , wi−1 ) + f (ti−2 , wi−2 )]
24

6.2 Instruksi Tugas


1. Lakukan approksimasi solusi persamaan differensial di bawah ini:

y2 + y
y0 = , 1 ≤ t ≤ 3, y (1) = −2
t

Dengan menggunakan metode Prediktor Korektor orde 2, orde 3 dan orde 4. Gu-
nakan metode Runge Kutta untuk memperoleh beberapa nilai awal. Diketahui so-
lusi eksak :
2t
y(t) =
1 − 2t
2. Bandingkan hasil akurasi dan juga waktu yang diperlukan antara metode prediktor
korektor, Adams-Bashforth dan Runge Kutta masing-masing untuk orde 2,3,dan 4
dengan lebar selang h = 2−5

6.3 Contoh Kode Pemrograman


Hal pertama yang kita lakukan adalah membaca library numpy dan memberikannya ali-
as sebagai “np” untuk memudahkan/mempersingkat pemanggilan fungsi pada library
tersebut.
[1]: import numpy as np

Dilanjutkan dengan mendefinisikan fungsi yang berisi algoritme penyelesaian per-


samaan differensial yaitu fungsi fun_PK2. Dalam python pendefinisian fungsi diawali
dengan menggunakan kata kunci def diikuti dengan nama fungsi. Fungsi ini akan me-
miliki masukan nilai awal y0 , vektor t yang berisi diskritisasi waktu serta fungsi f . Fungsi
f merupakan fungsi python dengan masukan nilai t, y serta lebar selang pada waktu ter-
tentu. Program akan mengeluarkan vektor y yang merupakan aproksimasi solusi secara
numerik dengan metode titik tengah.

46
Contoh implementasinya dapat dilihat pada program berikut:
[2]: def fun_PK2(y0,y1,t,f):
n=len(t)
y = np.zeros(n)
y[0]=y0
y[1]=y1
h = t[1]-t[0]
f0 = f(t[0],y[0])
for i in range(1,n-1):
f1 = f(t[i],y[i])
yp = y[i]+h/2*(3*f1-f0)
y[i+1] = y[i]+h/2*(f(t[i+1],yp)+f1)
f0 = f1

return y

def fun_Midpoint(y0,t,f):
n=len(t)
y = np.zeros(n)
y[0]=y0
for i in range(n-1):
h = t[i+1]-t[i]
k1 = y[i]+h/2*f(t[i],y[i])
y[i+1]=y[i]+h*f(t[i]+h/2,k1)

return y

Selanjutnya kita tentukan ruas kanan persamaan differensial yang ingin diaproksima-
si
[3]: def f(t,y):
"""ruas kanan dari persamaan differensial """
return (y**2+y)/t

def fun_Eksak(t_ex):
#Menghitung solusi eksak

47
return 2*t_ex/(1-2*t_ex)

Selanjutnya kita akan menentukan inisialisasi solusi masalah nilai awal. Kita perlu
menentukan nilai awal, nilai akhir dan lebar selang. Untuk itu kita akan menggunakan
fungsi numpy.arange dengan masukan tinit, tend, dan dt akan membuat vektor dari waktu
awal, sampai waktu akhir yang antar dua vektor berurutan terjarak sebesar dt. Karena
pada dasarnya waktu diakhir tidak dimasukan dalam perhitungan arange, maka waktu
akhir akan dilebihkan sedikit, yaitu sebesar dt.
Setelah membuat diskritisasi waktu, kita tinggal memanggil fungsi fun_AB2 yang te-
lah kita definisikan sebelumnya. Kita dapat melihat hasil aproksimasi solusi dengan per-
intah print().
[4]: #parameter masalah
tinit = 1
tend = 3
y0 = -2
#diskritisasi waktu
dt = 2**-2
t_1 = np.arange(tinit,tend+dt,dt)
y1 = fun_Midpoint(y0,t_1[:2], f)[1]
# aproksimasi solusi dengan metode titik tengah
y_pk2=fun_PK2(y0,y1,t_1,f)
y_pk2
[4]: array([-2. , -1.70833333, -1.50818393, -1.39938148, -1.33061882,
-1.28251071, -1.24678522, -1.21915097, -1.19711708])

Selanjutnya kita akan menghitung error solusi persamaan differensial. Kita akan
menggunakan metrik Euclid yang secara formal didefinisikan sebagai:
Z 4
1/2
2
E(∆ti ) = |w Num − y Eksak |2 = (y Num (t) − y Eksak (t)) dt
2

sedangkan secara numerik apabila lebar selang adalah h maka norm diatas dapat diap-
roksimasi dengan menggunakan metode trapesium dengan cara:
" #1/2
Nt−1
∆ti
E(∆ti ) = |w Num − y Eksak |2 = (e0 + e Nt ) + ∆ti ∑ ei
2 i =1

48
dengan ei = (w Num (ti ) − y Eksak (ti ))2 . Yang dapat disederhanakan dengan mengabaikan
kontribusi a0 dan a N t :
" #1/2
Nt−1
E(∆ti ) = ∆ti ∑ ei
i =1

Apabila tidak diketahui solusi eksak, maka bisa diganti dengan solusi dengan nilai ukur-
an waktu terkecil.
[5]: def fun_err(t,y):
y_ex = fun_Eksak(t)
h = t[1] - t[0]
e1 = y[1:-1] - y_ex[1:-1]
return np.sqrt(h*e1.dot(e1))

err_pk2 =fun_err(t_1,y_pk2)
print(err_pk2)

0.021452676652160815

6.4 Perbandingan dengan Metode Lain


Selanjutnya kita akan membandingkan dengan metode titik tengah dan Adams Bashfort
2 langkah yang sama-sama memiliki orde 2:
[6]: def fun_AB2(y0,y1,t,f):
n=len(t)
y = np.zeros(n)
y[0]=y0
y[1]=y1
h = t[1]-t[0]
f0 = f(t[0],y[0])
for i in range(1,n-1):
f1 = f(t[i],y[i])
y[i+1] = y[i]+h/2*(3*f1-f0)
f0 = f1

return y

49
[7]: y_mid =fun_Midpoint(y0,t_1,f)
err_mid =fun_err(t_1,y_mid)
y_ab2 =fun_AB2(y0,y1, t_1,f)
err_ab2 =fun_err(t_1,y_ab2)
print('Error metode titik tengah adalah', err_mid ,'\nError metode Adams
,→Bashfort adalah', err_ab2, '\nError metode Prediktor Korektor adalah',

,→err_pk2)

Error metode titik tengah adalah 0.03979050824399428


Error metode Adams Bashfort adalah 0.08979153885049947
Error metode Prediktor Korektor adalah 0.021452676652160815

Sedangkan apabila kita bandingkan secara grafis:


[9]: import matplotlib.pyplot as plt
t_ex = np.linspace(tinit,tend,201)
plt.plot(t_ex,fun_Eksak(t_ex), linewidth = 3, label = 'eksak')
plt.plot(t_1,y_pk2,'-.k', label = 'PK2')
plt.plot(t_1,y_ab2,'--r', label = 'AB2')
plt.plot(t_1,y_mid,'-*g', label = 'Midpoint')
plt.xlabel('t') #label sumbu horizontal
plt.ylabel('y') #label sumbu vertikal
plt.legend()
plt.grid() #menampilkan grid
plt.title('Perbandingan solusi untuk lebar selang 0.25')
plt.show()

50
Selanjutnya kita juga akan membandingkan waktu komputasi dari ketiga metode:
[10]: import timeit
t_mp = timeit.timeit(lambda: fun_Midpoint(y0,t_1,f), number=10000)
t_pk2 = timeit.timeit(lambda: fun_PK2(y0,y1,t_1,f), number=10000)
t_ab2 = timeit.timeit(lambda: fun_AB2(y0,y1,t_1,f), number=10000)

Kode berikut merekap hasil yang diperoleh pada bagian ini:


[11]: import pandas as pd
pd.DataFrame([[t_pk2, err_pk2],[t_ab2, err_ab2] ,[t_mp,err_mid]], columns
,→= ['Time', 'Error'], index = ['PK2','AB2', 'Midpoint'])

[11]: Time Error


PK2 0.362577 0.021453
AB2 0.216579 0.089792
Midpoint 0.350463 0.039791

Kita dapat mengamati bahwa secara umum waktu yang diperlukan metode Prediktor
Korektor hampir sama dengan metode Midpoint, namun error metode Prediktor Korek-
tor lebih kecil dibandingkan dengan metode Midpoint.

51
Periksalah: 1. Apakah hal diatas juga berlaku apabila lebar selang diperkecil menjadi
2−5 2. Selanjutnya periksalah juga untuk kasus metode Runge Kutta, Adams Bashfort
dan Prediktor Korektor orde 3 dan 4 apakah hal diatas juga berlaku?

52
Bab 7

Modul Pertemuan 9

7.1 Teori Metode Linear Shooting


Pada modul kali ini kita akan menyelesaikan masalah nilai batas linear berbentuk:

y00 = p( x )y0 + q( x )y + r ( x ) dengan y( a) = α dan y(b) = β

Untuk menyelesaikan masalah nilai batas ini, kita akan menggunakan metode linear sho-
oting. Yang mana kita harus menyelesaikan dua masalah nilai awal berikut berikut:

y100 = p( x )y10 + q( x )y1 + r ( x ) dengan y1 ( a) = α dan y10 ( a) = 0

dan
y200 = p( x )y20 + q( x )y2 dengan y2 ( a) = 0 dan y20 ( a) = 1

yang dapat dinyatakan dalam bentuk sistem persamaan linear dengan memisalkan
z1 = y1 , z2 = y10 , z3 = y2 , z4 = y20 menjadi:

z10 = z2
z20 = p( x )z2 + q( x )z1 + r ( x )
z30 = z4
z40 = p( x )z4 + q( x )z3

dengan nilai awal z1 ( a) = α, z2 ( a) = 0, z3 ( a) = 0, z4 ( a) = 1. Metode-metode yang


telah dipelajari sebelumnya dapat digunakan untuk menyelesaikan sistem persamaan

53
differensialkan diatas. Setelah memperoleh solusi dari sistem persamaan linear, maka
solusi awal persamaan differensial adalah :

β − y1 ( b )
y ( x ) = y1 ( x ) + y2 ( x )
y2 ( b )

7.2 Instruksi Tugas


1. Diberikan masalah nilai batas :

π π
y00 + 4y = cos x, 0≤x≤ , y(0) = 0, y( ) = 0
4 4

yang memiliki solusi eksak:



1 2 1
y( x ) = − cos 2x − sin 2x + cos x
3 6 3

Selesaikan masalah nilai batas diatas menggunakan metode linear shooting dengan
menggunakan metode Euler, Runge Kutta orde 3 dan Prediktor Korektor orde 3
untuk menyelesaikan masalah nilai awal yang bersesuaian. Hitunglah error yang
diperoleh menggunakan metode-metode tersebut. Apakah ada perbedaan error pa-
da masing-masing metode numerik ?
π π
2. Variasikan ukuran langkah (dx) menjadi 16 dan 64 , apa yang terjadi dengan nilai
errornya ?

3. Selesaikan masalah nilai batas berikut dan hitunglah errornya

4y0 2y 2 ln x 1
y00 = − − 2+ 2 , 1 ≤ x ≤ 2, y(1) = , y(2) = ln 2
x x x 2
4 2
Solusi eksak: y( x ) = x − x2
+ ln x − 32 Gunakan h = 0.05

7.3 Contoh Kode Pemrograman


Pada implementasinya, mula-mula kita akan mengimport library yang diperlukan:
[1]: import numpy as np
import matplotlib.pyplot as plt

54
Selanjutnya kita akan mendefinisikan implementasi dari penyelesaian masalah nilai
awal yaitu metode Runge Kutta orde 4 dengan input berupa vektor. Bisa juga menggu-
nakan metode penyelesaian yang lain.
[2]: def fun_RK4(y0,t,f):
# The Euler Method for approximating solution of differential
,→equation.

# This method solve Initial Value Problem:


# y' = f, with y[t[0]]=y0
# The input is the function f, initial value and the time
,→discretization

# in essence there is no restriction that the time have constant


,→discretization

n=len(t)
y = np.zeros((n,len(y0)))
y[0]=y0
for i in range(n-1):
h = t[i+1]-t[i]
k1 = h*f(t[i],y[i])
k2 = h*f(t[i]+h/2,y[i]+k1/2)
k3 = h*f(t[i]+h/2,y[i]+k2/2)
k4 = h*f(t[i]+h,y[i]+k3)
y[i+1]=y[i]+1/6*(k1+2*k2+2*k3+k4)

return y

Pada kode dibawah ini kita akan mendefinisikan fungsi yang berada pada ruas kanan
persamaan differensial

z10 = z2
z20 = −4z1 + cos x
z30 = z4
z40 = −4z3

dengan nilai awal z1 ( a) = 0, z2 ( a) = 0, z3 ( a) = 0, z4 (0) = 1.

55
[3]: def f1(t,y):
"""ruas kanan dari persamaan differensial """
f_out = np.zeros(4)
f_out[0] = y[1]
f_out[1] = -4*y[0]+np.cos(t)
f_out[2] = y[3]
f_out[3] = -4*y[2]
return f_out

def f1_ex(t):
return -1/3*np.cos(2*t) - np.sqrt(2)/6*np.sin(2*t)+np.cos(t)/3

Selanjutnya pada kode dibawah ini kita akan menyelesaikan sistem persamaan diffe-
rensial linear menggunakan metode Runge Kutta orde 4:
[5]: tinit = 0
tend = np.pi/4
dt = np.pi/32
y0 = np.array([0,0,0,1])
t_1 = np.arange(tinit,tend+dt,dt)
y1 = fun_RK4(y0, t_1, f1)

Selanjutnya kita akan menghitung y berdasarkan persamaan (3):


[6]: y = y1[:,0]+(0-y1[-1,0])/y1[-1,2]*y1[:,2]

Berikut adalah perbandingan grafik solusi numerik dengan solusi eksak, perhatikan
bahwa hasil yang diperoleh cukup akurat.
[7]: plt.plot(t_1,y,"-.", label = 'numeric')
plt.plot(t_1,f1_ex(t_1),':', label = 'exact')
plt.legend()
plt.show()

56
untuk mengkuantifikasi error, maka kita dapat menggunakan metrik Euklidean seba-
gaimana modul-modul sebelumnya.
[8]: def fun_err(t,y):
y_ex = f1_ex(t)
h = t[1] - t[0]
e1 = y[1:-1] - y_ex[1:-1]
return np.sqrt(h*e1.dot(e1))

err =fun_err(t_1,y)
err
[8]: 2.169000417470426e-06

57
Bab 8

Modul Pertemuan 10

8.1 Teori : Non-Linear Shooting Method


Pada modul kali ini kita akan menyelesaikan masalah nilai batas umum berbentuk:

y00 = f ( x, y, y0 ) dengan y( a) = α dan y(b) = β

Untuk menyelesaikan masalah nilai batas ini, kita akan menggunakan metode non-linear
shooting dengan bantuan metode Newton. Masalah dirubah menjadi harus menentukan
t yang memenuhi masalah nilai awal berikut berikut:

y00 = f ( x, y, y0 ) dengan y( a) = α dan y0 ( a) = t

dan kondisi y(b) = β. Kita akan menyatakan y( x, t) sebagai solusi dari masalah nilai
awal (2) dengan nilai parameter t. Iterasi Newton pada kasus ini akan berbentuk:

y(b, tk−1 ) − β
t k = t k −1 − ∂y
∂t ( b, tk−1 )

∂y
Untuk menentukan ∂t maka kita menurunkan persamaan (2) terhadap t: sehingga
diperoleh:
∂y00 ∂ f ∂x ∂ f ∂y ∂ f ∂y0
= + + 0
∂t ∂x ∂t ∂y ∂t ∂y ∂t
Karena x dan t saling bebas maka ∂x
∂t = 0 sehingga persamaan menajdi :

∂y00 ∂ f ∂y ∂ f ∂y0
= + 0
∂t ∂y ∂t ∂y ∂t

58
∂y
yang apabila disubstitusikan z = ∂t akan menjadi:

∂f ∂f
z00 = z + 0 z0
∂y ∂y
dengan nilai awal: z( a, t) = 0 dan z0 ( a, t) = 1. Sehingga pada setiap iterasi harus disele-
saikan masalah nilai awal (2) dan (4) dan mengganti nilai t berdasarkan iterasi (3). Seba-
gaimana pada metode Linear Shooting, penyelesaian masalah nilai awal dapat menggu-
nakan metode-metode numerik.
Masalah nilai awal (2) dan (4) dapat dituliskan menjadi satu sistem persamaan diffe-
∂y0
rensial orde 1 dengan pemisalan z1 = y, z2 = y0 , z3 =
∂y
∂t , z4 = ∂t menjadi:

z10 = z2
z20 = f ( x, z1 , z2 )
z30 = z4
∂f ∂f
z40 = ( x, z1 , z2 )z3 + ( x, z1 , z2 )z4
∂z1 ∂z2

8.2 Instruksi Tugas


Diberikan masalah nilai batas :

y00 = −(y0 )2 − y + ln x, 1 ≤ x ≤ 2, y(1) = 0, y(2) = ln 2

yang memiliki solusi eksak:



1 2 1
y( x ) = − cos 2x − sin 2x + cos x
3 6 3

1. Selesaikan masalah nilai batas diatas menggunakan metode linear shooting dengan
menggunakan metode Euler, Runge Kutta orde 3 dan Prediktor Korektor orde 3
untuk menyelesaikan masalah nilai awal yang bersesuaian. Hitunglah error yang
diperoleh menggunakan metode-metode tersebut. Apakah ada perbedaan error pa-
da masing-masing metode numerik ?

2. Variasikan ukuran langkah (dx) menjadi 0.1 dan 0.05, apa yang terjadi dengan nilai
errornya ?

59
3. Selesaikan masalah nilai batas berikut dan hitunglah errornya

2(y0 )2 9y2
y00 = − 5 + 4x, 1 ≤ x ≤ 2, y(1) = 0, y(2) = ln 256
x3 x

Solusi eksak: y( x ) = x3 ln x Gunakan h = 0.05

8.3 Contoh Kode Pemrograman


Pada implementasinya, mula-mula kita akan mengimport library yang diperlukan:
[2]: import numpy as np
import matplotlib.pyplot as plt

Selanjutnya kita akan mendefinisikan implementasi dari penyelesaian masalah nilai


awal yaitu metode Runge Kutta orde 4 dengan input berupa vektor. Bisa juga menggu-
nakan metode penyelesaian yang lain.
[3]: def fun_RK4(y0,x,f):
# The Euler Method for approximating solution of differential
,→equation.

# This method solve Initial Value Problem:


# y' = f, with y[t[0]]=y0
# The input is the function f, initial value and the time
,→discretization

# in essence there is no restriction that the time have constant


,→discretization

n=len(x)
y = np.zeros((n,len(y0)))
y[0]=y0
for i in range(n-1):
h = x[i+1]-x[i]
k1 = h*f(x[i],y[i])
k2 = h*f(x[i]+h/2,y[i]+k1/2)
k3 = h*f(x[i]+h/2,y[i]+k2/2)
k4 = h*f(x[i]+h,y[i]+k3)
y[i+1]=y[i]+1/6*(k1+2*k2+2*k3+k4)

60
return y

Untuk modul ini, masalah nilai batas yang akan diselesaikan adalah:

y00 = −(y0 )2 − y + ln x, 1 ≤ x ≤ 2, y(1) = 0, y(2) = ln 2

yang memiliki solusi eksak:


y( x ) = ln x

Untuk kasus ini, maka diperoleh: f ( x, y, y0 ) = −(y0 )2 − y + ln x dengan

∂f ∂f
= −1 = −2y0
∂y ∂y0

z10 = z2
z20 = −z22 − z1 + ln x
z30 = z4
z40 = −z3 − 2z2 z4

dengan nilai awal z1 ( a) = 0, z2 ( a) = 0, z3 ( a) = 0, z4 (0) = 1.


Pada kode dibawah ini kita akan mendefinisikan fungsi yang berada pada ruas kanan
persamaan differensial (persamaan (7)):
[4]: def f1(x,y):
"""ruas kanan dari persamaan differensial """
f_out = np.zeros(4)
f_out[0] = y[1]
f_out[1] = -y[1]**2-y[0]+np.log(x)
f_out[2] = y[3]
f_out[3] = -y[2]-2*y[1]*y[3]
return f_out

def f1_ex(x):
return np.log(x)

Selanjutnya pada kode dibawah ini kita melakukan inisialisasi variabel:

61
[15]: tinit = 1
tend = 2
dt = 0.2
y0 = np.array([0,0.2,0,1])
t_1 = np.arange(tinit,tend+dt/2,dt)
yend = np.log(2)
# y1 = fun_RK4(y0, t_1, f1)

Selanjutnya kita akan melakukan iterasi Newton y berdasarkan persamaan (3): kita
menggunakan dua kondisi berhenti: selisih antara nilai batas akhir kurang dari toleransi
atau melewati jumlah iterasi maksimum:
[16]: err_end = 1
i=0
while err_end>10**(-4) and i <30:
y=fun_RK4(y0,t_1,f1)
err_end = abs(y[-1,0]-yend)
#tebakan turunan baru
y0[1] = y0[1]-(y[-1,0]-yend)/y[-1,2]
i+=1 #counter

Berikut adalah perbandingan grafik solusi numerik dengan solusi eksak, perhatikan
bahwa hasil yang diperoleh cukup akurat.
[17]: plt.plot(t_1,y[:,0],"-.", label = 'numeric')
plt.plot(t_1,f1_ex(t_1),':', label = 'exact')
plt.legend()
plt.show()

62
[18]: i

[18]: 4

untuk mengkuantifikasi error, maka kita dapat menggunakan metrik Euklidean seba-
gaimana modul-modul sebelumnya.
[8]: def fun_err(t,y):
y_ex = f1_ex(t)
h = t[1] - t[0]
e1 = y[1:-1] - y_ex[1:-1]
return np.sqrt(h*e1.dot(e1))

err =fun_err(t_1,y[:,0])
err
[8]: 1.1282754571113482e-05

63
Bab 9

Modul Pertemuan 10

9.1 Teori Metode Beda Hingga


Pada modul kali ini kita akan menyelesaikan masalah nilai batas linear berbentuk:

y00 = p( x )y0 + q( x )y + r ( x ) dengan y( a) = α dan y(b) = β (9.1)

Untuk menyelesaikan masalah nilai batas ini, kita akan menggunakan metode beda
hingga (finite difference methods). Hal ini kita lakukan dengan membagi interval [ a, b]
menjadi N + 1 > 0 interval dengan titik ujungnya menjadi titik mesh xi = a + ib untuk
b− a
i = 0, 1, · · · N + 1 dengan h = N +1 . Pada masing-masing titik interior xi suku-suku
persamaan differensial dapat diaproksimasi dengan :

1
y00 ( xi ) ≈ [y( xi+1 ) − 2y( xi ) + y( xi−1 )] (9.2)
h2
1
y 0 ( xi ) ≈ [y( xi+1 − y( xi−1 )] (9.3)
2h

Dengan menerapkan aproksimasi ini, maka pada titik interior xi persamaan differensial
didiskritisasi menjadi :

1 1
2
[y( xi+1 ) − 2y( xi ) + y( xi−1 )] = p( xi ) [y( xi+1 − y( xi−1 )] + q( xi )y( xi ) + r ( xi )
h 2h

Dengan mengalikan kedua ruas dengan h2 dan meletakan bagian yang tidak diketahui
di ruas kiri dan bagian yang diketahui pada ruas kanan, maka diperoleh:
     
h 2 h
− 1 + p ( x i ) y ( x i −1 ) + 2 + h q ( x i ) y ( x i ) − 1 − p ( x i ) y ( x i +1 ) = r ( x i )
2 2

64
Sedangkan untuk i = 1 dan i = N perhatikan bahwa nilai dibatas diketahui, sehingga
persamaan beda hingganya menjadi :
     
2 h h
2 + h q ( x1 ) y ( x1 ) − 1 − p ( x1 ) y ( x2 ) = r ( x1 ) + 1 + p ( x1 ) y ( x0 )
2 2
     
h 2 h
− 1 + p ( x N ) y ( x N −1 ) + 2 + h q ( x N ) y ( x N ) = r ( x N ) + 1 − p ( x N ) y ( x N +1 )
2 2
Persamaan diatas apabila dituliskan dalam bentuk matriks menjadi :

Ay = b

dengan
y = [ y ( x1 ) y ( x2 ) y ( x3 ) · · · y ( x N −1 ) y( x N )] T

Persamaan matriks ini harus diselesaikan.

9.2 Instruksi Tugas


1. Selesaikan masalah nilai batas berikut menggunakan metode beda hingga dan hi-
tunglah errornya

4y0 2y 2 ln x 1
y00 = − − 2+ 2 , 1 ≤ x ≤ 2, y(1) = , y(2) = ln 2
x x x 2
4 2
Solusi eksak: y( x ) = x − x2
+ ln x − 32 Gunakan h = 0.05

2. Selesaikan masalah nilai batas berikut menggunakan metode beda hingga dan hi-
tunglah errornya

π π
y00 = y0 + 2y + cos x, 0≤x≤ , y(0) = −0.3, y = −0.1
2 2
1
Solusi eksak: y( x ) = − 10 (sin x + 3 cos x ). Gunakan h = π
8 dan h = π
16

9.3 Contoh Kode Pemrograman


Pada implementasinya, mula-mula kita akan mengimport library yang diperlukan:

65
[1]: import numpy as np
import matplotlib.pyplot as plt

Untuk modul ini, masalah nilai batas yang akan diselesaikan adalah:

2 2 sin(ln x )
y00 = − y0 + 2 y + , 1 ≤ x ≤ 2, y(1) = 1, y(2) = 2 (9.4)
x x x2
yang memiliki solusi eksak:

c2 3 1
y ( x ) = c1 x + − sin ( ln x ) − cos(ln x )
x2 10 10

dengan:

1 11
c2 = [8 − 12 sin(ln 2) − 4 cos(ln 2)] ≈ −0.03920701320 c1 = − c2 ≈ 1.1392070132
70 10

Kita akan menggunakan lebar selang 0.1 . Mula-mula kita akan mendefinisikan do-
main internal:
[2]: xinit = 1
yinit = 1
xend = 2
yend = 2
h = 0.1
xin = np.arange(xinit+h, xend,h)
xin
[2]: array([1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9])

Selanjutnya kita akan menyusun matriks dengan menyusun diagonal(a), superdiago-


nalnya (b) dan juga subdiagonal(c).
[3]: a = 2+h**2*2/(xin**2)
b = -(1-h/2*(-2/xin[:-1]))
c = -(1+h/2*(-2/xin[1:]))

Selanjutnya kita akan menyusun matriks A: Untuk itu, kita akan menggunakan fungsi
np.diag yang bisa digunakan membentuk matriks dari diagonal dan sub maupun supe-
rdiagonal.
[4]: A = np.diag(a)+np.diag(b,k=1)+np.diag(c,k=-1)
A

66
[4]: array([[ 2.01652893, -1.09090909, 0. , 0. , 0. ,
0. , 0. , 0. , 0. ],
[-0.91666667, 2.01388889, -1.08333333, 0. , 0. ,
0. , 0. , 0. , 0. ],
[ 0. , -0.92307692, 2.01183432, -1.07692308, 0. ,
0. , 0. , 0. , 0. ],
[ 0. , 0. , -0.92857143, 2.01020408, -1.07142857,
0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , -0.93333333, 2.00888889,
-1.06666667, 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , -0.9375 ,
2.0078125 , -1.0625 , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ,
-0.94117647, 2.00692042, -1.05882353, 0. ],
[ 0. , 0. , 0. , 0. , 0. ,
0. , -0.94444444, 2.00617284, -1.05555556],
[ 0. , 0. , 0. , 0. , 0. ,
0. , 0. , -0.94736842, 2.00554017]])

Selanjutnya kita akan menyusun ruas kanan dari persamaan matriks:


[5]: d = -h**2*np.sin(np.log(xin))/(xin**2)
d[0] +=(1+h/2*(-2/xin[0]))*yinit
d[-1] +=(1-h/2*(-2 / xin[-1]))*yend
d
[5]: array([ 9.08304414e-01, -1.25911901e-03, -1.53470197e-03, -1.68448576e-03,
-1.75309422e-03, -1.76909969e-03, -1.75112561e-03, -1.71148306e-03,
2.10360476e+00])

Selanjutnya kita akan menyelesaikan sistem persamaan matriks, kita akan langsung
menggunakan fungsi scipy.linalg.solve
[6]: y = np.linalg.solve(A,d)
y
[6]: array([1.09260052, 1.18704313, 1.28333687, 1.38140205, 1.48112026,
1.5823599 , 1.68498902, 1.78888175, 1.8939211 ])

untuk mengkuantifikasi error, maka kita dapat menggunakan metrik Euklidean seba-

67
gaimana modul-modul sebelumnya.
[7]: def f_ex(t):
c2 = 1/70*(8-12*np.sin(np.log(2)) - 4*np.cos(np.log(2)))
c1 = 11/10-c2
return c1*t + c2/(t**2)-3/10*np.sin(np.log(t)) - 1/10*np.cos(np.
,→log(t))

def fun_err(t,y):
y_ex = f_ex(t)
h = t[1] - t[0]
e1 = y[1:-1] - y_ex[1:-1]
return np.sqrt(h*e1.dot(e1))

err =fun_err(xin,y)
err
[7]: 3.0388909282590775e-05

[8]: plt.plot(xin, y, label = 'numeric')


plt.plot(xin, f_ex(xin), ':k', label = 'eksak')
[8]: [<matplotlib.lines.Line2D at 0x2832ad40a90>]

68
69
Tugas 1
MA201547 Persamaan Differensial Numerik
Dosen: Abrari Noor Hasmi

1. Diberikan masalah nilai awal: Lakukan approksimasi solusi persamaan differensial di


bawah ini:
y 0 = y − t2 + 1, 0 ≤ t ≤ 2, y(0) = 0.5

lakukan perhitungan manual dengan masalah nilai awal sebagaimana pada Modul
Pertemuan 2 untuk kasus ∆t = 0.25 Diketahui solusi eksak :

y(t) = (t + 1)2 − 0.5et

70
Tugas 2
MA201547 Persamaan Differensial Numerik
Dosen: Abrari Noor Hasmi

Lakukan approksimasi solusi persamaan differensial di bawah ini:

y2 + y
y0 = , 1 ≤ t ≤ 3, y(1) = −2
t

Dengan menggunakan metode Euler dan Taylor orde 2,3,4 dengan diskretisasi 2−1 , 2−2 , 2−3 ,
2−4 , 2−5 , 2−6 . Diketahui solusi eksak :

2t
y(t) =
1 − 2t

1. Tentukan nilai error aproksimasi solusi metode Taylor dengan solusi eksak untuk
masing-masing lebar selang.

2. Gambarkan perbandingan antara solusi eksak dengan solusi numerik (Euler, Taylor
orde 2, Taylor orde 3, Taylor orde 4) untuk lebar selang h = 0.25 pada satu grafik.
Berilah interpretasi hasil yang diperoleh

3. Hitunglah orde konvergensi dari metode Euler, Taylor orde 2, Taylor orde 3, Taylor
orde 4, menggunakan ∆ti = 2−6 dan ∆ti−1 = 2−5

4. Lakukan perhitungan manual masalah nilai awal diatas dengan menggunakan h = 2−1
untuk metode Taylor orde 3.

71
Tugas 3
MA201547 Persamaan Differensial Numerik
Dosen: Abrari Noor Hasmi

Diberikan masalah nilai awal :

y2 + y
y0 = , 1 ≤ t ≤ 3, y(1) = −2
t

Diketahui solusi eksak :


2t
y(t) =
1 − 2t
1. Tentukan aproksimasi numerik solusi masalah nilai awal diatas dengan menggunakan
metode Titik Tengah, Euler dimodifikasi, Heun dan Runge Kutta orde 4 dengan
diskretisasi 2−1 , 2−2 , 2−3 , 2−4 , 2−5 , 2−6 .

2. Lakukan perhitungan manual dengan masalah nilai awal diatas dengan menggunakan
metode Runge Kutta orde 4 untuk kasus ∆t = 0.5

72
Tugas 4
MA201547 Persamaan Differensial Numerik
Dosen: Abrari Noor Hasmi

1. Pada bagian ini anda diminta secara mandiri menyelesaikan masalah nilai awal pada
sistem persamaan differensial. Persamaan differensial yang harus diselesaikan adalah:

dx
= 3x − xy − 2x2
dt
dy
= −y + xy − y 2
dt

dengan nilai awal: x(0) = 2 dan y(0) = 0.1 dengan selang waktu 0 ≤ t ≤ 10 . Persa-
maan diatas dikenal sebagai persamaan predator-prey yang memodelkan interaksi dua
populasi (mangsa-pemangsa). Selesaikan persamaan differensial diatas menggunakan
metode Euler menggunakan h = 0.2.
Petunjuk: Anda dapat melihat contoh implementasi masalah serupa pada buku
Programming for Computations - Python subbab 8.3. Bisa juga anda melakukan
modifikasi minor pada program sebelumnya dengan memperhatikan struktur data
array pada numpy.

73
Tugas 5
MA201547 Persamaan Differensial Numerik
Dosen: Abrari Noor Hasmi

1. Lakukan approksimasi solusi persamaan differensial di bawah ini:

y2 + y
y0 = , 1 ≤ t ≤ 3, y(1) = −2
t

Dengan menggunakan metode Prediktor Korektor orde 2, orde 3 dan orde 4. Gunakan
metode Runge Kutta untuk memperoleh beberapa nilai awal. Diketahui solusi eksak
:
2t
y(t) =
1 − 2t
2. Bandingkan hasil akurasi dan juga waktu yang diperlukan antara metode prediktor
korektor, Adams-Bashforth dan Runge Kutta masing-masing untuk orde 2,3,dan 4
dengan lebar selang h = 2−5

74
Tugas 6
MA201547 Persamaan Differensial Numerik
Dosen: Abrari Noor Hasmi

Diberikan masalah nilai batas :

π π
y 00 + 4y = cos x, 0≤x≤ , y(0) = 0, y( ) = 0
4 4

yang memiliki solusi eksak:



1 2 1
y(x) = − cos 2x − sin 2x + cos x
3 6 3

1. Selesaikan masalah nilai batas diatas menggunakan metode linear shooting dengan
menggunakan metode Euler, Runge Kutta orde 3 dan Prediktor Korektor orde 3 untuk
menyelesaikan masalah nilai awal yang bersesuaian. Hitunglah error yang diperoleh
menggunakan metode-metode tersebut. Apakah ada perbedaan error pada masing-
masing metode numerik ?
π π
2. Variasikan ukuran langkah (dx) menjadi 16
dan 64
, apa yang terjadi dengan nilai
errornya ?

3. Selesaikan masalah nilai batas berikut dan hitunglah errornya

4y 0 2y 2 ln x 1
y 00 = − − 2+ , 1 ≤ x ≤ 2, y(1) = , y(2) = ln 2
x x x2 2
4 2 3
Solusi eksak: y(x) = x
− x2
+ ln x − 2
Gunakan h = 0.05

75
Tugas 7
MA201547 Persamaan Differensial Numerik
Dosen: Abrari Noor Hasmi

Diberikan masalah nilai batas :

y 00 = −(y 0 )2 − y + ln x, 1 ≤ x ≤ 2, y(1) = 0, y(2) = ln 2

yang memiliki solusi eksak:



1 2 1
y(x) = − cos 2x − sin 2x + cos x
3 6 3

1. Selesaikan masalah nilai batas diatas menggunakan metode linear shooting dengan
menggunakan metode Euler, Runge Kutta orde 3 dan Prediktor Korektor orde 3 untuk
menyelesaikan masalah nilai awal yang bersesuaian. Hitunglah error yang diperoleh
menggunakan metode-metode tersebut. Apakah ada perbedaan error pada masing-
masing metode numerik ?

2. Variasikan ukuran langkah (dx) menjadi 0.1 dan 0.05, apa yang terjadi dengan nilai
errornya ?

3. Selesaikan masalah nilai batas berikut dan hitunglah errornya

2(y 0 )2 9y 2
y 00 = − 5 + 4x, 1 ≤ x ≤ 2, y(1) = 0, y(2) = ln 256
x3 x

Solusi eksak: y(x) = x3 ln x Gunakan h = 0.05

76
Tugas 8
MA201547 Persamaan Differensial Numerik
Dosen: Abrari Noor Hasmi

1. Selesaikan masalah nilai batas berikut menggunakan metode beda hingga dan hitu-
nglah errornya

4y 0 2y 2 ln x 1
y 00 = − − 2+ , 1 ≤ x ≤ 2, y(1) = , y(2) = ln 2
x x x2 2
4 2 3
Solusi eksak: y(x) = x
− x2
+ ln x − 2
Gunakan h = 0.05

2. Selesaikan masalah nilai batas berikut menggunakan metode beda hingga dan hitu-
nglah errornya

π π 
y 00 = y 0 + 2y + cos x, 0≤x≤ , y(0) = −0.3, y = −0.1
2 2
1 π π
Solusi eksak: y(x) = − 10 (sin x + 3 cos x). Gunakan h = 8
dan h = 16

77
Tugas Besar Persamaan Differensial Numerik (MA201547)
Tahun Ajaran 2020/2021
Dosen: Abrari Noor Hasmi, S.Si., M.Si.
Minggu 12 – Minggu 16
Sub CPMK: Mahasiswa mampu memaparkan analisis menggunakan metode numerik untuk
menyelesaikan persamaan differensial.
Deskripsi Tugas :
Diakhir tugas mahasiswa diminta untuk mendemonstrasikan kemampuan penyelesaian
masalah persamaan differensial secara numerik baik masalah nilai awal dan masalah nilai
batas sederhana. Mahasiswa diminta untuk mencari makalah ilmiah yang melibatkan aplikasi
masalah nilai awal dan batas. Untuk masalah nilai batas bisa berupa masalah kontrol optimal,
ataupun membahas soal applied exercise di buku referensi.
Untuk masalah nilai awal, mahasiswa diminta untuk menyelesaikan masalah sistem
persamaan differensial (lebih dari satu variabel) dengan menggunakan beberapa metode
numerik penyelesaian masalah nilai awal (Runge Kutta dan Multi Langkah).
Sedangkan untuk masalah nilai batas, mahasiswa diminta untuk menggunakan metode (linear
atau non-linear) shooting method, apabila memungkinkan gunakan metode beda hingga.
Output tugas besar adalah berupa laporan yang memuat deskripsi/latar belakang masalah,
penjelasan singkat metode yang digunakan dan hasil perhitungan/simulasi numerik.

78
MA201547 Persamaan Differensial Numerik Kuis 1
Dosen: Abrari Noor Hasmi, S.Si., M.Si. 15 April 2021
Nama : NIM :

Petunjuk. Jawablah soal berikut. Diperkenankan membuka buku dan menggunakan kalku-
lator

1. [30 poin] Diberikan masalah nilai awal:

y2 1
y 0 (t) = , y(1) = − , 1≤t≤2
1+t ln 2
Tentukan aproksimasi nilai y(2) menggunakan metode Euler dengan h = 0.5.
Metode Euler:

w0 = y0
wi+1 = wi + hf (ti , wi )

2. [40 poin] Diberikan masalah nilai awal:

y 0 (t) = −(y + 1)(y + 3), y(0) = −2 0 ≤ t ≤ 2

Tentukan aproksimasi nilai y(1.5) menggunakan metode Taylor orde 2 dengan h = 0.5.
Metode Taylor orde 2:

w0 = y0
h2 df
wi+1 = wi + hf (ti , wi ) + (ti , wi )
2 dt

3. [30 poin] Diberikan masalah nilai awal:


1+t
y 0 (t) = y(1) = 2, 1≤t≤2
1+y

Tentukan aproksimasi nilai y(0.5) menggunakan metode titik tengah dengan h = 0.5.
Tentukan pula error dibandingkan solusi eksaknya.
Metode Titik Tengah:

w0 = y0
 
h h
wi+1 = wi + hf ti + , wi + f (ti , wi )
2 2

79
PROGRAM STUDI MATEMATIKA
INSTITUT TEKNOLOGI KALIMANTAN
Kampus ITK Karang Joang, Balikpapan 76127
Telepon: 0542-8530800, Faksimile: 0542-8530801

UJIAN TENGAH SEMESTER


Mata Kuliah (Kode) : Persamaan Differensial Numerik (MA201547)
Materi : Metode Masalah Nilai Awal
Hari/Tanggal : Selasa, 12 April 2021
Durasi : 120 Menit
Dosen : Abrari Noor Hasmi, S.Si., M.Si
Metode : Buka Buku dan dengan Alat Bantu Hitung
Sub CP MK :
1. Mahasiswa mampu membedakan jenis-jenis persamaan differensial dan mengetahui motivasi
penggunaan metode numerik pada persamaan differensial
2. Mahasiswa mampu menghasilkan program sederhana untuk mengahampiri solusi masalah
nilai awal menggunakan metode Euler, Taylor, Runge Kutta dan Prediktor Korektor dan
menghitung errornya.

SOAL.

1. Selesaikan masalah nilai awal berikut:


1+t
y0 = , y(1) = 2, 1≤t≤2
1+y
dengan solusi eksak: p
y(t) = t2 + 2t + 6 − 1
Gunakan metode Euler dimodifikasi dengan h = 0.5. Hitunglah nilai |yeksak (2) − ymE (2)|

2. Selesaikan masalah nilai awal berikut:

y 0 = t sin(ty), y(0) = 0, 0≤t≤1

menggunakan metode Taylor orde 2 dengan h = 0.5.

3. Selesaikan masalah nilai awal berikut:


 y
y 0 = ay 1 − , y(0) = 1, y(1) = 1.208, y(2) = 1.456
K
Dengan nilai parameter a = 0.2, K = 20. Gunakan metode Prediktor Korektor tiga langkah
dengan h = 1 untuk menghitung nilai aproksimasi pada y(3) dan y(4)

4. Tentukan orde konvergensi metode numerik berdasarkan data error menggunakan dua diskri-
tisasi yang berbeda:

h error
0.5 4.56 · 10−5
0.1 4.15 · 10−7

80
PROGRAM STUDI MATEMATIKA
INSTITUT TEKNOLOGI KALIMANTAN
Kampus ITK Karang Joang, Balikpapan 76127
Telepon: 0542-8530800, Faksimile: 0542-8530801

UJIAN AKHIR SEMESTER


Mata Kuliah (Kode) : Persamaan Differensial Numerik (MA201547)
Materi : Masalah Nilia Awal dan Nilai Batas
Hari/Tanggal : Rabu, 23 Juni 2021
Durasi : 120 Menit
Dosen : Abrari Noor Hasmi, S.Si., M.Si
Metode : Tugas Besar dan Presentasi
Sub CP MK :
1. Mahasiswa mampu memaparkan analisis menggunakan metode numerik untuk menye-
lesaikan persamaan differensial

DESKRIPSI TUGAS :
Diakhir tugas mahasiswa diminta untuk mendemonstrasikan kemampuan penyelesaian
masalah persamaan differensial secara numerik baik masalah nilai awal dan masalah nilai
batas sederhana. Mahasiswa diminta untuk mencari makalah ilmiah yang melibatkan apli-
kasi masalah nilai awal dan batas. Untuk masalah nilai batas bisa berupa masalah kontrol
optimal, ataupun membahas soal applied exercise di buku referensi.
Untuk masalah nilai awal, mahasiswa diminta untuk menyelesaikan masalah sistem per-
samaan differensial (lebih dari satu variabel) dengan menggunakan beberapa metode nume-
rik penyelesaian masalah nilai awal (Runge Kutta dan Multi Langkah).
Sedangkan untuk masalah nilai batas, mahasiswa diminta untuk menggunakan metode
(linear atau non-linear) shooting method, apabila memungkinkan gunakan metode beda
hingga.
Output tugas besar adalah berupa laporan yang memuat deskripsi/latar belakang ma-
salah, penjelasan singkat metode yang digunakan dan hasil perhitungan/simulasi numerik.
Dalam sesi pelaksanaan Ujian Akhir Semester mahasiswa diminta untuk mempresenta-
sikan hasil pekerjaan yang telah dilakukan. Setelah presentasi akan ada pertanyaan lisan
yang akan menguji pemahaman mahasiswa terhadap aplikasi materi kuliah pada hasil ana-
lisa yang telah dihasilkan.
KOMPONEN PENILAIAN :

1. [10 poin] Kinerja : Sikap selama


2. [15 poin] Kesesuaian topik yang dipilih : Urgensi dan relevansi pemilihan topik dengan
tugas yang diberikan
3. [25 poin] Ketepatan analisa: Kesesuaian pengerjaan tugas berdasarkan materi yang
telah diperlajari
4. [20 poin] Tata cara penulisan: Penggunaan bahasa baku, kerapihan laporan
5. [20 poin] Presentasi: Kemampuan menyampaikan hasil kerja kelompok
6. [10 poin] Penguasaan Materi

81
Daftar Pustaka

Burden, A., Burden, R., & Faires, J. (2016). Numerical Analysis, 10th ed. doi: 10.13140/
2.1.4830.2406
Linge, S., & Langtangen, H. P. (2020). Programming for Computations - Python : A Gentle
Introduction to Numerical Simulations with Python 3.6. Springer Nature PP - Cham.
Retrieved from https://library.oapen.org/bitstream/id/35449b29-cca0-4d71
-8553-2d49609b75fd/1007055.pdf doi: 10.1007/978-3-030-16877-3

82

Anda mungkin juga menyukai