Metode Numerik dan Komputasi dengan FORTRAN dan PASCAL
Setijo Bismo Yuswan Muharam
Setijo Bismo Yuswan Muharam
Metode Numerik: KOMPUTASI DENGAN FORTRAN 77 DAN TURBO PASCAL (Buku Kuliah Metode Numerik) Setijo Bismo @ 2011 Dapat dipakai untuk Kuliah Analisis dan Komputasi Numerik di Program-Program Studi Eksakta Hak Cipta dilindung Undang-Undang
K ATA P E NG ANTAR
Segala puji dan syukur penulis panjatkan ke hadapan Allah swt, terutama berkat rahmat dan nikmat-nikmatNYA dan tentunya juga dengan seijinNYA, akhirnya bahan buku ini dapat diperiksa dan diedit kembali untuk para pembaca sekalian dalam bentuk yang baku pada tahun ini, setelah versi awal sebagai bahan diktat kuliah diselesaikan pada tahun 2008 dan revisinya pada tahun 2009 yang lalu. Buku ini secara umum dapat dipergunakan oleh kalangan mahasiswa sains dan teknologi, terutama untuk para mahasiswa yang mengambil kuliah metode numerik di lingkungan Fakultas MIPA dan Fakultas Teknik. Dan, alhamdulillah buku ini juga telah mengalami koreksi dan revisi oleh rekan sejawat Dr. rer. nat. Yuswan Muharam, MT., sehingga sejak tahun 2009 yang lalu sudah kami jadikan referensi sekaligus buku ajar resmi dari mata kuliah metode numerik di lingkungan Departemen Teknik Kimia FTUI. Seperti telah dijelaskan pada cetakan atau versi pertama tahun 2008 yang lalu, sejak hilangnya cikal-bakal dan manuskrip buram dari bahan-bahan kuliah metode numerik ini (akibat pencurian pada tahun 2001 yang lalu), sebenarnya penulis sudah hampir berputus asa dan tidak berminat lagi menyusun dan menyelesaikan kembali buku kuliah ini. Namun, di sisi lain, rasa tanggung jawab disertai dengan pengalaman mengasuh mata kuliah Metode Numerik ini baik untuk program S1 reguler maupun S1 ekstensi sejak tahun 1995 yang lalu, rasanya terlalu berat untuk diabaikan begitu saja. Sekali lagi, syukur alhamdulillah, dengan pertolongan Allah swt dan juga dorongan kolega dan teman-teman mengajar di DTK-FTUI, akhirnya buku ini dapat saya selesaikan dan bahkan saya edit kembali penulisan manuskripnya dalam format yang baru seperti yang sekarang ini. Sebagai suatu alat untuk membuat program komputasi numerik keteknikan, dari pengalaman mengajar selama ini, saya cukup merasakan betapa metode numerik ini sesungguhnya sudah mulai banyak ditinggalkan, bukan hanya oleh para mahasiswa bidang eksakta dan atau bidang teknik saja, namun juga oleh para pengajarnya sendiri. Fenomena tersebut di atas, termasuk juga antusiame membuat aplikasi program-program komputasi menggunakan bahasa-bahasa pemrograman (seperti: FORTRAN, PASCAL, C, dll), semakin memprihatinkan dari hari ke hari, terutama dengan semakin marak dan berkembangnya paket- i -
paket piranti lunak untuk aplikasi matematika praktis, seperti MathLab, MathCAD, Mapple, dan lain-lain. Seolah-olah, setiap insan cendekia secara umum dan meluas berlomba-lomba mencari kepraktisan dan kemudahan hidup yang sebesar-besarnya. Oleh karena itu pula, dengan tetap berbekal semangat yang sudah tidak muda dan segar lagi, penulis tetap bertekad untuk dapat menyajikan kepada para mahasiswa suatu ketrampilan komputasi yang mendasar dan tentunya sambil berharap dapat terkait erat dengan ketrampilan emosional selain ketrampilan intelegensia mereka, baik yang mengikuti program S1 atau pun S2. Sekurangkurangnya, ketrampilan matematis keteknikan yang sudah langka peminatnya ini dapat dijadikan oleh para mahasiswa sebagai suatu referensi atau bahan rujukan tersendiri dalam mengembangkan diri sebagai insan-insan akademia yang berguna di masyarakat dan dengan selalu berbekal ketakwaan kepada Allah, Tuhan Yang Maha Esa. Penulis juga sangat berharap, kelak dengan seijin Allah yang Maha Kuasa, buku metode numerik ini dapat dikembangkan lagi menjadi buku ajar yang berguna untuk para mahasiswa sekalian di lingkungan Fakultas Teknik di seluruh Indonesia. Tak lupa pula, penulis sangat berharap partisipasi dan masukan dari kolega dan atau teman-teman sekalian, juga para mahasiwa sekalian yang saya cintai, demi perbaikan dan penyempurnaan buku kuliah ini. Semoga harapan-harapan dapat segera terwujud dan semoga pula, buku kuliah metode numerik ini tidak terlalu mengecewakan bagi para pembacanya, di manapun berada.
Depok, awal September 2010
Setijo Bismo Yuswan Muharam
- ii -
D AFTAR I SI
Halaman Kata Pengantar
i
Daftar Isi
iii
Daftar Gambar Bab 1 – Pendahuluan Metode Numerik
1
1.1. 1.2.
Implementasi Metode Numerik Bahasa Pemrograman dan Metode Numerik
1 2
1.3.
Metode Numerik untuk Problem Komputasi di Teknik Kimia
4
Bab 2 – Analisis Galat dalam Kumputasi Numerik
9
2.1. 2.2.
Representasi Bilangan dan Komputasi Numerik Berbagai Galat dalam Komputasi Numerik
9 13
2.3.
Kehilangan Galat Berarti (Sigificance Error)
14
2.4.
Derau (noise) dalam Evaluasi Fungsi
17
2.5. 2.6.
Underflow dan Overflow Propagasi Galat
18 19
Bab 3 – Dasar-Dasar Pemrograman Numerik dalam FORTRAN dan PASCAL
20
3.1.
Sekilas Tentang Bahasa FORTRAN dan PASCAL
20
3.2.
Ciri-ciri Kompilator FORTRAN 77 dan Turbo PASCAL
23
3.3.
Operator dan Sintaks Program FORTRAN 77 dan Turbo PASCAL
31
3.4.
33
3.5.
Kisi-Kisi Dasar Pemrograman FORTRAN 77 dan Turbo PASCAL Pernyataan Kondisional IF
3.6.
Pernyataan Iterasi Suksesif
48
Bab 4 – Sistem Persamaan Aljabar Linier (SPAL)
43
52
4.1.
Skalar, Vektor, Matriks dan SPAL
52
4.2.
Solusi SPAL secara numeris
55
4.3.
Sekilas tentang Solusi SPAL menggunakan metode langsung
56
4.4.
57
4.5.
Algoritma dan Metode Solusi SPAL dengan Eliminasi Gauss Teknik Pivoting dalam Metode Eliminasi Gauss
60
4.6.
Teknik Pivoting dalam Metode Eliminasi Gauss
60
4.7.
Contoh Pemrograman FORTRAN untuk Metode Eliminasi Gauss
62
- iii -
4.8.
Prinsip Dekomposisi LU dan Matriks Identitas
66
4.9.
Solusi SPAL yang berbentuk Matriks Tridiagonal
76
Bab 5 – Persamaan Aljabar Non Linier (PANL)
85
5.1.
Solusi dengan Metode Titik Tetap
85
5.2.
Solusi dengan Metode Bidang Paruh
89
5.3.
Solusi dengan Metode Regula Falsi
95
5.4.
Solusi dengan Metode Newton-Raphson Solusi dengan Metode Secant
5.5.
Bab 6 – Metode Diferensiasi Numerik
102 111 123
6.1.
Diferensiasi Analitis dan Diferensasi Numerik
123
6.2.
Metode Diferensiasi Selisih Maju
125
6.3.
Metode Diferensiasi Selisih Tengah
127
6.4.
Metode Diferensiasi Selisih Balik
130
6.5.
Metode Diferensiasi Tingkat Lanjut
131
6.6.
Metode Diferensiasi untuk Penentuan Puncak Kurva
133
Bab 7 – Metode Integrasi Numerik
140
7.1.
Integrasi Analitis dan Integrasi Numerik
141
7.2.
Dasar Aturan Trapesium
142
7.3.
Aturan Trapesium dengan banyak panel (bilah jamak)
145
7.4. 7.5.
Metode Integrasi Romberg Aturan Simpson-1/3
151 158
7.6.
Aturan Simpson-1/3 dengan pias banyak
160
7.7.
Aturan Simpson-3/8
163
7.8.
Metode Kuadratur Gauss
167
Bab 8 – Solusi Numerik dari Persamaan Diferensial
176
8.1.
Jenis dari Persamaan Diferensial
176
8.2.
Sifat-sifat Persamaan Diferensial Biasa
177
8.3.
Masalah Nilai Awal dan Nilai Batas dari PDB
178
8.4. 8.5.
Metode Solusi Numerik untuk Persamaan Diferensial Metode Euler
179 182
8.6.
Metode Taylor
186
8.7.
Metode Runge-Kutta dan Turunannya
187
8.8. 8.9.
Metode Runge-Kutta Orde Tinggi Beberapa Aplikasi Persamaan Diferensial
199 203
Daftar Pustaka
209
- iv -
D AFTAR G AMBAR Halaman Gambar 2.1. Alur kurva dari fungsi f ( x) = x3 − 2 x 2 + 3 x − 1
17
Gambar 2.2. Pola ‘fuzzy curve’ pada saat harga δ = 0,00002
17
Gambar 2.3. Pola ‘fuzzy curve’ pada saat harga δ= 0,000020
18
Gambar 2.4. Garis “bilangan nyata” (real) yang terbagi atas 7 region
18
Gambar 3.1. Kompilator Compaq Visual Fortran yang sudah tidak diproduksi lagi
21
Gambar 3.2. Kompilator Turbo Pascal yang juga sudah tak diproduksi lagi
22
Gambar 3.3. Fortran Coding Form (dari IBM) untuk penulisan program FORTRAN
24
Gambar 3.4. Fortran Punch Card dan contoh program dalam bahasa FORTRAN
25
Gambar 3.5. Blok struktur dan sintaks program dalam bahasa FORTRAN
26
Gambar 3.6. Blok struktur dan sintaks program dalam bahasa PASCAL
29
Gambar 3.7. Contoh program dalam Turbo PASCAL yang analogi dengan gambar 3.4.
30
Gambar 4.1. Listing pemrograman FORTRAN untuk Eliminasi Gauss “tanpa strategi pivoting”
64
Gambar 4.2. Listing sub-program FORTRAN untuk Eliminasi Gauss dengan “strategi pivoting”
65
Gambar 4.3. Program FORTRAN untuk implementasi Dekompisisi LU dengan Metode Doolittle
73
Gambar 4.4. Listing program FORTRAN untuk solusi SPAL dengan Dekomposisi LU
75
Gambar 4.5. Listing program FORTRAN untuk solusi SPAL dengan teknik Matriks Tridiagonal
80
Gambar 5.1. Representasi sekuens komputasi dari metode titik-tetap dari y = g ( x )
86
Gambar 5.2. Algoritma komputasi dari metode titik-tetap intuk persamaan
87
Gambar 5.3. Geometri representasi titik-tetap dari y = g ( x )
87
Gambar 5.4. Listing pemrograman FORTRAN untuk metode titik-tetap pada
88
Gambar 5.5. Rrepresentasi grafis dari metode bidang paruh (bisection)
90
Gambar 5.6. Algoritma komputasi dari metode bidang paruh (bisection)
91
y = g( x)
y = g( x)
- v -
Gambar 5.7. Listing program FORTRAN sederhana (tanpa subroutine) untuk metode bisection
92
Gambar 5.8. Listing program FORTRAN dengan subprogram (subroutine) untuk metode bisection
93
Gambar 5.9. Listing program Turbo PASCAL dengan Procedure untuk metode bisection
94
Gambar 5.10. Rrepresentasi grafis dari Metode Regula-Falsi
95
Gambar 5.11. Algoritma komputasi dari metode Regula-Falsi
97
Gambar 5.12. Listing program FORTRAN 77 tanpa subroutine untuk Metode Regula-Falsi
99
Gambar 5.13. Listing program Turbo PASCAL tanpa procedure untuk Metode Regula-Falsi
100
Gambar 5.14. Listing program FORTRAN 77 dengan subroutine untuk Metode Regula-Falsi
101
Gambar 5.15. Representasi garis tangent pada metode Newton-Raphson
104
Gambar 6.1. Program f’(x)-fd.pas untuk menghitung diferensiasi maju
126
Gambar 6.2. Hasil eksekusi (running) dari program f’(x)-fd.pas
126
Gambar 6.3. Program f’(x)-cd.pas untuk metode diferensiasi selisih tengah
129
Gambar 6.4. Hasil eksekusi dari program f’(x)-cd.pas seperti di atas
129
Gambar 6.5. Kurva fungsi y = f ( x ) dengan 7 posisi titik puncak
133
Gambar 6.6. Kurva y ( x ) = e − sin( 2 x ) ⋅ sin(5 x ) untuk dicari titik puncaknya
135
Gambar 7.1. Domain integrasi yang didefinisikan
140
Gambar 7.2. Domain interpretasi dari formula metode Riemann
141
Gambar 7.3. Metode Trapesium dan galat akibatnya
142
Gambar 7.4. Pendekatan integral menggunakan beberapa pias trapesium
146
Gambar 7.5. Contoh pemrograman untuk integrasi Romberg
157
Gambar 7.6. Contoh pemrograman lain untuk integrasi Romberg
158
Gambar 7.7. Posisi pendekatan integral di sebelah kanan dan kiri titik Gambar 7.8. Aturan Simpson 1/3 dengan pias banyak di sekitar titik
a
a
159 161
Gambar 8.1. Representasi Progres Skematis dari Metode Euler
183
Gambar 8.2. Representasi grafis dari Metode RK-2 Titik Tengah
189
Gambar 8.3. Representasi Metode RK-2 Kelandaian Rerata
190
Gambar 8.4. Program Turbo Pascal untuk solusi dengan Metode RK-TT
195
Gambar 8.5. Program Turbo Pascal untuk solusi dengan Metode RK-KR
196
Gambar 8.6. Program Turbo Pascal untuk solusi dengan Metode RK-4
197
Gambar 8.7. Contoh Program Turbo Pascal untuk Metode RK-Gill
198
- vi -
Gambar 8.8. Contoh Program untuk komputasi sistem PDB dengan Metode RK-4
205
Gambar 8.9. Ilustrasi sistem mekanik pegas berbeban
206
Gambar 8.10. Ilustrasi sistem rangkaian listrik (RL)
207
- vii -
Bab
1
Pendahuluan Metode Numerik
Dalam era matematika modern seperti saat ini, metode numerik merupakan alat perhitungan pendekatan (aproksimatif) yang lebih mengedepankan cara-cara hampiran untuk penyelesaian problem yang kompleks dan rumit dengan menggunakan komputer. Dalam hal ini, metode-metode perhitungan yang digunakan di sini merupakan cabang atau bagian dari ilmu matematika terapan yang secara khusus mempelajari beberapa metode iteratif untuk penyelesaian persamaan-persamaan atau model matematika kompleks melalui operasi-operasi aritmetika (penambahan, pengurangan, perkalian, pembagian, dan perpangkatan) yang menggunakan bahasa pemrograman dalam komputer. 1.1. Implementasi Metode Numerik Berbeda dengan metode-metode matematika klasik, yang disebut sebagai matematika kontinyu, metode numerik menggunakan pendekatan matematika secara diskret sedemikian rupa sehingga hasil perhitungannya masih berupa pendekatan yang memerlukan perbaikan-perbaikan secara iteratif sehingga diperoleh sesatan atau galat (error) yang relatif sangat kecil dibandingkan dengan solusi eksak (yaitu solusi problem yang diperoleh dengan cara menggunakan metode matematika kontinyu). Secara umum, suatu model aritmetika yang digunakan untuk mendapatkan solusi pendekatan secara diskret disebut sebagai algoritma. Kumpulan pernyataan atau prosedur perhitungan diskret yang harus dieksekusi oleh komputer disebut program komputer. Prosedur-prosedur yang dituliskan dalam program komputer tersebut terdiri dari beberapa pernyataan atau perintah yang disebut sebagai code. Dalam hal ini, seseorang dapat menulis atau membuat suatu program komputer (disebut juga sebagai coding) dengan menggunakan bahasa pemrograman (programming laguage) yang sesuai dengan keinginannya atau dapat juga menggunakan bahasa pemrograman tertentu yang dikuasainya. Dalam perkembangan metode numerik yang dilakukan oleh para peneliti dan ahli di bidangnya, umumnya diperlukan berbagai penyederhanaan dan
Bab 1. Pendahuluan Metode Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 1 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
perbaikan-perbaikan untuk mendapatkan (kemajuan atau konvergensi) suatu solusi atau pun pencapaian solusi pendekatan dengan menggunakan suatu bahasa pemrograman baku seperti BASIC, FORTRAN, C, dan Pascal. 1.2. Bahasa Pemrograman dan Metode Numerik Bahasa pemrograman yang dimaksudkan sebenarnya merupakan bahasa artifisial yang dibuat secara khusus dan digunakan untuk menulis berbagai instruksi yang dapat langsung diterjemahkan ke dalam bahasa mesin sehingga dapat dengan mudah dieksekusi oleh komputer. Penerjemahan instruksi-instruksi seperti di atas, dapat dilakukan dengan cara: (a). menggunakan interpreter (suatu set pustaka) yang khusus menerjemahkan berbagai set instruksi tanpa mengubah atau menghasilkan file lain sebagai obyek; dan (b). menggunakan compiler, yang bekerja melakukan penerjemahan dengan cara membuat file obyek dan file lain yang dapat dieksekusi (executable file). Bahasa BASIC (yang lama) dan Java™ termasuk dalam keluarga compiler, sedangkan Bahasa FORTRAN, Pascal, dan C termasuk dalam keluarga interpreter. Bahasa-bahasa pemrograman ini dapat berupa bahasa instruksi “tingkat rendah” (low level) atau pun “tingkat tinggi” (high level). Bahasa tingkat rendah, seperti bahasa assembler dan bahasa mesin (machine language), terdiri atas kumpulan instruksi yang sangat sederhana (umumnya ringkas) untuk dapat dengan mudah dieksekusi dan atau dijalankan oleh CPU (central processing unit) dari suatu komputer. Namun, secara umum, bahasa-bahasa tingkat rendah ini tidak banyak disukai karena relatif sangat berat dalam hal pembuatan programnya. Bahasa pemrogram FORTRAN (singkatan dari FORmula TRANslation) merupakan bahasa pemrograman yang paling lama populer, yaitu sejak diperkenalkan pertama kali pada tahun 1950an oleh perusahaan IBM. Fitur utama Bahasa FORTRAN adalah bahasa yang lebih mengutamakan penulisan program yang tepat, efisien dan dapat berulang dalam suatu sub-program tertentu (procedure-oriented language). Sampai saat ini, Bahasa FORTRAN telah mengalami
berbagai
kemajuan
dan
perkembangan,
dimulai
dengan
perkembangan yang cukup signifikan pada FORTRAN 77 (pada tahun 19977) dan kemudian semakin disempurnakan pada tahun 1990an, menjadi FORTRAN 90 dan FORTRAN 95. Penggunaan dan cara penulisan program dalam FORTRAN ini dibahas dalam Bab 3, yang berjudul: Dasar-Dasar Bahasa Bab 1. Pendahuluan Metode Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 2 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Pemrograman Numerik dalam FORTRAN dan PASCAL. Hampir bersamaan waktunya dengan FORTRAN, dikenal juga Bahasa ALGOL. Bahasa ALGOL lebih dikenal sebagai bahasa yang lebih terstruktur (block-structured language) dibandingkan pendahulunya. Namun, saat ini Bahasa ALGOL sudah tidak dikembangkan lagi. Penggunaannya lebih jauh dapat digantikan oleh Bahasa Pascal atau ADA. Dalam bidang bisinis, bahasa pemrogram yang pertama dikembangkan adalah COBOL (singkatan dari COmmon Business Oriented Language). Bahasa Pascal dikembangkan oleh Nicklaus Wirth dan Tony Hoare pada awal tahun 1970an. Pada awalnya Bahasa Pascal dimaksudkan untuk menjadi bahasa pemrograman yang baku (untuk komputasi secara numerik) dan dengan mudah dapat diimplementasikan di berbagai platform komputer. Saat ini, compiler Pascal yang masih banyak digunakan adalah Turbo Pascal (dari Borland Corp.) dan yang terbaru adalah Free Pascal (http://www.freepascal.org) sebagai program bebas pakai atau open source (GNU General Public License). Di sisi lain, Bahasa ADA dikembangkan oleh Departemen Pertahan Amerika Serikat (US Department of Defense) sebagai bahasa pemrograman umum skala besar dalam waktu nyata (common language for programming large scale and real-time systems). Bahasa ADA, yang jauh lebih besar dan kompleks dibandingakan dengan Pascal, lebih banyak digunakan oleh kalangan software engineering, untuk digunakan dalam pengembangan program-program dan atau rutin-rutin spesifik. Bahasa ADA saat ini telah dikembangkan lebih jauh menjadi ADA 95. Bahasa pemrograman lain, yang tidak kalah ampuh dan sangat efisien cara kerjanya adalah Bahasa C, yang dikembangkan pertama kali pada tahun 1960an oleh Dennis Richie dan Ken Thompson. Bahasa C ini dikembangkan pertama dalam lingkungan sistem operasi UNIX. Seperti juga ADA, Bahasa C merupakan bahasa yang banyak sekali digunakan oleh para system programmer (dalam dunia ilmu komputer dikenal sebagai para pembuat piranti lunak atau sistem platform). Tidak seperti bahasa-bahasa pemrograman lainnya, Bahasa C mengandung berbagai kemudahan yang dimiliki, baik oleh bahasa pemrograman “tingkat rendah” maupun “tingkat tinggi”. Sampai saat ini, bahasa ini telah dikembangkan menjadi Bahasa C++, yaitu suatu bahasa pemrograman yang berorientasi obyek (object-oriented language).
Bab 1. Pendahuluan Metode Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 3 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Bahasa pemrogram yang paling baru, yang juga banyak digunakan oleh para programmer, khususnya di dunia internet dan electronic gadgettes, adalah Java™ yang dikembangkan oleh perusahaan Sun Microsystems Corp (http://www.java.sun.com). Bahasa pemrograman ini mirip dengan Bahasa C. Meskipun kemampuannya cukup handal, khususnya dalam keluaran grafis, Bahasa Java merupakan bahasa yang sangat ringan dan dapat dengan mudah beradaptasi dengan berbagai peralatan portabel (very portable language). Kelebihan lain dari Bahasa Java ini adalah sifatnya yang bebas diapakai, termasuk juga piranti lunak pengembangannya seperti Java Development Kit, sebagai open source (dikategorikan dalam kelompok GNU General Public License). Aplikasi-aplikasi dari Java dapat dengan mudah dikonversikan atau dituliskan sebagai applets yang kemudian dengan mudah diinterpretasikan oleh berbagai www browser (Internet Explorer, Netscape, Mozilla Firefox, Opera, dll.) atau pemakai-pemakai potensial lainnya (termasuk electronic gadgettes). 1.3. Metode Numerik untuk Problem Komputasi di Teknik Kimia Perkembangan teknologi komputer yang semakin pesat telah banyak mendorong kemajuan-kemajuan di bidang lain, khususnya di bidang sains dan rekayasa (science and engineering) untuk aplikasi metode numerik dalam melakukan simulasi berbagai fenomena fisik. Dalam pengajarannya, khususnya di perguruan tinggi, metode numerik dapat dibagi menjadi 2 (dua) kategori implementasi dan pengajaran, yaitu: (a). Dasar-dasar metode numerik, seperti pencarian akar-akar persamaan non-linier atau solusi PANL (persamaan aljabar non-linier), solusi SPAL (sistem persamaan aljabar linier), dan integrasi numerik. (b). Metode numerik intensif lanjut, seperti metode volume hingga (finite volume method) dan metode elemen hingga (finite element method). Metode-metode intensif tersebut di atas seringkali dibutuhkan untuk mencari solusi dari problem-problem praktis sehari-hari (termasuk dalam problem perancangan struktur dan geometri) dan mereka pada umumnya memerlukan suatu aplikasi sistematis dari suatu kumpulan metode-metode dasar (seringkali sampai ribuan bahkan jutaan instruksi numerik dasar) sebagai pendukungnya. Di bidang keilmuan teknik kimia, banyak problem yang melibatkan persamaan-persamaan atau model matematis, baik untuk menggambarkan Bab 1. Pendahuluan Metode Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 4 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
fenomena-fenomena perpindahan, neraca massa, neraca momentum, neraca energi, atau pun untuk penggambaran suatu korelasi empiris antara besaran atau sifat fisik (kapasitas panas, densitas, tetapan laju reaksi, dll.) dengan besaran variabel bebasnya (biasanya berupa variabel suhu atau waktu). Persamaan-persamaan model matematis yang representatif digunakan untuk penggambaran fenomena-fenomena fisik atau pun korelasi empiris seperti di atas dapat dibagi atas 2 (dua) bentuk, yaitu: (a). Persamaan aljabar (algebraic equations), baik yang berbentuk linier maupun
non-linier,
yang
menggambarkan
proyeksi
variabel-
variabelnya dari suatu fenomena fisik tanpa melibatkan perubahan waktu (time independent). Sebagai contoh, yang termasuk dalam kategori persamaan aljabar ini di antaranya adalah persamaan keadaan (equation of state), persamaan kesetimbangan (equation of equilibrium), dan persamaan neraca massa (mass balance equation). Contoh Persamaan Aljabar Linier:
y( x ) = m x + n
1).
a1,1 x1 2). a2 ,1 x1 a3,1 x1
a1, 2 x2 a2 ,2 x2 a3,2 x2
a1,3 x3 b1 a2 ,3 x3 = b2 a3,3 x3 b3
Contoh Persamaan Aljabar Non-Linier: 3).
Kp =
2 pNH 3
pN2 × pH3 2
a1,1 x1 ⋅ x1 a1,2 sin ( x2 ) w1 a1,3 x3 4). a2,1 ln ( x1 ) a2,2 x1 ⋅ x2 a2,3 x1 ⋅ tan ( x3 ) = w2 a3,1 x1 a3,2 tan ( x2 ) a3,3 ln ( x3 ) w3
(b). Persamaan diferensial (differential equations), yang sering digunakan untuk penggambaran sistem dinamis, kelandaian kurva, posisi sebaran, atau profil grafis dari satu atau lebih variabel terikat (dependent variable) sepanjang
sumbu
tegak
(ordinat)
terhadap
variabel
bebasnya
(independent variable) sepanjang sumbu datar (aksis). Secara umum, persamaan-persamaan diferensial yang terbentuk dapat dibedakan atas persamaan diferensial biasa atau PDB (ordiary diffrential equation) dan Bab 1. Pendahuluan Metode Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 5 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
persamaan diferensial parsial (partial differential equation) atau PDP. Contoh Persamaan Diferensial Biasa (PDB): 1).
2).
dy = sin( x ) + x 2 dx dm dt = k1 m ⋅ n ⋅ R ⋅T dn = k e− mRT 1 dt
Contoh Persamaan Diferensial Parsial (PDP): 3).
d 2w S qx = w + ( x − L) dx 2 EI 2E I
4).
d 2θ g + w sin (θ ) = 0 2 dt L
Secara garis besar, pembahasan metode numerik dalam buku ini akan dibatasi hanya pada pembahasan tentang solusi-solusi problem untuk persamaan aljabar linier dan persamaan aljabar non-linier dengan banyak melibatkan perhitungan-perhitungan secara numerik, termasuk juga yang dilakukan dengan bantuan komputer atau alat-alat komputasi yang sejenisnya. Sedangkan, hal-hal yang berhubungan dengan persamaan diferensial akan dipelajari lebih khusus pada Bab 8 tentang solusi numerik dari persamaan diferensial. Di sisi lain, perlu diketahui dan dipelajari bahwa perhitungan-perhitungan dengan menggunakan komputer selalu melibatkan beberapa kendala sistematis, yang dikenal sebagai error atau galat, atau sering juga disebut sebagai sesatan. Hal-hal yang berhubungan dengan galat dalam komputasi numerik seperti di atas akan disajikan dan dibahas secara lebih luas pada Bab 2, termasuk juga di dalamnya tentang contoh-contoh program dalam Bahasa FORTRAN 77 dan PASCAL yang terkait dengan masalah galat dalam komputasi numerik. Bahasa FORTRAN yang dipakai pada buku ini lebih banyak ditekankan pada pembahasan untuk Bahasa FORTRAN 77, sebagai dialek yang masih paling banyak digunakan sampai saat ini di dunia ilmu teknik. Di sisi lain, buku ini cukup banyak juga menggunakan Turbo PASCAL sebagai Bahasa Pascal yang pernah
Bab 1. Pendahuluan Metode Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 6 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
paling banyak digunakan di komputer-komputer seri IBM PC dan kompatibelnya, pada dekade 1980an. Selanjutnya, pada Bab 3 dibahas secara ringkas tentang pokok-pokok pembuatan program komputasi dan/atau aplikasi metode numerik dengan menggunakan bahasa pemrograman FORTRAN 77 dan Turbo PASCAL, yang diharapkan dapat membantu para pembaca melalui contoh-contoh terkait yang sederhana. Sebagai pembuka dari dasar-dasar pemrograman dalam dunia teknik dan khususnya teknik kimia, disajikan problem-problem tentang persamaan aljabar linier, atau secara umum disebut sistem persamaan aljabar linier (SPAL) atau yang seringkali disebut sebagai persamaan aljabar simultan (simultaneous algebraic equations). Solusi dari problem-problem tentang persamaan aljabar linier ini disajikan secara praktis namun lebih mendalam dalam Bab 4, termasuk contoh-contoh programnya yang ditulis dalam bahasa pemrograman FORTRAN dan Turbo PASCAL (terutama sebagai ilustrasi terjemahannya). Pembahasan tentang metode-metode solusi yang lebih ditekankan disini adalah berdasarkan metode langsung, khususnya yang terkait dengan Metode Eliminasi Gauss dan turunannya. Kemudian, pada Bab 5 dibahas tentang metode-metode untuk solusi persamaan-persamaan aljabar non-linier (PANL), atau yang lebih dikenal sebagai pencarian akar persamaan (root finding). Penekanan dan fokus pembahasan pada Bab 5 ini terutama adalah pada metode-metode solusi yang umum, seperti Metode Titik-Tengah (Mid-Point), Metode Regula Falsi, Metode NewtonRaphson, dan Metode Secant. Seperti juga pada bab-bab sebelumnya, yaitu untuk memahirkan ketrampilan menulis program dan sekaligus melakukan pemrograman, pada Bab 5 ini juga disajikan contoh-contoh program terkait dengan solusi PANL, baik dalam Bahasa FORTRAN, disamping juga ilustrasi terjemahannya yang akan diberikan dalam Bahasa Turbo Pascal. Berturut-turut pada Bab 6 dan Bab 7, sebagai aplikasi pemrograman yang lebih lanjut dalam dunia teknik dan/atau teknik kimia, disajikan secara cukup ringkas dan lugas tentang dasar-dasar diferensiasi dan integrasi numerik. Beberapa metode numerik sederhana yang terkait dengan teknik diferensiasi dan integrasi numerik juga dibahas secara praktis, diikuti pula oleh contoh-contoh program terkait dalam FORTRAN 77 dan Turbo PASCAL untuk memahirkan ketrampilan pembuatan program. Bab 1. Pendahuluan Metode Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 7 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Akhirnya, sebagai penutup bahasan dalam buku ini, pada Bab 8 akan diberikan pembahasan singkat atau lebih tepatnya pembahasan tentang dasardasar solusi persamaan diferensial biasa (disingkat PDB) atau ordinary differential equations (disingkat ODEs) sebagai salah satu pokok bahasan paling penting dan paling banyak digunakan di dunia pemodelan (modelling), khususnya di dunia teknik kimia. Dasar-dasar pemrograman yang terkait dengan solusi PDB ini, yang pada dasarnya terkait dengan metode solusi dari Euler dan Runge-Kutta, akan diberikan juga untuk membekali para mahasiswa, sekaligus menambah kemahiran dalam pemrogram metode numerik bahkan juga yang terkait dengan pemodelan.
Bab 1. Pendahuluan Metode Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 8 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Bab
2
Analisis Galat dalam Komputasi Numerik
Galat atau sesatan (error) merupakan hal pokok yang harus diketahui sebagai kendala yang sangat mungkin dijumpai pada saat melakukan aktivitas komputasi numerik yang menggunakan komputer. Galat dapat muncul tanpa diduga, bahkan dapat mengubah konvergensi solusi yang seharusnya didapat, karena keterbatasan-keterbatasan yang ada pada CPU (central processing unit), termasuk processor maupun co-processor. Di sisi lain, perlu diingat kembali bahwa pengembangan dan aplikasi praktis dari metode numerik, khususnya di bidang sains dan teknologi, tidak terlepas dari pengembangan beberapa definisi dan teorema dalam ilmu kalkulus yang berkenaan dengan fungsi polinomial f ( x) . 2.1. Representasi Bilangan dan Komputasi Numerik Secara praktis, komputer akan dengan sangat mudah melakukan operasioperasi aritmetika (penambahan, pengurangan, perkalian, pembagian, dan perpangkatan) untuk bilangan-bilangan integer (bilangat bulat tidak pecahan, misalnya: 2, -17, 32673, dll.). Sebagai contoh, operasi 3 ditambah dengan 8 akan dengan mudah menghasilkan angka 11 (dapat ditulis sebagai 3 + 8 = 11), demikian juga operasi 21 dibagi dengan 3 yang menghasilkan 7 (dapat ditulis sebagai 21 : 3 = 7). Dalam hal ini, untuk kedua operasi aritmatika tersebut, komputer akan menyajikan jawabannya dengan “tepat dan benar”. Namun, untuk operasi bilangan dan yang menghasilkan bilangan real (bilangan pecahan, seperti ditulis dalam notasi pemrograman baku 2.5, 6.1617, 123.4567, dll.), ternyata komputer tidak selalu memberikan jawaban yang tepat dan benar. Sebagai contoh, untuk operasi
( 7)
2
ternyata hasilnya tidak “tepat”
sama dengan 7, bila digunakan “presisi standar” (single precision) dari compiler (Turbo Pascal atau FORTRAN). Dari operasi aritmetika
( 7)
2
tersebut, dapat dijelaskan prosesi terpenting
yang terjadi dalam operasi tersebut sebagai berikut: (a). Bila “compiler” menggunakan single precision:
Bab 2. Analisis Galat dalam Komputasi Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 9 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
•
[mem#1] ◄
7 (artinya: hasil perhitungan
7 disimpan dalam
memori komputer [mem#1]), •
Isi dari [mem#1] adalah 2.645751311065396290,
•
[mem#2] ◄
7 (artinya: hasil perhitungan
7 disimpan dalam
memori komputer yang lain, disebut [mem#2]), •
Isi dari [mem#2] adalah 2.645751311065396290 (sama dengan [mem#1]),
•
Hasil dar operasi
( 7)
2
dilakukan dengan cara: mengalikan isi
[mem#1] dengan isi [mem#2], dan hasilnya disimpan pada kapling memori komputer yang lainnya lagi, sehingga •
[mem#3] ◄ [mem#1] * [mem#2],
•
Isi dari [mem#3] adalah 7.000000000007275960 (perhatikan: ada ketidaktepatan yang dimulai pada desimal atau digit ke-12).
(b). Bila compiler menggunakan double precision: •
[mem#1] ◄
•
Isi dari [mem#1] adalah 2.645751311064590590,
•
[mem#2] ◄
•
Isi dari [mem#2] adalah 2.645751311064590590,
•
Hasil dari operasi
7, 7,
( 7)
2
dilakukan dengan cara: mengalikan isi
[mem#1] dengan isi [mem#2], dan hasilnya disimpan pada kapling memori komputer yang lainnya lagi, sehingga •
[mem#3] ◄ [mem#1] * [mem#2],
•
Isi dari [mem#3] adalah 7.000000000000000000 [-4.33680x..xE-0019] (artinya: meskipun hasilnya tertulis benar sampai pada mantisa atau digit ke-18, ternyata sesungguhnya ada penyimpangan yang sangat kecil dimulai pada desimal ke -19).
Dari operasi aritmetika
( 7)
2
dengan menggunakan presisi variabel yang
berbeda seperti di atas, tampak jelas bahwa “ketidaktepatan” perhitungan tetap dapat terjadi, hanya posisi mantisa ke-12 atau ke-19 sebagai pembedanya. Dalam hal ini, dapat dimengerti bahwa sesungguhnya untuk
7 = 2.6457513…
melibatkan desimal (digit) yang tidak terbatas jumlahnya, namun ketelitian (presisi) dari komputer sesungguhnya terbatas, yang berarti juga bahwa nilai tersebut (2.6457513…) hanyalah merupakan nilai pendekatan (aproksimatif) untuk operasi
7.
Bab 2. Analisis Galat dalam Komputasi Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 10 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Untuk
merepresentasikan
bilangan
real,
pada
umumnya
komputer
menggunakan sistem bilangan dengan “titik-berimbang” (floating-point). Basis bilangan yang dipakai umumnya dapat sebagai basis 2 (binary), basis 8 (octal) atau basis 16 (hexadecimal). Sedangkan format penyimpanannya dalam memori komputer dapat digambarkan sebagai berikut
x = σ ⋅ ( ⋅ a1a2 … at ) β ⋅ β e dimana a1 ≠ 0 (disebut sebagai titik radik), dan 0 ≤ ai ≤ β − 1 ,
σ
adalah tanda bilangan atau unary (+) arau (-),
( ⋅a1a2 … at )β
adalah mantisa (bilangan di kanan tanda titik ‘.’),
β adalah basis bilangan,
e adalah bilangan bulat (integer) dengan L ≤ e ≤ U , dimana L dan U masing-masing adalah nilai terkecil dan terbesar. Bila representasi bilangan real x dinyatakan dalam format penulisan floating-point berikut ini
x = σ ⋅ ( ⋅ a1a2 … an an+1 … at ) β ⋅ β e maka representasi pemotongan (truncation atau chopping) desimal dari x dapat dinyatakan dalam bentuk floating-point fl ( x ) sebagai berikut
ξ ( x ) = σ ⋅ ( ⋅ a1a2 … an )β ⋅ β e dan representasi pembulatan (rounding) dari bilangan x di atas dapat ditampilkan sebagai
β e σ ⋅ ⋅ a a … a ⋅ β ; 0 ≤ a ≤ ( ) 1 2 n n + 1 β 2 ξ ( x) = σ ⋅ ( ⋅ a a … a ) + ( ⋅0… 01) ⋅ β e ; β ≤ a ≤ β n β n +1 β 1 2 2 Bab 2. Analisis Galat dalam Komputasi Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 11 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Bila, x adalah bilangan “eksak” dari suatu bilangan yang diinginkan dalam domain jawab, dan
ξ ( x ) adalah bilangan “hampirannya” (bilangan pendekatan
yang menyatakan hampiran dari x pada domain jawab), maka dapat dipastikan bahwa
ξ ( x) ≠ x Oleh karena itu, galat absolut (absolute error) yang dihasilkan dari suatu proses aritmetika (komputasi numerik) adalah
εΑ = x − ξ ( x) Sedangkan, galat nisbi (relative error) dari proses di atas dapat dituliskan sebagai
εR =
x − ξ ( x) x
sehingga
ξ ( x) =
(1 − ε R ) x
Secara umum, jika operasi-operasi aritmetika dalam mesin komputer dinyatakan dalam simbol-simbol … (perkalian), ¬ (pembagian), (penambahan), dan √ (pengurangan), maka operasi-operasi analog untuk variabel-variabel x dan
y beserta hasilnya, dapat dituliskan sebagai berikut
x
θ
y = ξ (ξ ( x ) × ξ ( y ) )
x
τ
y = ξ (ξ ( x ) ÷ ξ ( y ) )
x
ρ
y = ξ (ξ ( x ) + ξ ( y ) )
x
σ
y = ξ (ξ ( x ) − ξ ( y ) )
Bab 2. Analisis Galat dalam Komputasi Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 12 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Bab
3
Dasar-Dasar Bahasa Pemrograman Numerik dalam FORTRAN dan PASCAL
Di berbagai perguruan tinggi terkemuka di dunia, terutama di fakultasfakultas sains dan teknologi, ada 2 bahasa pemrograman utama yang digunakan untuk implemetasi pemrograman terstruktur (structured programming), yaitu FORTRAN dan PASCAL. Pada dasarnya, kedua bahasa pemrograman tersebut memiliki beberapa kesamaan dan kemudahan untuk dapat digunakan dalam pemrograman-pemrograman
numerik
saintifik
(ilmiah),
khususnya
untuk
komputasi dalam bidang teknik kimia. Bab 3 ini menyajikan secara ringkas dan sederhana, khususnya untuk memberikan dasar dan pengertian ringkas tentang bahasa-bahasa memprograman tersebut kepada para pembaca sekalian. 3.1. Sekilas tentang Bahasa FORTRAN dan PASCAL Bahasa FORTRAN yang dipakai pada dasarnya adalah yang mengikuti standar FORTRAN 77. Namun demikian, para mahasiswa sangat diharapkan untuk mau mempelajari dan atau memperdalam varian dialek lainnya, seperti FORTRAN 90 dan FORTRAN 95. Seperti telah sedikit disinggung pada Bab 1, bahasa
pemrogram
FORTRAN
(singkatan
dari
FORmula
TRANslation)
merupakan bahasa pemrograman yang paling lama populer, yaitu sejak diperkenalkan pertama kali pada tahun 1953 oleh John Bachus dan diproduksi pertama kali sebagai compiler (kompilator) pada tahun 1957. Fitur utama dari Bahasa FORTRAN, terutama yang disusun sejak tahun 1977, adalah bahasa yang lebih mengutamakan penulisan program yang tepat, efisien dan dapat berulang dalam suatu sub-program tertentu (structured-oriented language). Sampai saat ini, bahasa FORTRAN telah mengalami berbagai kemajuan dan perkembangan dalam standar internasional, yang dapat disebutkan secara kronologis sebagai berikut: • FORTRAN 66 – dikenal juga sebagai FORTRAN IV, sebagai standar yang pertamakali diperkenalkan oleh American National Standards Institute atau ANSI, dan diterima secara internasional pada tahun 1972. • FORTRAN 77 – ANSI X3.9-1978 – sebagai standar bahasa pemrograman FORTRAN terstruktur (structured programming) yang pertama diperkenalkan. Bab 3. Dasar-Dasar Pemrograman dalam FORTRAN 77 dan Turbo PASCAL
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 20 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
•
• •
FORTRAN 90 – ISO/IEC 1539:1991 – mengalami berbagai revisi untuk menjadikan bahasa FORTRAN sebagai bahasa pemrograman komputer yang modern. FORTRAN 95 – ISO/IEC 1539-1: 1997 – merupakan perbaikan minor dari versi FORTRAN 90. FORTRAN 2003 – ISO/IEC 1539-1:2004(E) – mengalami beberapa penambahan object-oriented support dan interoperabilitas dengan Bahasa C (sebagai natifnya).
Dewasa ini, cukup banyak piranti lunak Bahasa FORTRAN tersedia di pasaran. Yang paling banyak adalah dalam dialek FORTRAN-77 dan FORTRAN95. Beberapa versi bebas-unduh (free download), meskipun dengan berbagai pembatasan yang bervariasi. Yang dapat dijumpai di jaringan internet adalah: 1. Intel ® Visual Fortran: http://www.intel.com/cd/software/products/asmona/eng/278834.htm, 2. Compaq Visual Fortran: saat ini sudah tidak ada lagi (discontinued), karena hanya diproduksi sampai tanggal 31 Desember 2005, yang kemudian disarankan untuk beralih ke Intel ® Visual Fortran, 3. Silverfrost FTN95: http://www.silverfrost.com/ 4. GNU Fortran: http://gcc.gnu.org/wiki/GFortran, 5. g95: http://www.g95.org/, dan 6. g77: http://www.gnu.org/software/fortran/fortran.html.
Gambar 3.1. Kompilator Compaq Visual Fortran yang sudah tidak diproduksi lagi. Bab 3. Dasar-Dasar Pemrograman dalam FORTRAN 77 dan Turbo PASCAL
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 21 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Walaupun sudah tidak diproduksi lagi, namun untuk melakukan kompilasikompilasi program dalam buku ini, piranti lunak Compaq Visual Fortran (CVF) versi 6.5 (Gambar 3.1) masih tetap digunakan karena alasan-alasan kemudahan dan juga kepraktisannya. Selain CVF tersebut, kompailer lain yang digunakan adalah versi GNU Project (piranti lunak bebas alias open source, yang dapat juga dilihat situsnya di http://www.gnu.org/), yaitu g77 dan g95. Sebagai bahasa pemrogram pendamping FORTRAN, yang tidak kalah pentingnya dalam penyajian mata kuliah Metode Numerik ini adalah Bahasa PASCAL. Bahasa PASCAL yang digunakan dalam mata kuliah ini adalah berdasarkan varian atau dialek yang dikembangkan oleh Philippe Kahn dari Borland Corporation pada tahun 1982, yaitu Turbo PASCAL atau kadang dikenal juga sebagai Borland PASCAL (Gambar 3.2). Ada beberapa versi Turbo PASCAL yang dapat berjalan dalam platform MS-DOS (MicroSoft – Disk Operating Sistem), yaitu versi-versi 1.0, 3.0, 4.0, 5.0, 5.5, 6.0 dan 7.0. Sedangkan versi yang dapat berjalan dalam platform MS-Windows ada 2, yaitu versi 1.0 dan 1.5. Semua versi dari Turbo Pascal tersebut sudah lama tidak diproduksi lagi. Konon
kabarnya,
sebagai
kelanjutan
dari
Turbo
Pascal
tersebut,
dikembangkanlah bahasa pemrograman yang lebih maju lagi yang dikenal sebagai Borland Delphi.
Gambar 3.2. Kompilator Turbo Pascal yang juga sudah tak diproduksi lagi.
Setelah versi Turbo pascal tidak beredar lagi di pasaran, maka dewasa ini
Bab 3. Dasar-Dasar Pemrograman dalam FORTRAN 77 dan Turbo PASCAL
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 22 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
telah dikembangkan suatu dialek Bahasa PASCAL yang juga hampir identik dengan Turbo PASCAL, namun dengan arsitektur 32/64-bit yang lebih maju, yaitu Free PASCAL (lihat situsnya: www.freepascal.org). Free PASCAL (dikenal juga sebagai FPK PASCAL atau FPC) adalah piranti lunak keluarga “piranti lunak bebas” (free software) yang dapat digunakan di berbagai platform (portable), serta dikembangkan dengan metodologi terbuka (open source). 3.2. Ciri-ciri Kompilator FORTRAN 77 dan Turbo PASCAL Berdasarkan sejarah perkembangannya, yaitu sampai awal tahun 1980an, Bahasa FORTRAN lebih banyak dipakai dan dikembangkan pada komputerkomputer besar (mainframes dan mini-computers), bukan pada komputer pribadi (PC, personal computer), karena ukuran kompilatornya yang relatif sangat besar dan umumnya dipergunakan untuk perhitungan-perhitungan (matematik numerik) dengan ukuran yang besar pula (pada waktu itu). Secara umum pula, karena ukuran kompilatornya yang sangat besar (untuk mainframe), kompilator FORTRAN 77 dirancang hanya untuk dapat digunakan secara terpisah dengan “editor teks”, yaitu editor teks “vi” yang umum dipakai pada sistem operasi UNIX (dan, sekarang telah dikembangkan pula untuk sistem operasi LINUX). Kompilator dengan penggunaan secara terpisah antara kompilator dan editor teks seperti di atas disebut sebagai kompilator non-IDE (Integrated Development Environtment). Setelah perkembangan sistem operasi MicroSoft Windows yang semakin pesat pada komputer-komputer pribadi dengan prosesor Intel™, beberapa perusahaan yang dipelopori oleh Microsoft Corp. sendiri, kemudian diikuti oleh Lahey Corp., Intel Corp. (yang juga berkolaborasi dengan HP dan Compaq) mulai mengembangkan berbagai versi IDE dari kompilator FORTRAN pada awal tahun 1990an. Berbeda dengan FORTRAN, kompilator Turbo PASCAL secara spesifik dikembangkan dengan komprehensif untuk komputer-komputer pribadi (PC). Oleh karenanya, kompilator Turbo PASCAL telah dilengkapi dengan IDE (editor yang terintegrasi dengan kompilatornya) sejak awal dikembangkan pada tahun 1982 oleh Philippe Kahn dari Borland Corporation. Demikian pula untuk kompilator Free PASCAL (FPC), yang dikembangkan oleh Florian Paul Klämpfl pada awal tahun 2000an, juga memiliki IDE yang sampai saat ini tetap terjaga oleh komunitas open source (http://www.freepascal.org). Ada juga Ezy Pascal...!!!
Bab 3. Dasar-Dasar Pemrograman dalam FORTRAN 77 dan Turbo PASCAL
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 23 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Bab
4
Sistem Persamaan Aljabar Linier (SPAL)
Sistem Persamaan Aljabar Linier (SPAL) atau dikenal juga sebagai “Persamaan Aljabar Linier Serempak” banyak sekali dijumpai dalam perhitunganperhitungan teknik kimia yang melibatkan solusi numeris. Beberapa metode solusi yang melibatkan solusi SPAL, di antaranya adalah solusi Sistem Persamaan Aljabar Non-Linier (SPANL), solusi Persamaan Diferensial Biasa (PDB), solusi Persamaan Diferensial Parsial (PDP), Regresi Linier dan Non-Linier. Dalam bab ini, para pembaca ataupun para mahasiswa akan diajak terlebih dahulu untuk membaca dan meninjau ulang (review) secara ringkas dan cepat tentang beberapa pengertian dasar skalar, vektor, matriks, dan sistem persamaan linier. Pengulangan ini sangat diperlukan mengingat mungkin sekali banyak di antara pembaca yang sudah terlupa dengan materi-materi kuliah matematik yang pernah diikutinya dalam Mata Ajaran Aljabar Linier. Di samping itu juga, para pembaca diajak untuk memahami secara praktis tentang konsepkonsep pemahaman dalam aljabar linier yang diimplementasikan dalam metode numerik. Setelah pengulangan tentang aljabar numeris, para pembaca diajak secara ringkas untuk memahami konsep-konsep perhitungan numeris yang berhubungan dengan metode-metode Eliminasi Gauss (Gauss-Jordan) dan Pivot Gauss. Kemudian, lebih jauh lagi diajak untuk melakukan analisis numerik. 4.1. Skalar, Vektor, Matriks dan SPAL Skalar, atau suatu konstanta tak-berdimensi, didefinisikan sebagai suatu obyek bilangan tunggal (berdimensi nol), baik bilangan nyata (R, real) ataupun bilangan kompleks (C, complex) yang daripadanya dapat dilakukan sembarang operasi aritmatika/aljabar secara linier atau pun tak-linier (non-linier), seperti penambahan (adisi), pengurangan (substraksi), perkalian (multiplikasi), pembagian (divisi), dan perpangkatan (eksponen). Dalam praktek penerapannya, besaran skalar dapat dibagi atas 2 bagian besar dalam domain bilangan, yaitu •
k = ℝ , suatu skalar dalam bidang bilangan nyata,
Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 52 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
•
z = ℂ , suatu skalar dalam bidang bilangan kompleks.
Vektor atau ‘ruang vektor V’ adalah suatu set (himpunan) obyek berupa skalar (berdimensi satu) yang kepadanya dapat dilakukan operasi-operasi skalar spesifik berupa ‘penambahan vektor’ (vector addition) dan ‘perkalian skalar’ (scalar multiplication). Operasi-operasi tersebut harus memenuhi aturan-aturan baku, yaitu asosiatif, komutatif, dan distributif. V = ℝ n , suatu himpunan skalar dalam bidang bilangan nyata, yang memiliki jumlah anggota sebanyak n buah, atau dapat juga ditulis sebagai
ν 1 ν 1 V = , yaitu dalam bentuk ‘vektor vertikal’, atau dapat juga sebagai ⋮ ν n V =
[ℏ 1
ℏ2
…
ℏ n ] , dalam bentuk ‘vektor horizontal’,
Z = ℂn , suatu himpunan skalar dalam bidang bilangan kompleks dengan jumlah anggota (elemen) sebanyak n buah. Matriks didefinisikan sebagai suatu set vektor yang tersusun sedemikian rupa sehingga tebentuk struktur (kumpulan) bilangan dengan pola persegi-empat, atau berorder m (baris) x n (kolom), sebagai bentuk suatu bidang (berdimensi dua).
a1,1 a [ A] = ⋮2,1 am ,1
a2,1
…
a2,2
…
am ,2
…
a1,n a2,n ⋮ am ,n
(4.1)
Dalam suatu sistem persamaan aljabar linier, sering kali disebut juga sebagai persamaan aljabar linier simultan, pada umumnya hanya digunakan matriks-matriks bujur-sangkar sehingga secara sederhana dapat dikatakan, bahwa ordo matriks identik dengan jumlah persamaan. Lambang matriks selalu dituliskan dalam huruf besar (kapital), sedangkan elemen-elemennya (anggotanya) dituliskan dalam huruf kecil seperti dalam penulisan matriks A di atas. Sistem persamaan aljabar linier (SPAL) didefinisikan sebagai suatu Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 53 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
himpunan persamaan-persamaan aljabar linier yang variabel-variabelnya hanya berpangkat tunggal (linier) dengan notasi berikut
a1,1 x1 + a1,2 x2 + … + a1,n xn a2,1 x1 + a2,2 x2 + … + a2,n xn am ,1 x1 + am ,2 x2 + … + am ,n xn
= b1 = b2 ⋮ = bm
(4.2)
sedemikian rupa sehingga persamaan di atas dapat disusun-ulang dan dituliskan dalam notasi berikut
[ A] ⋅ [ x ]
=
[b ]
(4.3)
atau dalam notasi matriks secara umum
a1,1 a 2,1 ⋮ am ,1
a1,2
…
a2,2
…
am ,2
…
a1,n a2,1 ⋮ am , n
x1 x ⋅ 2 ⋮ xn
b1 b = 2 ⋮ bm
(4.4)
Jika mengikuti operasi matriks baris untuk mencari solusinya dengan metode eliminasi Gauss (Gaussian elimination method), maka notasi matriks seperti (4.3) dapat dituliskan dalam notasi matriks imbuhan (augmented matrix) berikut
a1,1 a 2,1 ⋮ am ,1
a1,2
…
a1,n
a2,2
…
a2,1 ⋮
am ,2
…
am , n
b1 b2 ⋮ bm
(4.5)
SPAL di atas memiliki n buah variabel atau bilangan anu (xj, j = 1, 2,…, n) yang identik dengan jumlah persamaannya. Koefisien koefisien ai , j ( ai , j … am ,n ) merupakan konstanta (yang diketahui harga-harganya), demikian pula vektor bi ( b1 … bm ) yang dikenal sebagai vektor ruas kanan (VRK) yang harganya harus diketahui. Berdasarkan konvensi, indeks pertama dari elemen ai , j menyatakan posisi
baris ( = i ) sedangkan indeks kedua menyatakan posisi kolom ( = j ).
Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 54 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Agar SPAL (4.2) di atas dapat dicari solusinya, maka persayaratanpersayaratan berikut harus dipenuhi: 1.
A ⋅ x = b mempunyai jawab unik x ∈ V untuk setiap b ∈ V ,
2.
A ⋅ x = b hanya memiliki satu solusi x ∈ V untuk setiap b ∈ V ,
3. Jika A ⋅ x = 0 , berarti x = 0 , 4.
A−1 (atau inversi dari matriks A ) ada,
5. Determinan dari matriks berharga tak-nol ( det( A) = ∅ ), 6. Rank( A ) = n , atau matriks A memiliki ordo n. Seperti telah dijelaskan di atas, bahwa matriks A adalah matriks bujur sangkar. Bila salah satu saja persyaratan di atas tak terpenuhi, maka akan terjadi kombinasi linier (dan, hal ini akan mengakibatkan persamaan aljabar di atas menjadi bersifat SINGULAR). Dalam hal ini, kemungkinan terjadinya kombinasi linier adalah berdasarkan kesamaan parameter-parameter (koefisien-koefisien
ai , j ) SPAL berdasarkan baris (kombinasi linier per baris) atau dapat juga berdasarkan kolom (kombinasi linier per kolom), yaitu •
kombinasi linier per baris yang dapat terjadi bila minimal ada 2 baris yang sama (identik) susunan koefisien-koefisien persamaannya, atau
•
kombinasi linier per kolom, yang terjadi bila semua baris yang memiliki koefisien-koefisien SPAL yang identik.
4.2. Solusi SPAL Secara Numeris Solusi SPAL secara numeris umumnya selalu (dapat) lebih efisien dan cepat dibandingkan dengan metode-metode analitis, seperti metode Cramer. Namun demikian, solusi numerik ini secara teknis adakalanya juga berkendala, karena berbagai hal seperti •
adanya beberapa persamaan yang mendekati (menyerupai) kombinasi linier, akibat adanya “round off error” dari mesin penghitung pada suatu tahap perhitungan,
•
adanya akumulasi “round off error” pada proses komputasi yang berakibat domain bilangan nyata (fixed point) dalam perhitungan akan terlampaui (overflow), yang biasanya akibat dari jumlah persamaan yang terlalu besar.
Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 55 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Sebelum membahas secara lebih terinci, ada baiknya pembaca mengetahui berbagai metode solusi numerik yang banyak dipakai. Secara umum, metodemetode numerik tersebut dapat diklasifikasikan sebagai: a. metode langsung, yaitu metode perhitungan numeris berdasarkan operasi-operasi baris yang langsung diterapkan pada matriks SPAL, yang akan lebih banyak dibahas mulai dari Sub-bab 4.3 di bawah ini, b. metode tak langsung, yaitu metode iteratif (sejenis metode trial and error) yang diterapkan untuk pendekatan perhitungan solusi SPAL, seperti: Metode Jacobi, Metode Gauss–Seidel, dan Metode SOR (successive over relaxation). Metode Jacobi, prinsipnya merupakan metode iteratif yang melakuakn perbaharuan nilai x yang diperoleh pada tiap iterasi (mirip metode substitusi berurutan, successive substitution). Sedangkan metode Gauss-Seidel, prinsipnya mirip dengan metode Jacobi, namun melibatkan perhitungan implisit. Metode lainnya, dari golongan metode tak langsung adalah metode successive over relaxation (SOR), yang prinsipnya merupakan perbaikan secara langsung dari metode Gauss-Seidel dengan cara menggunakan faktor relaksasi (faktor pembobot) pada setiap tahap/proses iterasi. Metode-metode tak-langsung seperti di atas pada umunya sangat tidak efisien dan ‘time consuming’ (memerlukan CPU time) yang jauh lebih besar dari metode langsung. Metode-metode ini dapat dilihat dan dipelajari pada buku-buku numerik yang ada di perpustakaan atau toko buku. 4.3. Sekilas tentang Solusi SPAL dengan Menggunakan Metode Langsung Seperti telah dijelaskan pada sub-bab sebelumnya, ada 2 (dua) metode numeris yang dapat digunakan untuk penyelesaian SPAL, yaitu metode langsung dan metode tak langsung. Dalam pembahasan di sini, metode-metode langsung yang dimaksudkan adalah •
Eliminasi Gauss (dalam penulisan program akan disingkat namanya menjadi EGAUSS saja), yang prinsipnya merupakan operasi-operasi baris dominan, merupakan eliminasi dan substitusi variabel-variabelnya sedemikian rupa sehingga dapat terbentuk matriks segitiga atas, dan pada akhirnya, solusi SPAL diselesaikan menggunakan teknik substitusi
Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 56 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
balik (back substitution). Metode Eliminasi Gauss ini secara ringkas akan dibahas pada sub-bab di bawah. •
Eliminasi Gauss-Jordan, yang prinsipnya mirip sekali dengan metode EGAUSS, namun dalam metode ini jumlah operasi numerik yang dilakukan jauh lebih besar, karena matriks A mengalami inversi terlebih dahulu untuk mendapatkan matriks identitas (I). Karena kendala tersebut, maka metode ini menjadi sangat jarang dipakai, namun sangat bermanfaat untuk menginversikan matriks. Metode ini tidak dibahas lebih lanjut dalam buku ini.
•
Dekomposisi LU (dalam penulisan program, namanya akan disingkat menjadi DECOLU), yang prinsipnya melakukan dekomposisi matriks A terlebih dahulu sehingga dapat terbentuk matriks-matrik segitiga atas dan bawah, kemudian secara mudah dapat melakukan substitusi balik (back substitution) untuk berbagai vektor VRK (vektor ruas kanan). Metode ini secara lebih jelas akan dibahas pada Sub-bab 4.8, khusus tentang metode-metode dekomposisi LU dan teknik komputasinya.
•
Solusi sistem Matriks TRIDIAGONAL (dalam penulisan program, namanya disingkat menjadi SM3DIA), yang prinsipnya merupakan solusi SPAL dengan bentuk matrik pita (satu diagonal bawah, satu diagonal utama, dan satu diagonal atas) pada matriks A. Metode ini akan dibahas lebih lanjut pada Sub-bab 4.9.
4.4. Algoritma dan Metode Solusi SPAL dengan Eliminasi Gauss Agar dapat lebih memahami solusi SPAL menggunakan metode eliminasi Gauss, di bawah ini akan dibahas operasi-operasi baris utama dari matriks SPAL bersangkutan, sedemikian rupa sehingga terbentuk suatu matriks segitiga-atas yang dianggap dapat menggantikan matriks SPAL yang sesungguhnya Namun demikian, matriks segitiga-atas ini memiliki kemudahan perolehan solusi yang lebih baik. Untuk mendapatkan solusi yang dimaksudkan, maka operasi-operasi baris utama dari matriks SPAL dapat dibagi atas langkah-langkah berikut ini: (1)
Langkah 1: pilih harga koefisien a1,1 sedemikian rupa sehingga tidak berharga nol. Kemudian, tentukan ‘pengali baris’ (= mi ,1 ) sebagai Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 57 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
berikut:
mi ,1
ai(1),1 = (1) ; i = 2,3,…, n a1,1
(4.6)
Kemudian, konstanta-konstanta pengali baris ( mi ,1 ) di atas digunakan untuk melakukan ‘eliminasi’ koefisien-koefisien x1 pada persamaanpersamaan ke-2 sampai ke-n, sebagai berikut
ai(,2)j = ai(1), j − mi ,1 ⋅ a1,(1)j ; i, j = 2, …, n bi( 2) = bi(1) − mi ,1 ⋅ b1(1) ; i = 2, …, n
(4.7)
Dalam hal ini, baris pertama dari matriks A dan vektor b tidak boleh
A(1) di bawah ( 2) ( 2) diagonal harus dibuat nol. Oleh karena itu, sistem A ⋅ x = b akan
diganggu, sedangkan kolom pertama dari matriks tampak seperti berikut (1) a1,1 0 ⋮ 0
(1) a1,2
…
( 2) a2,2
…
an( 2),2
…
a1,(1)n x1 b1(1) ( 2) a2,(1)n x2 b2 ⋅ = ⋮ ⋮ ⋮ ( 2) bn( 2) an ,n xn
(4.8)
Proses eliminasi dilanjutkan untuk kolom-kolom 2, 3 sampai ke-n, dan diungkapkan dalam langkah-langkah berikut. Langkah k: menggunakan k untuk indeks iterasi, untuk rentang harga 1 ≤ k ≤ n −1.
⋅ x = b ( k ) telah terbentuk berdasarkan proses operasi pada langkah k , dan dengan anggapan koefisien-koefisien pada x1 , x2 , …, xk −1 telah tereliminasi (tersisihkan, sehingga harganya (k )
Bila A
menjadi nol pada kolom bersangkutan) yang diperoleh pada langkahlangkah sebelumnya, sedemikian rupa sehingga matriks A
(k )
sekarang
akan memiliki bentuk seperti pada Persamaan (4.10). (k )
Kemudian, pilih harga ak ,k sedemikian rupa yang tidak berharga nol, dan tentukan ‘pengali baris’ mi ,k sebagai berikut
Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 58 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
mi ,k
A( k )
ai(,kk) = ( k ) ; i = k + 1, …, n ak , k
(1) a1,1 0 ⋮ = 0 ⋮ 0
(1) a1,2
(1) a1,3
(1) a1,4
…
( 2) a2,2
⋱ …
0
ak( k,k)
…
…
0
an( n,k)
…
(4.9)
a1,(1)n a2,( 2)n ⋮ ak( k,n) ⋮ an( n,n)
(4.10)
Kemudian, gunakan konstanta-konstanta di atas untuk menyisihkan koefisien-koefisien xk pada persamaan-persamaan k + 1 sampai ke- n , seperti di bawah ini:
ai(,kj+1) = ai(,kj) − mi ,k ⋅ ak( k, )j bi( k +1) = bi( k )
− mi ,k ⋅ bk( k ) ; i, j = k , …, n
(4.11)
Dari proses operasi di atas, yang harus diperhatikan adalah bahwa baris-baris terdahulu, dari 1 sampai k , tidak boleh diganggu, dan hargaharga nol dapat dimasukkan pada kolom k di bawah diagonal. Dengan mengikuti langkah-langkah di atas, setelah langkah ke n − 1 akan diperoleh suatu matriks dengan susunan seperti berikut (1) a1,1 0 ⋮ 0
…
…
⋱ ⋱ ...
0
a1,(1)n x1 b1(1) (2) ⋮ x2 b2 ⋅ = ⋮ ⋮ ⋮ (n) bn( n ) an ,n xn
(4.12)
Perhatikanlah, bahwa matriks A di atas sekarang telah berubah menjadi matriks segitiga-atas (disebut juga sebagai matriks U , singkatan dari Upper), sehingga
U ⋅ x = b( n )
Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
(4.13)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 59 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Hal ini berarti bahwa solusi dari SPAL (berupa harga-harga xi ) seharusnya dilakukan dengan cara melakukan perhitungan harga xi , dimulai dari indeks terbesar (= n ) menuju indeks terkecil (= 1) yang disebut sebagai substitusi balik (back substitution), yang dimulai dengan
xn =
b(n) n an( ,n)
(4.14)
dan selanjutnya, perhitungan harga-harga xn −1 … x1 dapat dilakukan dengan formula berikut
1 xk = ( k ) ak , k
(k ) bk −
n
∑a
j = k +1
⋅ x k = n − 1, n − 2, …,1 k, j j ; (k )
(4.15)
4.5. Teknik Pivoting dalam Metode Eliminasi Gauss Dalam beberapa kasus, terutama bila dijumpai matriks-matrik yang bersifat ‘singular’ karena adanya ‘kombinasi linier’, solusi secara langsung menggunakan algoritma metode eliminasi Gauss seringkali tidak memberikan hasil dan ketelitian yang baik, bahkan sangat mungkin dapat memberikan hasil yang meleset jauh dari yang diharapkan. Untuk menghindari fenomena tersebut, diperlukan modifikasi dari algoritma metode eliminasi Gauss. Pada prinsipnya, modifikasi tersebut dilakukan dengan memperhatikan hal-hal berikut: Harga pivot diambil yang terbesar dari setiap baris dan kolom yang sesuai, yaitu komponen ai ,i , Pemilihan pivot dilakukan berdasarkan ‘pembandingan harga terbesar (maksimum)’ dari setiap elemen a j ,i ∀ j ≥ i , Untuk hasil terbaik, sebaiknya gunakan variabel ‘presisi ganda’ (dalam pemrograman FORTRAN: DOUBLE PRECISION atau REAL*8; dan dalam pemrograman Turbo PASCAL: Double atau Extended).
4.6. Contoh Solusi SPAL dengan Metode Eliminasi Gauss Dalam sub-bab ini, pembaca akan diajak untuk mengikuti pencarian solusi SPAL dengan menggunakan metode eliminasi Gauss melalui penyajian langkahlangkah
yang
sistematis
sehingga
mudah
dimengerti.
Sebagai
contoh
perhitungan, SPAL yang akan diberikan adalah Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 60 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
2 x1 + x2 + 3 x3 = 11 4 x1 + 3 x2 + 10 x3 = 28
(4.16)
2 x1 + 4 x2 + 17 x3 = 31 Maka, solusi dari SPAL di atas dapat dilakukan melalui langkah-langkah atau pentahapan seperti dijelaskan di bawah ini. Tahap #1: Triangularisasi. Pada tahap ini dilakukan pembentukan matriks diagonal-atas dengan cara penyisihan (eliminasi) koefisienkoefisien “matriks eselon” dengan mengambil rujukan tetap pada baris pertama (baris yang tidak mengalami perubahan sama-sekali, dalam hal ini persamaan rujukan disebut sebagai “persamaan pivotal”, sedangkan koefisien pertama dari persamaan rujukan tersebut atau ai ,i disebut “pivot”). Untuk dapat memahaminya lebih jauh, di bawah ini diberikan langkah proses penyisihan yang dimaksud. Eliminasi koefisien-koefisien a2,1 dan a3,1 dari persamaan kedua dan ketiga (persamaan pertama disebut sebagai “persamaan pivotal”, sedangkan koefisien pertama dari persamaan pertama atau a1,1 disebut “pivot”; sedangkan m2,1 = 2 dan m3,1 = 1 ). Kemudian, persamaan pertama dikalikan dengan
m2,1 untuk
a2,1 pada persamaan kedua. Demikian pula, persamaan pertama dikalikan dengan m3,1 untuk mengeliminasi a3,1 mengeliminasi
pada persamaan ketiga, sehingga akan diperoleh persamaan linier yang telah mengalami penyisihan (pada baris ke-2 dan ke-3)
2 x1 + x2 + 3 x3 x2 + 4 x3 3 x2 + 14 x3
= 11 = 6
(4.17)
= 20
Eliminasi koefisien a3,2 dari persamaan ketiga (dalam hal ini persamaan
kedua
berubah
menjadi
“persamaan
pivotal”,
sedangkan koefisien a2,2 dari persamaan kedua disebut “pivot”; dan diperoleh m3,2 = 3 ).
Persamaan kedua dikalikan dengan m3,2 = 3 untuk menyisihkan a3,2 pada persamaan ketiga, sehingga diperoleh:
Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 61 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
2 x1 + x2 + 3 x3
= 11
x2 + 4 x3
= 6
2 x3
= 2
(4.18)
Tahap #2: Substitusi Balik (back substitution). Pada tahap ini, dilakukan perhitungan harga-harga xi (elemen dari vektor jawab) dengan cara substitusi balik mulai dari baris terbawah (baris ke-n). Dimulai dari baris ketiga (baris terakhir, baris ke n) yang langsung dapat dihitung bahwa xn = bn an ,n (Persamaan 4.14). Baris yang lainnya, dimulai dari beris ke-(n-1) sampai baris pertama, dihitung menggunakan Persamaan 4.15, yang dapat ditulis kembali sebagai
bi − xi =
n
∑a
j =i +1
ai ,i
i, j
⋅ xj ; i = n − 1, …,1
(4.19)
Perolehan solusi atau “vektor jawab” yang dimaksudkan adalah
[ xˆi ]
x1 3 = x2 = 2 x 1 3
(4.20)
4.7. Contoh Pemrograman FORTRAN untuk Metode Eliminasi Gauss Langkah-langkah dan algoritma penyelesaian SPAL seperti pada Sub-bab 4.6 dapat dibuat programnya (coding), baik dalam Bahasa FORTRAN, Turbo PASCAL, atau pun bahasa-bahasa pemrograman lainnya. Khusus pada sub-bab ini, hanya akan diberikan contoh pemrograman dalam bahasa FORTRAN. Untuk pemrograman dalam Bahasa Turbo PASCAL, sebenarnya pembaca hanya tinggal melakukan traduksi (penerjemahan) secara langsung, baris-perbaris untuk deklarasi dan pernyataan yang sesuai (homolog). Walaupun ada beberapa perbedaan mendasar antara pemrograman FORTRAN dengan Turbo PASCAL, namun perbedaan tersebut sesungguhnya tidak menyulitkan para pembaca untuk melakukan traduksi. Di samping itu juga, sebagai acuan Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 62 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
tambahan bila diperlukan, para pembaca dapat juga melihat bab-bab selanjutnya tentang contoh-contoh pemrogram yang diberikan dalam dua bahasa sekaligus, yaitu FORTRAN dan Turbo PASCAL. Ada 2 (dua) contoh program yang diberikan di bawah ini. Yang pertama adalah contoh pemrograman metode eliminasi Gauss tanpa menggunakan “strategi pivoting” (Gambar 4.1), sedangkan contoh yang kedua merupakan pemrograman eliminasi Gauss yang menggunakan pivoting (Gambar 4.2). 123456789012345678901234567890123456789012345678901234567890123456789012 C PROGRAM Solusi Sistem Persamaan Aljabar Linier (SPAL) atau C atau Persamaan Aljabar Linier Simultan C Deklarasi Jenis dan Variabel: C --------------------------------------------------------------IMPLICIT NONE INTEGER iarg PARAMETER (iarg = 7) INTEGER i,j,k,neq REAL*8 A(iarg,iarg) REAL*8 b(iarg),x(iarg) CALL system('clear') C C
Proses Pemasukan Harga Variabel: -------------------------------WRITE(*,10) 'Jumlah Persamaan : ' READ(*,*) neq DO i = 1,neq DO j = 1,neq WRITE(*,20) 'A(',i,',',j,') : ' READ(*,*) A(i,j) ENDDO WRITE(*,30) 'b(',i,') : ' READ(*,*) b(i) ENDDO
C C
Proses Pemanggilan Subprogram Eliminasi Gauss-Jordan: ----------------------------------------------------CALL EGAUSS(neq,A,x,b)
C C
C C C C C C
Pemaparan/penyajian Hasil Perhitungan: -------------------------------------DO i = 1,neq WRITE(*,40) 'x(',i,') = ',x(i) ENDDO 10 FORMAT (3X,A,$) 20 FORMAT (3X,A,I1,A1,I1,A,$) 30 FORMAT (5X,A,I1,A,$) 40 FORMAT (5X,A,I1,A,G12.7) STOP END SUBROUTINE EGAUSS(n,A,x,b) -----------------------------------------------------------------SUBPROGRAM ELIMINASI GAUSS (tanpa “PIVOTING”): | Merupakan solusi Sistem Persamaan Aljabar Linier (SPAL) dengan | format persamaan matriks: [A].[x] = [b], dengan rincian sbb | n = jumlah persamaan aljabar linier (dimensi SPAL) | A = matriks bujur sangkar n x n yang berisi koefisien persamaan, |
Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 63 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
C C C C C
x = vektor variabel persamaan yang akan dicari harga-harganya | b = vektor ruas kanan yang berisi harga-harga persamaan tunggal | -----------------------------------------------------------------Deklarasi Variabel: ------------------INTEGER n REAL*8 A(7,7),b(n),x(n) INTEGER i,j,k REAL*8 PIVOT,MULT,TOP
C Proses solusi: (a) Substitusi dan Eliminasi C ------------------------------------------DO j = 1,n-1 PIVOT = A(j,j) DO i = j+1,n MULT = A(i,j)/PIVOT DO k = j+1,n A(i,k) = A(i,k) - MULT*A(j,k) ENDDO b(i) = b(i) - MULT*b(j) ENDDO ENDDO C Proses solusi: (b) Substitusi Balik C ----------------------------------x(n) = b(n)/A(n,n) DO i = n-1,1,-1 TOP = b(i) DO k = i+1,n TOP = TOP - A(i,k)*x(k) ENDDO x(i) = TOP/A(i,i) ENDDO RETURN END
Gambar 4.1. Listing pemrograman FORTRAN untuk eliminasi Gauss “tanpa strategi pivoting”.
Listing program (source code) di atas masih menggunakan “Subroutine Eliminasi Gauss” dan belum dilakukan ‘pivoting’ pada setiap penggunaan elemen ai ,i . Untuk melengkapi sumber pemrograman FORTRAN dalam buku kuliah Metode Numerik ini, maka di bawah ini akan diberikan listing dari subroutine metode eliminasi Gauss (PGAUSS) yang telah menggunakan ‘teknik pivoting’, yaitu dengan cara mencari bilangan terbesar untuk setiap evaluasi baris yang dilakukan sedemikian rupa sehingga dapat meminimisasi kesalahankesalahan perhitungan (rounding error dan truncation error) akibat operasi komputer yang digunakan.
Bab 4. Sistem Persamaan Aljabar Linier (SPAL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 64 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Bab
5
Persamaan Aljabar Non Linier (PANL)
Persamaan aljabar non-linier (PANL), kadangkala disebut juga sebagai persamaan aljabar non-linier tunggal (PANLT), merupakan suatu fungsi atau persamaan aljabar skalar yang terbentuk berdasarkan proyeksi fungsional dari variabel bebasnya (yang digambarkan pada sumbu datar atau absis) pada variabel terikatnya (sebagai sumbu tegak atau ordinat)
y( x) ≡
f ( x)
(5.1)
Dalam penulisan yang bersifat eksplisit, suatu variabel x dapat dengan mudah dikeluarkan dari y ( x ) , sedemikian rupa sehingga Persamaan (5.1) dapat ditulis dalam bentuk implisit rekursif. Persamaan yang terbentuk seperti pada Persaman (5.2) di bawah, dapat digunakan untuk mencarai akar (atau akar-akar) PANL pada bidang bebas atau dengan menggunakan metode titik tetap (fixedpoint method)
x
≡
g( x)
(5.2)
Di sisi lain, jika Persamaan (5.1) dituliskan dalam bentuk persamaan residual, maka problem utama yang sering dijumpai dalam pencarian akar suatu PANLT adalah mencari dan menelusuri titik
α sebagai titik perpotongan
persamaan (kurva) itu dengan sumbu x (sehingga akarnya disebut juga sebagai
α ), dan pada saat bersamaan fungsi f ( x ) tersebut juga mencapai nilai
nol-nya. Secara umum, persamaan aljabar non linier dengan variabel bebas x tersebut dapat direpresentasikan melalui persamaan vektorial skalar berikut
y( x) ≡
f ( x) = 0
(5.3)
Representasi residual seperti Persamaan (5.3) merupakan penulisan untuk persamaan aljabar non-linier tunggal (PANLT), yaitu suatu fungsi skalar (juga dengan nilai besaran dan variabel sebagai skalar), dalam domain bilangan nyata (riil atau real). Sedangkan penulisan untuk sistem persamaan aljabar non-linier (SPANL), sebagai suatu persamaan vektorial dengan besaran variabelvariabelnya sebagai skalar dalam domain bilangan riil, dapat direpresentasikan Bab 5. Persamaan Aljabar Non Linier (PANL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 84 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
sebagai berikut
f1 ( x1 , …, xn ) 0 f ( x , …, x ) 0 2 1 n = ⋮ ⋮ 0 f n ( x1 , …, xn )
(5.4)
Persamaan 5.4 di atas, yang seringkali disebut juga sebagai persamaan vaktorial residual, bila dituliskan dalam bentuk simbolik vektorial umum menjadi sebagai berikut
fˆ ( xˆ ) = 0
(5.5)
Dalam bab ini, titik berat pembahasan akan lebih banyak pada solusi-solusi numerik dari persamaan aljabar non-linier tunggal dalam bentuk residual, seperti pada Persamaan (5.3), yaitu menggunakan metode-metode solusi yang paling umum dan banyak digunakan dalam ilmu sains dan keteknikan. Berbagai teknik solusi numerik telah banyak dikembangkan untuk solusi atau pencarian akar (atau akar-akar) dari suatu PANLT dengan bentuk umum seperti pada Persamaan (5.2) dan (5.3) di atas. Beberapa di antaranya akan disajikan secara khusus dalam bab ini, yaitu: (a). Metode titik tetap (fixed-point method), (b). Metode bidang paruh (bisection method), (c). Metode regula-falsi (false position method), (d). Metode Newton-Raphson (tangent method), dan (e). Metode secant (secant method).
5.1. Solusi dengan Metode Titik Tetap Metode titik tetap (fixed-point method) adalah suatu metode pendekatan numeris yang terbentuk dari restrukturisasi PANLT sedemikian rupa sehingga dihasilkan dua buah fungsi; di sisi yang satu hanya mengandung variabel bebasnya saja ( x ), sedangkan di sisi lainnya berbentuk g ( x ) , suatu fungsi dalam bentuk lain seperti dituliskan dalam Persamaan (5.2) di atas. Metode titik-tetap ini memerlukan 1 (satu) buah harga x (disebut sebagai
xawal ) sebagai “nilai tebakan” (guess value) untuk memulai suatu proses iterasi. Bab 5. Persamaan Aljabar Non Linier (PANL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 85 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Selanjutnya, suatu prosedur untuk penghitungan fungsi g ( x ) harus dibuat untuk melakukan komputasi secara suksesif (iteratif), bersamaan dengan nilai awal x0 . Kemudian, sekuens nilai-nilai xk akan diperoleh melalui formula atau prosedur iteratif berikut
xk +1
≡
g ( xk )
(5.6)
Jika disajikan secara menyeluruh, maka sekuens dalam algoritma prosedur komputasi numerik dengan metode titik-tetap ini dapat dituliskan sebagai berikut:
x0 x1 = g ( x0 ) x2 = g ( x1 ) ⋮ xk = g ( xk −1 ) xk +1 = g ( xk ) ⋮ xn = g ( xn−1 )
(tentukan harga x0 sebagai harga awal) (hitung x1 sebagai harga yang baru) (hitung x2 sebagai harga yang baru)
(hitung xk karena suksesi harga xk −1 )
(perhitungan sampai n iterasi maksimum)
Gambar 5.1. Representasi sekuens komputasi dari metode titik-tetap dari y = g ( x ) . Dari algoritma di atas, dapatkah pembaca sekalian bayangkan: sampai di titik manakah proses komputasi iteratif di atas akan diakhiri? Dari pertanyaan di atas, dapatlah disimpulkan bahwa suatu komputasi iteritif seharusnya dilakukan dengan memperhatikan 2 (dua) hal berikut: (a). Sejauh mana proses di atas dapat dilangsungkan? Dalam hal ini n adalah jumlah iterasi maksimum (= itmax ) yang diijinkan dalam proses perhitungan di atas, sedemikian rupa bahwa proses harus dihentikan apa pun yang terjadi setelah tercapai harga iter ≥ itmax , kemudian (b). Bilamana harus dihentikan? Dalam hal ini dengan memperhatikan kriteria penghentiannya, yaitu bila telah tercapai suatu nilai limit antara harga x yang baru diperoleh (= xk ) dengan yang sebelumnya (= xk −1 ), atau dinyatakan dalam nilai absolut,
xn − xn−1
≤ ε.
Dari sekuens komputasi di atas, dapat pula disimpulkan bahwa suatu titiktetap dari fungsi g ( x ) adalah suatu nilai sebesar xk sedemikian rupa sehingga dipenuhi xk = g ( xk ) . Hal ini berarti pula bahwa suatu titik tetap xk bukanlah Bab 5. Persamaan Aljabar Non Linier (PANL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 86 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
akar dari persamaan g ( x ) = 0 , melainkan solusi dari sistem x = g ( x ) .
Algoritma TIKTAP( f , xk , xk +1 ,
ε , iter , itmax , flag )
1. Tebak harga awal x0 , tentukan
ε , dan itmax
2. Set k = 0 ; flag = 0 3. Set k = k + 1 dan tentukan/hitung xk +1 = g ( xk ) ;
4. Jika abs ( xk +1 − xk ) ≤ ε ) maka set flag = 1 ; jika iter > itmax maka set flag = 2 5. Jika flag = 0 maka ulangi ke nomor 3 6. Jika flag = 2 maka proses melampaui itmax dan segera keluar ke nomor 8; jika flag = 1 maka proses konvergen 7. Jika flag = 1 maka akar sistem titik-tetap (tiktap) adalah xk +1 8. Selesai. Gambar 5.2. Algoritma komputasi dari metode titik-tetap untuk persamaan y = g ( x ) . Secara geometris, titik-tetap dari suatu fungsi g ( x ) adalah titik (atau titiktitik) perpotongan antara kurva
y = g ( x ) dengan garis y = x , seperti
direpresentasikan pada Gambar 5.1 di bawah.
y
y=x
2
( p, g ( p ) )
p = g ( p)
1
y = g( x)
x 1
p
2
Gambar 5.3. Geometri representasi titik-tetap dari y = g ( x ) . Bab 5. Persamaan Aljabar Non Linier (PANL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 87 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Untuk memberikan gambaran yang lebih jelas dan ringkas tentang cara pemrograman yang efektif dari metode atau bahasa pemrograman yang dipilih, maka di bawah ini diberikan suatu hasil pemrograman dalam FORTRAN 77.
Gambar 5.4. Listing pemrograman FORTRAN untuk metode titik-tetap pada y = g ( x ) .
TUGAS 5.1: Dari contoh listing program FORTRAN seperti pada Gambar 5.4 di atas, cobalah traduksi (translate) program tersebut ke dalam bahasa Turbo PASCAL! Bandingkan juga hasil-hasil yang diperoleh dari kedua bahasa pemrograman tersebut!
Bab 5. Persamaan Aljabar Non Linier (PANL)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 88 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Bab
6
Metode Diferensiasi Numerik
Salah satu perhitungan kalkulus yang banyak digunakan dalam dunia ilmu teknik kimia adalah diferensiasi persamaan matematis, khususnya digunakan untuk keperluan perhitungan geometrik dan masalah-masalah yang berhubungan dengan nilai optimal dan optimisasi. Selain itu, teknik diferensiasi dalam dunia fisika dan mekanika juga banyak digunakan di bidang teknik kimia, terutama perhitungan-perhitungan yang berhubungan dengan perubahan nilai per satuan waktu atau jarak (seperti persamaan laju, persamaan difusi, dan fenomena perpindahan atau transport phenomena). Secara definisi dalam ilmu kalkulus, operasi diferensiasi didefinisikan sebagai perbandingan perubahan tinggi (selisih tinggi) dan perubahan jarak, dan dituliskan dengan
dy ∆y = lim ∆x →0 ∆x dx
(6.1)
6.1. Diferensiasi Analitis dan Diferensasi Numerik Secara umum, hampir semua fungsi atau model matematis kontinyu dapat dihitung nilai diferensialnya dengan mudah, sehingga banyak yang berpendapat bahwa metode numerik tidak perlu digunakan untuk keperluan perhitungan diferensial ini. Namun, masalahnya seiring dengan perkembangan pemakaian komputer sebagai alat hitung dan pada banyak permasalahan, diferensial menjadi salah satu bagian penting dan menentukan dari suatu penyelesaian (model). Sebagai contoh, metode Newton-Raphson memerlukan perhitungan diferensial sebagai pembagi dalam progres perbaikan nilai galatnya (calculation error), sedemikian rupa sehingga metode Newton-Raphson ini beresiko untuk dapat dilakukan atau ditemukan solusinya jika dan hanya jika, nilai diferensialnya dapat pula dihitung. Contoh lainnya adalah penentuan titik puncak kurva y = f(x) yang dinamakan Bab 6. Metode Diferensiasi Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 123 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
titik maksimal dan titik minimal dari suatu fungsi, juga memerlukan titik diferensial sebagai syarat apakah titik tersebut sebagai titik puncak. Dalam hal ini, didefinisikan bahwa suatu titik dinamakan titik puncak bila nilai differensial dy dx pada titik tersebut adalah 0 (nol). Pada beberapa permasalahan, nilai diferensial dari suatu fungsi dapat dihitung secara manual. Misalkan diketahui suatu fungsi f ( x ) = x e − x + cos( x ) , maka diferensial atau hasil turunannya adalah df ( x ) dx = (1 − x ) e − x − sin( x ) . Namun, di sisi lain, ternyata nilai suatu fungsi tidak selalu mungkin dapat diselesaikan secara analitis (manual), terutama jika fungsi primitifnya hanya diketahui berupa nilai atau grafis. Sebagai contoh adalah perhitungan puncak distribusi data yang berupa distribusi poisson berikut
e −m ⋅ m x f (x) = x!
(6.2)
Menghitung nilai diferensiasi dari persamaan di atas tidaklah mudah, mengingat persamaan tersebut berbentuk deret yang nilainya berakhir sampai pada tak berhingga (infinite series). Oleh karena itul, metode numerik, dalam hal ini, sangat diperlukan dalam penentuan harganya sebagai nilai hampiran (harga pendekatan atau aproksimatif). Dalam pendekatan tersebut, hubungan antara nilai fungsi dan perubahan fungsi untuk setiap titiknya didefinisikan sebagai
y ( x ) = f ( x ) + f ′( x ) ⋅ h( x )
(6.3)
Dan, nilai diferensiasi (turunan) f ′( x ) didefinisikan sebagai
f ′( x ) = lim
h →0
f ( x + h) − f ( x ) h
(6.4)
Dari formulasi analitis tentang nilai diferensiasi di atas, dapat diformulasikan beberapa metode diferensiasi numerik yang akan dibahas pada bab ini, sebagai berikut: Metode diferensiasi selisih maju (forward difference) Metode diferensiasi selisih tengah (central difference), dan Metode diferensiasi selisih balik (backward difference).
Bab 6. Metode Diferensiasi Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 124 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
6.2. Metode diferensiasi selisih maju Metode diferensiasi selisih maju atau forward difference merupakan metode yang mengadopsi secara langsung definisi diferensial, dan dapat dituliskan sebagai
f ′( x ) =
f ( x + h) − f ( x ) h
(6.5)
Arti dari persamaan diferensiasi selisih maju seperti di atas adalah, bahwa nilai turunan dapat diperoleh dari dua harga fungsi pada titik x dan dengan kemajuan sebesar h (sebenarnya, identik dengan ∆x ), yang nilainya harus diambil sangat kecil atau mendekati nol. Pengambilan nilai h yang sangat kecil akan berpengaruh pada galat (sesatan) fungsi di atas, yaitu dapat dinyatakan sebagai
h2 ξ (f ) = − f ′′′(η ) 6
(6.6)
Untuk memberikan ilustrasi yang lebih jelas, pada Tabel 6.1. di bawah ini ditampilkan tentang nilai-nilai diferensiasi dari fungsi f ( x ) = e − x ⋅ sin( x ) + 1 , untuk rentang harga x = [0, ½] dengan harga h (langkah perubahan atau step) sebesar 0,05. Tabel 6.1. Diferensiasi f ′( x ) dengan forward difference dan analitik (eksak).
x
f (x)
f ′( x )
Nilai eksak
Sesatan
0,00
1,000000
0,950833
1,000000
0,049167
0,05
1,047542
0,855827
0,902499
0,046672
0,10
1,090333
0,765792
0,809984
0,044192
0,15
1,128623
0,680682
0,722421
0,041739
0,20
1,162657
0,600434
0,639754
0,039320
0,25
1,192678
0,524967
0,561911
0,036944
0,30
1,218927
0,454185
0,488804
0,034619
0,35
1,241636
0,387978
0,420329
0,032350
0,40
1,261035
0,326227
0,356371
0,030144
0,45
1,277346
0,268800
0,296804
0,028004
0,50
1,290786
0,215560
0,241494
0,025934
0,55
1,301564
–
–
–
Sesatan rerata Bab 6. Metode Diferensiasi Numerik
0,037190 Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 125 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Untuk memudahkan pembaca dalam membuat program sederhana tentang metode diferensiasi selisih maju, khususnya dalam Turbo Pascal, di bawah ini disajikan teks dari program (listing out) terkait, pada Gambar 6.1 dan hasil eksekusinya pada gambar 6.2 di bawah ini.
Gambar 6.1. Program f’(x)-fd.pas untuk menghitung diferensiasi maju.
Gambar 6.2. Hasil eksekusi (running) dari program f’(x)-fd.pas.
Bab 6. Metode Diferensiasi Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 126 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Bab
7
Metode Integrasi Numerik
Hampir sama halnya dengan perhitungan diferensiasi dalam kalkulus, yang telah dibicarakan pada bab sebelumnya, metode integrasi numerik dari suatu persamaan matematis banyak juga digunakan untuk keperluan perhitungan geometrik atau suatu luasan di bawah kurva. Secara definisi dalam kalkulus, operasi integrasi didefinisikan sebagai nilai total atau luasan yang dibatasi oleh fungsi f ( x ) dan sumbu x , serta antara batas
x a dan x b , dengan notasi atau penulisan untuk sembarang kurva yang dapat didefinisikan secara matematis sebagai berikut: b
I
f ( x ) dx
(7.1)
a
dan secara grafis dapat dilihat pada Gambar 7.1.
Gambar 7.1. Domain integrasi yang didefinisikan.
Bab 7. Metode Integrasi Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 138
Jika definisi dalam kalkulus seperti di atas dikembangkan lagi berdasarkan metode kalkulus Riemann, maka operasi integrasi seperti pada Persamaan (7.1) dapat dituliskan atau dikembangkan lagi manjadi b
I
f ( x ) dx lim
x0
a
n
i 0
f(xi ) Δx
n
= h f(xi )
(7.2)
i=0
Dan, interpretasi dalam bentuk kurva atau grafis dari formula Riemann seperti Persamaan (7.2) di atas, dapat digambarkan sebagai berikut
Gambar 7.2. Domain interpretasi dari formula metode Riemann.
7.1. Integrasi Analitik dan Integrasi Numerik Metode Integrasi analitik (eksak) dari suatu fungsi telah dipelajari secara mendalam pada kalkulus. Pada pembahasan di sini diharapkan para pembaca sudah memahaminya dengan baik. Untuk selanjutnya, materi yang akan dibahas di sini hanya dibatasi pada metode-metode integrasi numerik dasar, yang pada hakekatnya merupakan metode pendekatan dari integrasi analitik.
Bab 7. Metode Integrasi Numerik
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 139
Secara khusus, metode integrasi numerik ini umumnya digunakan untuk menghitung nilai atau harga integral dari suatu fungsi, yang pada dasarnya tidak dapat (sulit) diselesaikan secara analitik, atau fungsi yang akan diintegralkan tidak diberikan dalam bentuk analitik (bentuk kontinyu), tetapi dalam bentuk tabel atau bentuk diskret (tidak lengkap). Di samping itu, metode integrasi numerik pada dasarnya merupakan integral tertentu (definit integral) yang berdasarkan pada teknik hitungan perkiraan. Seperti pada metode perhitungan integral secara analitik, hitungan integral secara numerik dapat dilakukan dengan membagi luasan dalam sejumlah panel (disebut juga bilah atau pias) dengan ukuran sangat kecil. Dalam hal ini, jumlah luasan dari semua panel selanjutnya disebut sebagai luasan total. Dalam perhitungan integrasi numerik, metode yang akan dibahas pada bab ini adalah keluarga metode Newton-Côtes dan metode Gauss. Dalam keluarga metode Newton Côtes, ada tiga varian atau metode yang banyak digunakan, yaitu metode trapesium, metode Simpson 1/3, dan metode Simpson 3/8. Metodemetode Newton-Côtes dapat digunakan dan diadaptasikan secara lebih fleksibel, karena dapat digunakan untuk menghitung integral suatu fungsi, baik yang diketahui persamaan fungsinya maupun suatu fungsi dalam bentuk tabel. Di sisi lain, metode Gauss hanya dapat digunakan untuk menghitung integral suatu fungsi yang diketahui persamaannya (bukan dalam bentuk tabel). 7.2. Dasar Aturan Trapesium Aturan atau metode trapesium merupakan bagian dari metode Newton Côtes order pertama. Metode trapesium ini menggantikan lengkungan kurva dari fungsi f dengan garis lurus. Pada gambar 7.2 di bawah ini, luasan bidang yang dibatasi kurva f ( x ) , sumbu x antara x a sampai dengan x b , didekati oleh luasan bidang trapesium di bawah garis lurus yang menghubungkan titik ( a, f (a ) ) ke titik ( b, f ( b ) ). Menurut rumus geometri, luas trapesium adalah lebar kali tinggi rata-rata, sehingga dapat digunakan formula berikut b
I
a
Bab 7. Metode Integrasi Numerik
f(x)dx b - a
f(a) + f(b) 2
(7.3)
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 140
Bab
8
Solusi Numerik dari Persamaan Diferensial
Dalam dunia sains dan rekayasa atau keteknikan, dan khususnya dalam bidang
teknik
kimia,
persamaan
diferensial
umumnya
digunakan
untuk
pemodelan matematika tentang fenomena-fenomena fisika dan kimiawi yang terjadi dalam proses dan operasi teknik kimia. Di sisi lain, karena seringkali pula tidak tersedia solusi analitik (eksak), maka dalam hal ini diperlukan suatu solusi pendekatan secara numerik. Secara matematis, karena persamaan diferensial merupakan suatu relasi atau persamaan yang memetakan hubungan suatu besaran dengan perubahannya, maka ia dapat dinyatakan sebagai persamaan yang mengandung suatu besaran dan diferensialnya, dan dapat dituliskan sebagai berikut
dx d 2 x d nx F x, , 2 ,…, n , t = 0 dt dt dt
(8.1)
8.1. Jenis Persamaan Diferensial Persamaan diferensial mempunyai banyak ragam dan jenis, mulai dari yang mudah diselesaikan hingga yang sulit diselesaikan, mulai dari yang sederhana sampai yang sangat kompleks. Pada dasarnya, bentuk matematis klasik dari persamaan diferensial ini dapat dibagi atas: a. Persamaan Diferensial Biasa (Ordinary Differential Equations, ODE), disingkat sebagai PDB, yaitu suatu turunan fungsi yang hanya bergantung pada satu variabel bebas saja.
d2y dy Contoh: + = 0 dx dx 2 b. Persamaan Diferensial Parsial (Partial Differential Equations, PDP), disingkat sebagai PDP, yaitu suatu turunan fungsi yang bergantung pada lebih dari satu variabel bebas. Contoh:
∂u ∂u + = 0 ∂x ∂y
Bab 8. Solusi Numerik dari Persamaan Diferensial
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 176 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Untuk memberi dasar kepada para pembaca sekalian, khususnya para mahasiswa dari kalangan sains dan teknologi, maka materi pembahasan pada Bab 8 ini hanya akan difokuskan pada solusi-solusi numerik untuk PDB (Persamaan Diferensial Biasa). 8.2. Sifat-sifat Persamaan Diferensial Biasa 8.2.1. Orde Orde dari suatu persamaan diferensial (PD) adalah orde tertinggi dari turunan yang terdapat dalam persamaan tersebut. Sebagai contoh, dapat diperhatikan persamaan-persamaan diferensial di bawah ini
d 2 y dy + = 0 , adalah PD dengan orde 2 dx2 dx d3y dy y 3 + = 0 , adalah PD dengan orde 3 dx dx 8.2.2. Linieritas Suatu persamaan diferensial (PD) dikatakan linier jika dan hanya jika variabel terikatnya serta turunannya berpangkat satu, dengan koefisien konstanta atau koefisien yang bergantung pada variabel bebasnya. Jika tidak demikian, maka PD tersebut dikatakan non-linier. Sebagai ilustrasi, dapat diperhatikan persamaan-persamaan diferensial di bawah ini
dy + y = 0, disebut sebagai PD linier, dx dy y + x = 0, disebut sebagai PD non-linier, dx
d2y dy 2 2 + = 0, disebut sebagai PD linier, dx dx dy + y 2 = 0, disebut sebagai PD non-linier. dx 8.2.3. Homogenitas Suatu PDB dikatakan homogen jika pada ruas kiri persamaan tersebut hanya mengandung variabel terikat beserta turunannya, sedangkan pada ruas kanan yang tersisa hanya 0 (nol). Sebaliknya, jika pada ruas kanan terdapat suatu variabel bebas dan/atau konstanta, maka PDB tersebut dikatakan nonBab 8. Solusi Numerik dari Persamaan Diferensial
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 177 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
homogen. Sebagai contoh, coba perhatikan beberapa PDB di bawah ini
dy + y = 0, disebut sebagai PD homogen, dx dy y − 2 x = 1, disebut sebagai PD non-homogen, dx dy + y 2 = y + 3, disebut sebagai PD non-homogen. dx 8.3. Masalah Nilai Awal dan Nilai Batas dari PDB Masalah (problem) nilai awal dan masalah nilai batas merupakan problem yang dijumpai dalam model matematis yang direpresentasikan sebagai PDB. Suatu PDB disebut memiliki PNA (problem atau masalah nilai awal) jika masalah yang melibatkan waktu (atau posisi) direpresentasikan dengan PDB bersamasama dengan nilai-nilai awal dari variabel terikatnya. Sebagai contoh, dapat dilihat di bawah ini
dy = h, y(0) = y0 dt
(8.2)
Oleh karena itu, PDB dia atas disebut juga sebagai orde 1 linier non-homogen, dan dengan PNA. Di sisi lain, suatu PDB yang disebut memiliki PNB (problem nilai batas) adalah masalah yang direprentasikan oleh PDB dengan melibatkan daerah (dalam satu dimensi), namun yang terjadi pada bagian akhir dari daerah tersebut ditunjukkan dengan syarat-syarat batas tertentu. Sebagai contoh, adalah PDB di bawah ini
d2y = w , y (0) = 1, dan y (b) = dx 2
0
(8.3)
PDB di atas disebut juga sebagai: orde 2 linier non-homogen, dan dengan PNB. Bab 8. Solusi Numerik dari Persamaan Diferensial
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 178 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
Sebagai ilustrasi lain, tentang suatu PDB dengan masalah nilai awal dan/atau nilai batas, adalah sebagai berikut: a. Jika problemnya berupa PNA (problem atau masalah nilai awal), dan PDB-nya berbentuk
y ' = f (t , y ) , pada selang interval [a, b] , maka nilai awalnya ada 1 (satu), dan dapat dinyatakan sebagai
y (a ) = α atau y (a ) = y0 , pada selang interval [a,b] . b. Selanjutnya, jika problemnya berupa PNB (problem nilai batas), dan PDB-nya berbentuk
y " = f (t , y, y ') pada selang interval [a, b] , maka nilai awal dan batasnya dapat dinyatakan sebagai
y (a ) = α dan y′(b) = β . Penyelesaian problem di atas bukan berupa suatu fungsi yang memenuhi PNA, melainkan berupa himpunan titik-titik pada tempat kedudukan tertentu
{( tk , yk )} yang digunakan sebagai hampiran (yakni
y (tk ) ≈ yk ). Dan, cara kerja
membangun titik-titik tersebut secara singkat adalah sebagai berikut: Pertama, menentukan posisi
{ tk }
pada absis, dengan cara membagi
selang interval [ a, b] dalam M bagian yang sama panjang, yaitu
h=
b−a M
Kemudian, tempat kedudukan
{ tk } pada absis dihitung berdasarkan
tk = a + k h , untuk harga k = 0,1 , … , M . dengan
tk disebut titik-kisi (grid point), dan h disebut ukuran langkah (step size). 8.4. Metode Solusi Numerik untuk Persamaan Diferensial 8.4.1. Solusi analitik Dalam mencari solusi PDB secara analitis (solusi eksak) dikenal 3 (tiga) Bab 8. Solusi Numerik dari Persamaan Diferensial
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 179 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
macam sebutan solusi, yaitu Solusi umum, yaitu solusi analitis yang masih mengandung konstanta esensial, umumnya dilambangkan sebagai C . Contoh:
dy 1 − 5 y = 1 , memiliki solusi umum y = − + C e5 x dx 5
Solusi khusus, yaitu solusi yang sudah tidak mengandung konstanta esensial, karena adanya syarat awal dan atau syarat batas yang diterapkan pada solusi umum. Contoh:
dy − 5 y = 1 , dengan nilai awal y (0) = 1 , memiliki solusi dx 1 6 5x khusus y = − + e 5 5
Solusi singular, yaitu solusi yang tidak diperoleh dari subsitusi nilai pada konstanta yang terdapat dalam solusi umum. Contoh: (
1 dy 2 dy ) + x = y , memiliki solusi singular y = − x 2 4 dx dx
Dalam aplikasi pada ilmu keteknikan, termasuk dalam bidang teknik kimia, jenis PD (persamaan diferensial) yang banyak digunakan dalam penerapannya adalah persamaan diferensial linier, yang dituliskan sebagai berikut (dengan koefisien k adalah sebagai tetapan)
d nx d n−1x dx kn n + kn−1 n−1 + … + k1 + k 0 x = f (t ) dt dt dt
(8.4)
Dalam matematika sains dan rekayasa/keteknikan, persamaan diferensial linier seperti di atas pada umumnya dapat diselesaikan dengan menggunakan cara analitik seperti pemakaian metode transformasi Laplace. Namun, jika diperoleh suatu model atau bentuk yang kompleks, maka persamaan diferensial linier tersebut akan menjadi sulit diselesaikan. 8.4.2. Solusi numerik Ketika metode analitik sulit digunakan untuk solusi seperti dibicarakan di atas, maka solusi metode numerik dapat digunakan untuk menyelesaikan persamaan diferensial dengan menggunakan bantuan komputer sebagai alat hitung. Pada beberapa bentuk persamaan diferensial, khususnya pada PDB nonBab 8. Solusi Numerik dari Persamaan Diferensial
Metode Numerik: Komputasi dengan FORTRAN 77 dan Turbo PASCAL # 180 Property of Dr. Setijo Bismo (DTK-FTUI, September 2009)
DAFTAR PUSTAKA
_______ (2008), “Free Pascal Compiler”, http://www.freepascal.org, diakses 22 Oktober 2008. A. Feldstein, R.H. Goodman (1989), Some aspects of floating-point computation, Numerical Analysis and Parallel Processing, Lecture Notes in Math., vol. 1397, Springer, Berlin, pp. 169-181. Atkinson, K.E. (1978), An Introduction to Numerical Analysis, New York: John Wiley and Sons, Toronto. Atkinson, L.V. and P.J. Harley (1983), An Introduction to Numerical Methods with Pascal, London: International Computer Science Series; AddisonWesley Publishing Company. Atkinson, L.V., Harley, P.J. (1983), “An Introduction to Numerical Methods with Pascal”, Addison-Wesley Publishing Co., Tokyo. Atkinsons, L.V. (1982), A Student Guide to Programming in Pascal, London: John Wiley and Sons. Barlow, J. L. and E. H. Bareiss (1985), “On roundoff error distributions in floating point and logarithmic arithmetic”, Computing, v.34 n.4, p.325-347. Beers, Kenneth J. (2008), “Numerical Methods for Chemical Engineering Applications in MATLAB“, Cambridge University Press. Bismo, S. (1999), “Kumpulan Bahan Kuliah Metode Numerik”, Jurusan TGPFTUI. Burghe, D. N. and M. S. Borrie (1983), Modelling with Differential Equation, New York: Springer Verlag. Carnahan, B. dan J.O. Wilkes (1973), Digital Computing and Numerical Methods, ISBN 0-471-13500-3, Tokyo: John Wiley & Sons. Chapra, Steven C. and Raymond P. Canale (2001), Numerical Methods for Engineers, 4th ed., New York: McGraw-Hill Company. Chivers, I.D., J. Sleightholme (1990), “Interactive Fortran 77: A Hands on Approach”, 2nd ed., Imperial College Fortran Course, London. Duntemann, J. (2008), “FreePascal From Square One“, Copperwood Press Colorado Springs, Colorado USA.
Feldstein, A. and R.H. Goodman (1989), Some aspects of floating-point computation, in: Numerical Analysis and Parallel Processing, Lecture Notes in Math., vol. 1397, Berlin: Springer, pp. 169-181. Finlayson, Bruce A. (2002), “Numerical Methods for Chemical Engineers“, Washington University. Flanders, H. (1995), “Scientific Pascal”, Scientific Course at Department of Mathematics at the University of Michigan, Birkhauser Publishing, Boston. Hahn, B.D. (1994), Fortran 90 For Scientists and Engineers, Arnold. Hanna, O.T., Sandall, O.C. (1995), “Computational Methods in Chemical Engineering”, Prentice-Hall International Inc., Englewood Cliffs, New Jersey, pp. 121-149. Harper, D., dan L.M. Stockman (2007), “FORTRAN 77 Reference”, Obliquity, http://www.obliquity.com/computer/fortran/, diakses pada 16 Mei 2007. Hildebrand, F. B. (1974). Introduction to Numerical Analysis, 2nd edition, London: McGraw-Hill. IEEE (1985), “Standard for Binary Floating-Point Arithmetic”, ANSI/IEEE Std, vol. 754, IEEE, New York. Barlow, J. L., E. H. Bareiss (1985), On roundoff error distributions in floating point and logarithmic arithmetic, Computing, v.34 n.4, p.325-347. Keil, Frerich J. (2001), “Application of numerical methods in chemical process engineering (2001)”, Pennsylvania State University. Lawrence, N. (2002), Compaq Visual Fortran, Woburn Massachussets: Digital Press – Butterworth-Heinemann. Leader, Jeffery J. (2004). Numerical Analysis and Scientific Computation, London: Addison-Wesley Publishing Company. Mattheij, R.M.M and J. Molenaar (1996), Ordinary Differential Equations in Theory and Practice, New Delhi: John Wiley and Sons. Press, W.H.; Flannery, B.P.; Teukolsky, S.A.; and Vetterling, W.T. (1992), Numerical Recipes in FORTRAN: The Art of Scientific Computing, 2nd ed., Cambridge, England: Cambridge University Press. Raltson, A. and P. Rabinowitz (1978), A First Course in Numerical Analysis, New York: McGraw-Hill. Rice, J.R. (1983), Numerical Methods, Software, and Analysis, ISBN 0-07052208-1, Tokyo: McGraw-Hill International.
Richardson, Lewis F. and J. Arthur Gaunt (1927), “The Deferred Approach to the Limit I – II”, London: Trans. Roy. Soc., 226A:299-361. Riggs, J. B. (1998), An Introduction to Numerical Methods for Chemical Engineers, Lubbock, Texas: Texas Tech University Press. Robinson, C. (2004), Introduction to Dynamical Systems: Discrete and Continuous, New York: Prentice Hall. Romberg, Werner (1955), Vereinfachte Numerische Integration, Trondheim: Norske Vid, Selsk. Forh., 28:30-36. Shanks, J. A. (1972), “Romberg Tables for Singular Integrands”, Comput. J., 15:360-361. Smith, I.M. (1995), Programming in Fortran 90. A First Course For Engineers and Scientists, Wiley. Süli, E. and D.F. Mayers (2003), An Introduction to Numerical Analysis, Oxford: Oxford University Press. Van Canneyt, Michaël (2008), “Reference guide for Free Pascal”, Ver. 2.2, www.freepascal.org/docs-html/ref/ref.html, diakses pada 17 September 2008.