modul python 2

Upload: ovide-decroly-wisnu-ardhi

Post on 12-Jul-2015

1.278 views

Category:

Documents


75 download

TRANSCRIPT

Komputasi untuk Sains dan TeknikSupriyanto Suparno( Website:http://supriyanto.sika.ui.edu )( Email:[email protected] atau [email protected] )Edisi IIIRevisi terakhir tgl: 9 Desember 2008Departemen Fisika-FMIPA, Univeristas IndonesiaDipublikasikan pertama kali pada September 2007UntukNina MarliyaniMuih SyamildanHasan AzmiKetekunan adalah jalan yang terpercaya untuk mengantarkan kita menuju kesuksesan(Supriyanto, 2007)Trust and friendship are more valuable than your skills(Supriyanto, 2008)Kata PengantarAlhamdulillah, bukuinimemasukiedisike-3. Penomoranedisiinisebenarnyahanyauntukmenandakan perubahan isi buku yang semakin kaya metode numerik dibandingkan denganedisi-edisi sebelumnya. Pengayaan isi buku ini, sejujurnya, berasal dari sejumlah pertanyaanyangsampaikemailboxsaya, entahitudalambentukkonsultasiTugasAkhirmahasiswaS1sebagaimana yang penulis terima dari mahasiswa UNPAD, UDAYANA, UNESA dan UNSRIserta UI sendiri, ataupun sekedar pertanyaan seputar pekerjaan rumah seperti yang biasa di-tanyakan oleh para mahasiswa dari Univ. Pakuan, Bogor.Pertanyaan-pertanyaan itu menjadikan saya sadar bahwa buku edisi ke-II yang berjumlah187 halaman, ternyata belum bisa memenuhi kebutuhan banyak mahasiswa yang memerlukanteknik pengolahan data secara numerik. Karenanya, insya Allah, pada edisi ke-III ini, saya akanmenyajikan sebagian besar yang masih kurang lengkap itu secara bertahap.Ibaratpohonyangakanterustumbuhsemakinbesar, bukuinipunmemilikitabiatper-tumbuhan sebagaimana pohon itu. Mulai ditulis pada tahun 2005 dengan isi yang seadanya,pokoknya asal tercatat. Kemudian di tahun 2006-akhir, ia menjadi catatan perkuliahan Kom-putasi Fisikauntukpertamakalinyadi DepartemenFisika, FMIPA-UI. Pengayaanisi terusberlangsung hingga akhir 2007. Lalu di awal tahun 2008 diisi dengan tambahan materi perku-liahan Analisis Numerik.Itulah yang saya maksud dengan tabiat pertumbuhan dari buku ini.JikasayaditugaskanuntukmengajarmatakuliahKomputasiFisikalagipadaawalSeptem-ber 2008, saya bertekad akan menurunkan seluruh isi buku ini kepada mahasiswa yang akanmengambil kuliah tersebut. Jadi materi Komputasi Fisika tahun 2007 dan materi Analisis Nu-merik 2008,digabung jadi satu kedalam satu semester dengan nama mata kuliah KomputasiFisika. Kepadarekan-rekanmahasiswayangakanngambil matakuliahtersebut, sayasam-paikanpermohonanmaafjikarencanainiakanmembuatandakurangtidurkarenabakalse-makin lama berada di depan komputer, menyelesaikan tugas dan report.Secara garis besar, ilmu sika dapat dipelajari lewat 3 jalan, yaitu pertama, dengan meng-gunakan konsep atau teori sika yang akhirnya melahirkan sika teori. Kedua,dengan caraeksperimenyangmenghasilkanaliransikaeksperimental, danketiga, sikabisadipelajarilewat simulasi fenomena alam yang sangat mengandalkan komputer serta algoritma numerik.Tujuanpenyusunanbukuiniadalahuntukmeletakkanpondasidasardaribangunanpema-haman akan metode-metode komputasi yang banyak digunakan untuk mensimulasikan fenom-ena sika.Rujukan utama buku ini bersumber pada buku teks standar yang sangat populer di duniakomputasi, yaitu buku yang ditulis oleh Richard L. Burden dan J. Douglas Faires dengan judulNumerical Analysis edisi ke-7, diterbitkan oleh Penerbit Brooks/Cole, Thomson Learning Aca-demicResourceCenter. Disampingitu, bukuini dilengkapi olehsejumlahcontohaplikasikomputasi pada upaya penyelesaian problem-problem sika.iiiivPada edisi ke-3 ini saya mulai mencoba membiasakan diri menulis script dalam lingkunganPythondanOctave. Padahal, dalamedisike-2yanglalu, scriptnumerikdisalinkedalam2bahasa pemrograman, yaitu Fortran77 dan Matlab. Namun mayoritas ditulis dalam Matlab.SayaingingantikePython, lantarandenganPythonataupunOctave, sayadanjugamaha-siswa saya tidak perlu menginstal Matlab bajakan ke dalam komputer kami masing-masing.Buku yang sedang anda baca ini masih jauh dari sempurna. Keterkaitan antar Bab berikutisi-nya masih perlu perbaikan. Kondisi ini berpotensi membuat anda bingung, atau setidaknyamenjadi kurang fokus. Oleh karena itu saya menghimbau kepada pembaca untuk menfokuskandiri melalui penjelasan singkat berikut ini:Bab 1 berisi pengenalan matrik, operasi matrik, inisialisasi matrik pada Matlab dan For-tran. Saransaya, setiappembacayangmasihpemuladi duniapemrograman, harusmenguasai BabI terlebihdahulu. Disampingitupenjelasanlebihterperinci tentangbagaimana menentukan indeks i, jdan k dalam proses looping disajikan pada Bab I, un-tukmemberipondasiyangkokohbagiberdirinyabangunanpemahamanakanteknik-teknik numerik selanjutnya.Untuk mempelajari metode Finite-Difference, dianjurkan mulai dari Bab 1, Bab 2, Bab 4,Bab 7, dan Bab 8.Untuk mempelajari dasar-dasar inversi, dianjurkan mulai dari Bab 1, Bab 2, dan Bab 3.AkhirnyasayainginmengucapkanrasaterimakasihyangtakterhinggakepadaDedeDjuhanayangtelahberkenanmemberikanformatLATEX-nyasehinggatampilantulisanpadabuku ini benar-benar layaknya sebuah buku yang siap dicetak. Tak lupa, saya pun sepatutnyaberterimakasihkepadaseluruhrekandiskusiyaituparamahasiswayangtelahmengambilmatakuliahKomputasiFisikaPTA2006/2007diDepartemenFisika,FMIPA,UniversitasIn-donesia. Kepada seluruh mahasiswa dari berbagai universitas di Timur dan di Barat Indonesiajuga perlu saya tulis disini sebagai ungkapan terima kasih atas pertanyaan-pertanyaan merekayang turut memperkaya isi buku ini.Walaupun buku ini masih jauh dari sempurna, namun semoga ia dapat menyumbangkankontribusi yang berarti bagi terciptanya gelombang kebangkitan ilmu pengetahuan pada dirianakbangsaIndonesiayangsaatinisedangterpuruk. Sayawariskanilmuiniuntuksiswadan mahasiswa Indonesia dimanapun mereka berada.Kalian berhak memanfaatkan buku ini.Saya izinkan kalian untuk meng-copy dan menggunakan buku ini selama itu ditujukan untukbelajar dan bukan untuk tujuan komersial, kecuali kalau saya dapat bagian komisi-nya :) . Bagiyang ingin berdiskusi, memberikan masukan, kritikan dan saran, silakan dikirimkan ke email:[email protected], 8 Juni 2008Supriyanto SuparnoDaftar IsiLembar Persembahan iKata Pengantar iiiDaftar Isi ivDaftar Gambar viiiDaftar Tabel x1 Bahasa Python 11.1 Berkenalan dengan python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Dasar-dasar pemrograman python . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2.1 Variabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2.2 Bilangan integer dan oat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2.3 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2.4 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2.5 Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2.6 Membuat matrik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.2.7 Cara mengcopy matrik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.3 Python editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.4 Looping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.5 Optimasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.6 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Matrik dan Komputasi 112.1 Pengenalan matrik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2 Inisialisasi matrik kedalam memori komputer . . . . . . . . . . . . . . . . . . . . 122.2.1 Fortran77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2.2 Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2.3 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3 Macam-macam matrik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3.1 Matrik transpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3.2 Matrik bujursangkar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.3 Matrik simetrik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.4 Matrik diagonal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.5 Matrik identitas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.6 Matrik upper-triangular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16vvi2.3.7 Matrik lower-triangular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.3.8 Matrik tridiagonal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.3.9 Matrik diagonal dominan . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.3.10 Matrik positive-denite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.3.11 Vektor-baris dan vektor-kolom. . . . . . . . . . . . . . . . . . . . . . . . . 182.4 Operasi matematika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.4.1 Tukar posisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.4.2 Penjumlahan matrik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.4.3 Komputasi penjumlahan matrik . . . . . . . . . . . . . . . . . . . . . . . . 202.4.4 Perkalian matrik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.4.5 Komputasi perkalian matrik . . . . . . . . . . . . . . . . . . . . . . . . . . 262.4.6 Perkalian matrik dan vektor-kolom . . . . . . . . . . . . . . . . . . . . . . 282.4.7 Komputasi perkalian matrik dan vektor-kolom . . . . . . . . . . . . . . . . 292.5 Penutup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.6 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 Membuat Function dan Module 313.1 Akhir dari sebuah kebersamaan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.2 Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.2.1 Mencari akar persamaan kuadrat . . . . . . . . . . . . . . . . . . . . . . . . 333.2.2 Perkalian matrik dan vektor . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.3 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.4 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 Metode Eliminasi Gauss 394.1 Sistem persamaan linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.2 Triangularisasi dan Substitusi Mundur. . . . . . . . . . . . . . . . . . . . . . . . . 404.3 Matrik dan Eliminasi Gauss dalam Python . . . . . . . . . . . . . . . . . . . . . . 454.3.1 Source-code dasar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.3.2 Optimasi source code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.3.3 Pivoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584.3.4 Kembali ke bentuk Ax = b . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594.3.5 Function eliminasi gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614.4 Contoh aplikasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624.4.1 Menghitung arus listrik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624.4.2 Menghitung invers matrik . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654.5 Penutup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705 Aplikasi Eliminasi Gauss pada Masalah Inversi 715.1 Inversi Model Garis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715.1.1 Source code python inversi model garis. . . . . . . . . . . . . . . . . . . . . 745.2 Inversi Model Parabola. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75vii5.2.1 Source code python inversi model parabola . . . . . . . . . . . . . . . . . . 795.3 Inversi Model Bidang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805.4 Contoh aplikasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825.4.1 Menghitung gravitasi di planet X . . . . . . . . . . . . . . . . . . . . . . . . 826 Metode LU Decomposition 876.1 Faktorisasi matrik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876.1.1 Source code dalam Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906.2 Perubahan vektor b. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926.3 Penutup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927 Metode Iterasi 937.1 Kelebihan Vektor-kolom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937.2 Pengertian Norm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947.2.1 Perhitungan norm-selisih . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957.3 Iterasi Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957.3.1 Source code Python metode iterasi Jacobi . . . . . . . . . . . . . . . . . . . . 997.4 Iterasi Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097.4.1 Source code iterasi Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . 1107.5 Iterasi dengan Relaksasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1117.5.1 Algoritma Iterasi Relaksasi . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138 Interpolasi 1158.1 Interpolasi Lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158.2 Interpolasi Cubic Spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179 Diferensial Numerik 1259.1 Metode Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1259.2 Metode Runge Kutta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1319.2.1 Aplikasi: Pengisian muatan pada kapasitor. . . . . . . . . . . . . . . . . . 1349.3 Metode Finite Difference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1399.3.1 Script Finite-Difference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429.3.2 Aplikasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1479.4 Persamaan Diferensial Parsial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1489.5 PDP eliptik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1499.5.1 Contoh pertama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1519.5.2 Script Matlab untuk PDP Elliptik. . . . . . . . . . . . . . . . . . . . . . . . 1549.5.3 Contoh kedua. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1569.6 PDP parabolik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1579.6.1 Metode Forward-difference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1579.6.2 Contoh ketiga: One dimensional heat equation . . . . . . . . . . . . . . . . . 1589.6.3 Metode Backward-difference . . . . . . . . . . . . . . . . . . . . . . . . . . . 1639.6.4 Metode Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167viii9.7 PDP Hiperbolik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1709.7.1 Contoh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1729.8 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17310 Integral Numerik 17510.1 Metode Trapezoida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17510.2 Metode Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17610.3 Metode Composite-Simpson. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17710.4 Adaptive Quardrature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17910.5 Gaussian Quadrature. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18010.5.1 Contoh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18010.5.2 Latihan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18111 Mencari Akar 18311.1 Metode Newton. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18312 Metode Monte Carlo 18512.1 Penyederhanaan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18513 Inversi 18913.1 Inversi Linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18913.2 Inversi Non-Linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192Daftar Pustaka 195Indeks 197Daftar Gambar5.1 Sebaran data observasi antara temperatur dan kedalaman . . . . . . . . . . . . . 725.2 Grak data pengukuran gerak batu . . . . . . . . . . . . . . . . . . . . . . . . . . . 825.3 Grak hasil inversi parabola. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858.1 Fungsi f(x) dengan sejumlah titik data . . . . . . . . . . . . . . . . . . . . . . . . 1178.2 Pendekatan dengan polinomial cubic spline. . . . . . . . . . . . . . . . . . . . . . 1178.3 Prol suatu object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1228.4 Sampling titik data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1238.5 Hasil interpolasi cubic spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1238.6 Hasil interpolasi lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1249.1 Kiri: Kurva y(t) dengan pasangan titik absis dan ordinat dimana jarak titik absis sebe-sarh. Pasangant1adalahy(t1), pasangant2adalahy(t2), begituseterusnya. Kanan:Garissinggungyangmenyinggungkurvay(t)padat=a, kemudianberdasarkangarissinggungtersebut, ditentukanpasangant1sebagai w1. Perhatikangambaritusekalilagi! w1 dan y(t1) beda tipis alias tidak sama persis. . . . . . . . . . . . . . . . . . . . . 1269.2 Kurva biru adalah solusi exact, dimana lingkaran-lingkaran kecil warna biru pada kurvamenunjukkanposisipasanganabsistdanordinaty(t)yangdihitungolehPersamaan(9.9). Sedangkan titik-titik merah mengacu pada hasil perhitungan metode euler, yaitunilai wi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309.3 Kurva biru adalah solusi exact, dimana lingkaran-lingkaran kecil warna biru pada kurvamenunjukkanposisipasanganabsistdanordinaty(t)yangdihitungolehPersamaan(9.9). Sedangkan titik-titik merah mengacu pada hasil perhitungan metode Runge Kuttaorde 4, yaitu nilai wi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1349.4 Rangkaian RC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1359.5 Kurva pengisian muatan q (charging) terhadap waktu t . . . . . . . . . . . . . . . 1399.6 Kurva suatu fungsi f(x) yang dibagi sama besar berjarak h. Evaluasi kurva yangdilakukanFinite-DifferencedimulaidaribatasbawahX0=ahinggabatasatasx6= b. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409.7 Skema grid lines dan mesh points pada aplikasi metode Finite-Difference . . . . . . 1509.8 Susunan grid lines dan mesh points untuk mensimulasikan distribusi temperaturpada lempeng logam sesuai contoh satu. . . . . . . . . . . . . . . . . . . . . . . . 1529.9 Sebatanglogamdenganposisi titik-titiksimulasi (mesh-points) distribusi temperatur.Jarak antar titik ditentukan sebesar h = 0, 1. . . . . . . . . . . . . . . . . . . . . . . . . 1599.10 Interval mesh-points dengan jarak h = 0, 1 dalam interval waktu k = 0, 0005 . . . . . . . 159ixx DAFTAR GAMBAR9.11 Posisi mesh-points. Arah x menunjukkan posisi titik-titik yang dihitung dengan forward-difference, sedangkan arah t menunjukkan perubahan waktu yg makin meningkat . . . . 15910.1 Metode Trapezoida. Gambar sebelah kiri menunjukkan kurva fungsi f(x) dengan batasbawahintegral adalahadanbatasatasb. Gambarsebelahkananmenunjukancarametode Trapesoida menghitung luas area integrasi, dimana luas area adalah sama den-gan luas trapesium di bawah kurva f(x) dalam batas-batas a dan b . . . . . . . . . . . 17610.2 MetodeSimpson. Gambarsebelahkirimenunjukkankurvafungsif(x)denganbatasbawahintegral adalahadanbatasatasb. Gambarsebelahkananmenunjukancarametode Simpson menghitung luas area integrasi, dimana area integrasi di bawah kurvaf(x) dibagi 2 dalam batas-batas a dan b . . . . . . . . . . . . . . . . . . . . . . . . . . 17610.3 Metode Composite Simpson. Kurva fungsi f(x) dengan batas bawah integral adalah adan batas atas b.Luas area integrasi dipecah menjadi 8 area kecil dengan lebar masing-masing adalah h. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17811.1 Metode Newton. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18412.1 Lingkaran dan bujursangkar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18512.2 Dart yang menancap pada bidang lingkaran dan bujursangkar . . . . . . . . . . . 18612.3 Dart yang menancap pada bidang 1/4 lingkaran dan bujursangkar . . . . . . . . 187Daftar Tabel5.1 Data temperatur bawah permukaan tanah terhadap kedalaman . . . . . . . . . . 715.2 Data temperatur bawah permukaan tanah terhadap kedalaman . . . . . . . . . . 765.3 Data ketinggian terhadap waktu dari planet X . . . . . . . . . . . . . . . . . . . . 827.1 Hasil akhir elemen-elemen vektor x hingga iterasi ke-10 . . . . . . . . . . . . . . . 1067.2 Hasil perhitungan norm-selisih (dengan 2) hingga iterasi ke-10 . . . . . . . . . . 1087.3 Hasil Iterasi Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107.4 Hasil perhitungan iterasi Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . 1127.5 Hasil perhitungan iterasi Relaksasi dengan = 1, 25 . . . . . . . . . . . . . . . . . 1129.1 Solusi yang ditawarkan oleh metode euler widan solusi exact y(ti) serta selisihantara keduanya . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1299.2 SolusiyangditawarkanolehmetodeRungeKuttaorde4(wi)dansolusiexacty(ti) serta selisih antara keduanya . . . . . . . . . . . . . . . . . . . . . . . . . . . 1349.3 Perbandingan antara hasil perhitungan numerik lewat metode Runge Kutta danhasil perhitungan dari solusi exact, yaitu persamaan (9.16) . . . . . . . . . . . . . 1389.4 Hasil simulasi distribusi panas bergantung waktu dalam 1-dimensi. Kolom ke-2 adalahsolusi analitik/exact, kolomke-3 dan ke-5 adalah solusi numerik forward-difference. Kolomke-4 dan ke-6 adalah selisih antara solusi analitik dan numerik. . . . . . . . . . . . . . 1639.5 Hasil simulasi distribusi panas bergantung waktu dalam1-dimensi dengan metode backward-difference dimana k = 0, 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1679.6 Hasilsimulasidistribusipanasbergantungwaktu(t)dalam1-dimensidenganmetode backward-difference dan Crank-Nicolson. . . . . . . . . . . . . . . . . . . . 17010.1 Polinomial Legendre untuk n=2,3,4 dan 5 . . . . . . . . . . . . . . . . . . . . . . . 180xixii DAFTAR TABELBab 1Bahasa PythonObjektif :Mengenalkan Bahasa PythonDasar-dasar Pemrograman Python1.1 Berkenalan dengan pythonPythonmerupakanbahasapemrogramanyangbersifatobject-oriented. Bahasapythondibuatpadatahun1980anyangnamanyadiambildarisalahsatutayangantelevisidiInggrisyaituMontyPythonsFlyingCircus. Meskipunpythontidakterlaluterkenaldibandingkandenganbahasa pemrograman lainnya, python dapat diandalkan untuk membuat software aplikasi dibidang sains dan teknik dengan esien dan elegan.Script python tidak perlu dicompile kedalam suatu kode mesin apapun, karena ia dapat di-jalankan cukup dengan bantuan interpreter, seperti halnya Matlab. Keuntungan dari script yangbisadijalankandenganinterpreteradalahiadapatdiujidandidebugdengancepat,sehinggaprogrammerbisalebih berkonsentrasipadaprinsipdibalikscript yangsedangdibangunnya.Keuntungan ini juga menjadikan aplikasi python lebih cepat dibangun dibandingkan denganaplikasi yang sama jika dibangun dengan bahasa C maupun Fortran. Di sisi lain, kekuranganscript python selaku interpreted program adalah ia tidak dapat dicompile sehingga menjadi pro-gramaplikasiyangbersifatstand-alone. Sehinggasuatuscriptpythonhanyabisadieksekusijika pada komputer tersebut sudah terinstall program python.Python memiliki kelebihan lain yang sangat penting dibanding bahasa pemrograman yangterdahulu:Pythonmerupakanopen-sourcesoftware, yangartinyaiadapat diperolehsecaragratis.Bahkan python sudah otomatis terinstall di Linux.Pythontersediapadasemuaoperatingsystems(OS)terkenal seperti Linux, Unix, Win-dows, dan MacOS. Suatu script python yang ditulis pada OS tertentu, dapat dijalankandi OS lain tapa ada modikasi sedikitpun.12 BAB 1. BAHASA PYTHONPythonlebihmudahdipelajarisekaliguslebihmudah"dibaca"dibandingkandenganbahasa pemrograman lainnya.Python dan program ekstensinya mudah diinstall.Pythonberdiri di ataslandasanpondasi JavaandC++. Hal-hal seperti classes, methods,inheritance, yangkerapkalidiimplementasikanpadabahasayangbersifatobject-oriented, jugadapat diimplementasikan di python.1.2 Dasar-dasar pemrograman python1.2.1 VariabelPada sebagian besar bahasa pemrograman, nama suatu variabel merepresentasikan suatu nilaidengan tipe data tertentu dan menempati alamat memory yang pasti. Nilai variabel tersebutdapat diganti-ganti, namun tipe data selalu tetap. Tidak demikian dengan python dimana tipedatanya dapat diubah-ubah secara dinamis. Berikut ini adalah contohnya (>>> adalah promptpython):>>> b = 2 # b bilangan bertipe integer>>> print b2>>> b = b*2.0 # Sekarang b bilangan bertipe float>>> print b4.0Tulisan b = 2 artinya kita memberi nilai pada variabel b dengan angka 2 yang bertipe integer(bilanganbulat). Statemenberikutnyaadalahmelakukanoperasiperkalianb 2.0laluhasil-nya disimpan pada variabel yang sama yaitu variabel b. Dengan demikian nilai b yang lamaakan diganti dengan nilai b yang baru, yaitu yang berasal dari operasi yang terakhir. Sebagaikonsekuensi dari operasi tersebut, sekarang variabel b memiliki tipe data oat, suatu tipe yangberkaitan dengan bilangan pecahan atau desimal. Nilai variabel b menjadi 4.0.Tandapagar(#) menyatakanawal dari suatukomentar. Komentaradalahbagiandariscript/program python yang tidak akan dieksekusi oleh interpreter.1.2.2 Bilangan integer dan oatSeperti telah disinggung bahwa python mengenal bilangan bertipe integer dan oat. Perbedaantipe bilangan ini bisa jadi berpotensi menimbulkan masalah. Ini contohnya>>> 1/2 # bilangan integer dibagi bilangan integer0 # tentu saja ini keliru, mestinya 0.5>>> 1/2.0 # bilangan integer dibagi bilangan float0.5 # kali ini hasilnya tepatUntuk mengatasi kesalahan tersebut, tambahkan statement berikut ini1.2. DASAR-DASAR PEMROGRAMAN PYTHON 3>>> from __future__ import division>>> 1/20.5Nah, sekarang hasilnya sudah tepat.1.2.3 ListsList adalah sejumlah object yang dipisahkan oleh tanda koma (,) dan diapit oleh kurung siku([ ]). Begini contohnya:>>> a = [1.0, 2.0, 3.0] # cara membuat list>>> a.append(4.0) # tambahkan 4.0 kedalam list>>> print a[1.0, 2.0, 3.0, 4.0]>>> a.insert(0,0.0) # sisipkan 0.0 pada posisi 0>>> print a[0.0, 1.0, 2.0, 3.0, 4.0]>>> print len(a) # menentukan panjang list5Jika kita memberikan statemen b = a, maka itu tidak berarti bahwa variabel b terpisah den-gan variabel a. Di python, statemen seperti itu diartikan hanya sebagai pemberian nama lain(alias) kepada variabel a. Artinya, perubahan yang terjadi baik itu di a ataupun di b, maka hasilakhir mereka berdua akan sama saja. Setiap perubahan yang terjadi di b akan berdampak di a.Untuk meng-copy a secara independen, gunakan statemen c = a[:], sebagaimana dicontohkanberikut ini>>> a = [1.0, 2.0, 3.0]>>> b = a # b adalah alias dari a>>> b[0] = 5.0 # isi elemen b diubah>>> print a[5.0, 2.0, 3.0] # perubahan di b tercermin di a>>> c = a[:] # c kopian dari a>>> c[0] = 1.0 # isi elemen c diubah>>> print a[5.0, 2.0, 3.0] # a tidak dipengaruhi cMatrik dapat direpresentasikan sebagai list-list yang disusun berbaris. Berikut adalah ma-trik 3 3 dalam bentuk list:>>> a = [[1, 2, 3], \[4, 5, 6], \[7, 8, 9]]>>> print a[1] # Print baris kedua (elemen 1)4 BAB 1. BAHASA PYTHON[4, 5, 6]>>> print a[1][2] # Print elemen ketiga dari baris kedua6Tandabackslashadalahkarakteryangmenandakanbahwastatemenbelumselesai. Perludicatat disini pula bahwa python menganut zero offset,sehingga a[0] merepresentasikan barispertama, a[1] baris kedua, dst.1.2.4 ModuleWalaupun suatu matrik dapat dinyatakan oleh sejumlah list, namun kita akan menggunakancarayanglainuntukmenyatakansuatumatrik. Pythontelahmenyediakanmodulekhususyangberisicarauntukmenyatakansuatumatriksekaligusjugaoperasi-operasimatematikamatrik. Berikut contohnya:>>> from numpy import array>>> a = array([[2.0, -1.0],[-1.0, 3.0]])>>> print a[[ 2. -1.][-1. 3.]]Katanumpypadastatemenpertamadi atasadalahnamasebuahmoduleyangdikenali olehpython. Modulenumarrayberisifungsi-fungsikhususuntukmengolahdatamatrik. Padastatemenpertama, arraydanFloat adalah2buahfungsi khususyangtersimpandi modulenumpy. Masihbanyakfungsi-fungsi lainyangtersimpandi moduletersebut. Sebagai con-toh tambahan pemanfaatan fungsi dari module numpy, silakan perhatikan baik-baik contoh dibawah ini:>>> from numpy import arange,zeros,ones,float>>> a = arange(2,10,2)>>> print a[2 4 6 8]>>> b = arange(2.0,10.0,2.0)>>> print b[ 2. 4. 6. 8.]>>> z = zeros((4))>>> print z[0 0 0 0]>>> y = ones((3,3),float)>>> print y[[ 1. 1. 1.][ 1. 1. 1.][ 1. 1. 1.]]1.2. DASAR-DASAR PEMROGRAMAN PYTHON 51.2.5 FunctionSekarang coba anda buka Python Shell, lalu hitung akar dua dari 9 dengan mengetikan statemenberikut>>> sqrt(9)Jawaban yang muncul harusnya adalah angka 3.0. Tapi kenapa dilayar monitor malah tampiltulisan seperti ini dibawah sqrt(9)?Traceback (most recent call last):File "", line 1, in sqrt(9)NameError: name sqrt is not definedLewat tulisanitu, pythoninginbilangkekitabahwafungsi sqrt tidakdikenal atautidakdidenisikan. Bagaimana cara mengatasinya? Coba anda tambahkan module math sebelummenghitung sqrt.>>> from math import*>>> sqrt(9)3.0Nah, sekarang sudah terpecahkan!Padacontohtadi, statemensqrt(..angka..)adalahfungsi(function)yangbertugasuntukmencari akardari suatu angka. Secara umum yang dimaksud dengan function adalah state-menyangdieksekusi. Seringkaliinputparameterdiperlukanolehfunctionuntukdihitung,namun tidak selalu begitu. Contoh-contoh function yang lain adalah>>> sin(pi/2)1.0>>> tan(pi/4)0.99999999999999989>>> exp(10)22026.465794806718>>> log(100)4.6051701859880918>>> log10(100)2.0>>> pow(2,4)16.0>>> asin(0.5)0.52359877559829893>>> pi/60.523598775598298826 BAB 1. BAHASA PYTHONFunction apa saja yang disediakan oleh math? Ketikan statemen berikut, anda akan tahu jawa-bannya.>>> import math>>> dir(math)[__doc__, __name__, acos, asin, atan, atan2, ceil,cos, cosh, degrees, e, exp, fabs, floor, fmod,frexp, hypot, ldexp, log, log10, modf, pi, pow,radians, sin, sinh, sqrt, tan, tanh]1.2.6 Membuat matrikSekarangkitafokusmembahascaramendeklarasikansuatumatrikdenganbahasapython.Daripada repot-repot, kita download aja semua function yang tersimpan di numpy.>>> from numpy import*# tanda*artinya download semua function>>> A = zeros((3,3),float)# bikin matrik A rank 2 ukuran 3x3 diisi nol>>> print A[[ 0. 0. 0.][ 0. 0. 0.][ 0. 0. 0.]]Langkah pertama, matrik dibuat menggunakan function zeros lalu diikuti dengan ukuran ma-trik, misalnya 33. Kemudian elemen-elemen matrik diisi satu persatu dengan angka/bilangan.>>> a[0] = [2.0, 3.1, 1.8] # cara mengisi elemen baris sekaligus>>> a[1,1] = 5.2 # cara mengisi elemen satu-persatu>>> print A[[ 2. 3.1 1.8][ 0. 5.2 0. ][ 0. 0. 0. ]]Ada cara lain lagi yang lebih sederhana untuk mendeklarasikan sebuah matrik, yaitu cukupdengan dua baris statemen seperti berikut ini>>> from numpy import*# tanda*artinya download semua function>>> A = array([[1.,2.,3.],[4.,5.,6.],[7.,8.,9.]])>>> print A[[ 1. 2. 3.][ 4. 5. 6.][ 7. 8. 9.]]Atau kalau mau benar-benar mirip dengan format matrik, cara menuliskan statemennya adalahseperti ini1.2. DASAR-DASAR PEMROGRAMAN PYTHON 7>>> from numpy import array # hanya function array yang dipanggil>>> A = array([[1.,2.,3.],\[4.,5.,6.],\ # posisi kurung siku dibuat rata atas-bawah[7.,8.,9.]])>>> print A[[ 1. 2. 3.][ 4. 5. 6.][ 7. 8. 9.]]1.2.7 Cara mengcopy matrikBerbeda dengan bahasa C, bahasa Fortran, maupun Matlab, sebuah matrik di Python tidak bisadicopyhanyadengantandasama-dengan. BagiPython, tandasama-denganberfungsiuntukmemberi nama alias semata terhadap obyek yang sama. Perhatikan contoh berikut>>> A = array([[1.,2.],\[3.,4.]])>>> B = A>>> B[1][1]=8>>> Aarray([[ 1., 2.],[ 3., 8.]])>>> Barray([[ 1., 2.],[ 3., 8.]])Contoh di atas memperlihatkan bahwa matrik berukuran 2x2 tersebut memiliki 2 nama yaituA dan B. Buktinya, jika elemen B[1][1] diganti dengan angka 8, maka perubahan itu bisa dilihatdi A, yang mana elemen A[1][1] nya pun akan menyimpan angka 8 juga. Sekarang perhatikancontoh berikut ini>>> A = array([[1.,2.],\[3.,4.]])>>> B = A.copy()>>> B[1][1]=8>>> Aarray([[ 1., 2.],[ 3., 4.]])>>> Barray([[ 1., 2.],[ 3., 8.]])DenganperintahB=A.copy(),makamatrikAmenjadibenar-benarberbedaobyekdenganmatrik B. Buktinya, perubahan elemen B[1][1] tidak berefek apa-apa terhadap elemen A[1][1].8 BAB 1. BAHASA PYTHON1.3 Python editorSebenarnya, penulisan source code berbahasa python dapat dilakukan menggunakan berbagaieditor, misalnyadengannotepad-nyawindows. Akantetapi demi kenyamananprogrammer,sebaiknyapenulisansorce-codemenggunakanpythoneditoryangsudahtersediadi dalampyhtonshell. Caramemanggilpythoneditor,klikFiledipojokkiriatas,laluklikNewWindowataucukupdenganCtrl-N. Makasebuahwindowbaruakanterbuka, yaituwindowpythoneditor. Sebagai bahan uji coba, silakan ketikkan statemen-statemen berikut1 from numpy import array # hanya function array yang dipanggil2 A = array([[1.,2.,3.],\3 [4.,5.,6.],\4 [7.,8.,9.]])5 print ASimpanlah (Save) le source-code di atas dengan nama matrik01.py. Untuk mengeksekusi ataumenjalankan le tersebut, pilihlah menu Run, dilanjutkan dengan Run Module. Atau bisa lebihsingkat dengan cukup hanya menekan tombol F5. Di layar monitor akan tampil hasilnya.1.4 LoopingLooping artinya adalah pengulangan. Misalnya anda mendapat tugas untuk menghitung akarbilangan-bilangan dari 1 sampai 10.Ada 2 cara untuk menyelesaikan tugas tersebut, pertama,salinlah source-code berikut pada python editor lalu diberi nama looping01.py1 from numpy import sqrt # hanya function sqrt yang dipanggil2 print sqrt(1)3 print sqrt(2)4 print sqrt(3)5 print sqrt(4)6 print sqrt(5)7 print sqrt(6)8 print sqrt(7)9 print sqrt(8)10 print sqrt(9)11 print sqrt(10)Jalankansource-code di atasdenganmenekantombol F5, makaakanmuncul hasil sebagaiberikut1.01.414213562371.732050807572.02.23606797752.449489742782.645751311062.828427124751.5. OPTIMASI 93.03.16227766017Cara kedua dengan teknik looping, yaitu1 from numpy import sqrt2 for i in range(1,10+1):3 print sqrt(i)Simpanlahsource-codeinidengannamalooping02.py, lalujalankandenganF5, akannampakhasil yang sama yaitu1.01.414213562371.732050807572.02.23606797752.449489742782.645751311062.828427124753.03.16227766017Marisejenakkitabandingkanantaralooping01.pydanlooping02.py. Keduasource-codeitumemiliki tujuan yang sama yaitu menghitung akar bilangan dari 1 sampai 10. Perbedaannya,looping01.py berisi 11 baris statemen, sedangkan looping02.py hanya 3 baris statemen. Coba cekukuran le-nya! Ukuran le looping01.py (di laptop saya) adalah 179 byte, sementara ukuranlooping02.pyadalah72byte. Dengandemikiandapatdisimpulkanbahwalooping02.pylebihesien dibanding looping01.py.1.5 OptimasiDalamkonteks progamming, upaya-upaya untuk memperkecil jumlah statemen ataupun upaya-upaya untuk memperkecil ukuran le disebut optimasi.1.6 Latihan1. Buatlah 3 buah source-code untuk menyatakan masing-masing matrikA, matrikB danmatrik x sebagai berikutA =_1 3 65 9 7_B =__8 1 4 213 10 5 0.17 2 9 52.7 12 8.9 5.7__x =__0.41782.958756.30698.1__10 BAB 1. BAHASA PYTHON2. Salinlah source-code ini, lalu jalankan! Jika ada error, anda harus men-debug-nya sampaiselesai, lalu setelah itu lakukan langkah optimasi sehingga ia menjadi source-code yangesien!1 from numpy import sqrt2 print 1/log10(10)3 print 2/log10(20)4 print 3/log10(30)5 print 4/log10(40)6 print 5/log10(50)7 print 6/log10(60)8 print 7/log10(70)9 print 8/log10(80)Bab 2Matrik dan KomputasiObjektif :Mengenalkan matrik dan jenis-jenis matrik.Mengenalkan operasi penjumlahan dan perkalian matrik.Mendeklarasikan elemen-elemen matrik ke dalam memori komputer.Membuat source-code operasi matrik.2.1 Pengenalan matrikNotasi suatu matrik berukuran n x m ditulis dengan huruf besar dan dicetak tebal,misalnyaAnm. Huruf n menyatakan jumlah baris, dan huruf m jumlah kolom. Suatu matrik tersusundari elemen-elemen yang dinyatakan dengan huruf kecil diikuti angka-angka indeks, misalnyaaij, dimana indeks imenunjukan posisi baris ke-i dan indeks j menentukan posisi kolom ke-j.A = (aij) =__a11a12. . . a1ma21a22. . . a2m.........an1an2. . . anm__(2.1)Contoh 1: Matrik A23A =_3 8 56 4 7_dimanamasing-masingelemennyaadalaha11=3, a12=8, a13=5, a21=6, a22=4, dana23= 7.Contoh 2: Matrik B32B =__1 35 92 4__1112 BAB 2. MATRIK DAN KOMPUTASIdimanamasing-masingelemennyaadalahb11=1, b12=3, b21=5, b22=9, b31=2, danb32= 4.2.2 Inisialisasi matrik kedalam memori komputer2.2.1 Fortran77Dalambahasa pemrograman Fortran77, cara mengisi memori komputer dengan elemen-elemenmatrik A23, sesuai dengan Contoh 1 adalah1 A(1,1) = 32 A(1,2) = 83 A(1,3) = 54 A(2,1) = 65 A(2,2) = 46 A(2,3) = 7Sedangkan untuk matrik B32, sesuai Contoh 2 adalah1 B(1,1) = 12 B(1,2) = 33 B(2,1) = 54 B(2,2) = 95 B(3,1) = 26 B(3,2) = 42.2.2 MatlabSementara dalam Matlab, cara mengisi memori komputer dengan elemen-elemen matrik A23,sesuai dengan Contoh 1 adalah1 clear all2 clc34 A(1,1) = 3;5 A(1,2) = 8;6 A(1,3) = 5;7 A(2,1) = 6;8 A(2,2) = 4;9 A(2,3) = 7;10 ASedangkan untuk matrik B32, sesuai Contoh 2 adalah1 clear all2 clc34 B(1,1) = 1;5 B(1,2) = 3;6 B(2,1) = 5;7 B(2,2) = 9;8 B(3,1) = 2;2.2. INISIALISASI MATRIK KEDALAM MEMORI KOMPUTER 139 B(3,2) = 4;10 BInibukansatu-satunyacaramenginisialisasisuatumatrik, disampingitu, adajugacaralainyang relatif lebih mudah. Misalnya untuk matrik A bisa ditulis sebagai berikut1 clear all2 clc34 A=[ 3 8 55 6 4 7 ];67 B=[ 1 38 5 99 2 4 ];atau1 clear all2 clc34 A=[ 3 8 5 ; 6 4 7 ];5 B=[ 1 3 ; 5 9 ; 2 4];2.2.3 PythonInisialisasi matrik menggunakan python dilakukan dengan cara yang sudah dibahas pada Babsebelumnya, maka untuk menginisialisasi matrik A caranya adalah1 from numpy import array2 A = array([[3,8,5],\3 [6,4,7]])sedangkan untuk matrik B1 from numpy import array2 B = array([[1,3],\3 [5,9],\4 [2,4]])Adacatatantambahanyangharusdiperhatikansaat kitamenginisialisasi matrikmenggu-nakan python,yaitu python memulai indeks elemen matrik dari pasangan (0,0),bukan (1,1).Jadi angka 1 pada matrik B di atas berada pada indeks (0,0). Sementara angka 3 memiliki in-deks(0,1). Untukangka5indeks-nya(1,0). Sedangkanangka9punyaindeks(1,1). Begituseterusnya. Statemenberikutinibisamemastikanangkaberapasajayangmenempatiposisiindeks tertentu pada matriks B>>> B[0][0]114 BAB 2. MATRIK DAN KOMPUTASI>>> B[0][1]3>>> B[1][0]5>>> B[1][1]9Dari pemahaman ini, saya ajak anda untuk melihat cara lain menginisialisasi matrik menggu-nakan python. Perhatikan source-code berikut1 from numpy import zeros # memanggil function zeros2 B = zeros((3,2)) # mula-mula matrik B(3x2) diberi nilai 0 (nol)3 B[0][0]=1 # inisialilasi elemen B(0,0) dg angka 14 B[0][1]=3 # inisialilasi elemen B(0,0) dg angka 35 B[1][0]=5 # inisialilasi elemen B(0,0) dg angka 56 B[1][1]=9 # inisialilasi elemen B(0,0) dg angka 97 B[2][0]=2 # inisialilasi elemen B(0,0) dg angka 28 B[2][1]=4 # inisialilasi elemen B(0,0) dg angka 4Coba anda Run source-code ini lalu di-print, maka akan didapat>>> print B[[ 1. 3.][ 5. 9.][ 2. 4.]]2.3 Macam-macam matrik2.3.1 Matrik transposeOperasi transposeterhadapsuatumatrikakanmenukarelemen-elemendalamsatukolommenjadi elemen-elemen dalam satu baris;demikian pula sebaliknya. Notasi matrik tranposeadalah ATatau At.Contoh 3: Operasi transpose terhadap matrik AA =_3 8 56 4 7_At=__3 68 45 7__2.3.1.1 PythonBerikut adalah contoh source-code untuk melakukan transpose matrik menggunakan python1 from numpy import array, zeros2 A = array([[3.,8.,5.],\3 [6.,4.,7.]]) # A berukuran 2x34 print A5 AT = zeros((3,2)) # inisialisasi A-transpose berukuran 3x2, diberi nilai 06 AT[0][0]=A[0][0] # tukar posisi antara baris dan kolom2.3. MACAM-MACAM MATRIK 157 AT[0][1]=A[1][0] # tukar posisi antara baris dan kolom8 AT[1][0]=A[0][1] # tukar posisi antara baris dan kolom9 AT[1][1]=A[1][1] # tukar posisi antara baris dan kolom10 AT[2][0]=A[0][2] # tukar posisi antara baris dan kolom11 AT[2][1]=A[1][2] # tukar posisi antara baris dan kolom12 print AT2.3.2 Matrik bujursangkarMatrik bujursangkar adalah matrik yang jumlah baris dan jumlah kolomnya sama.Contoh 4: Matrik bujursangkar berukuran 3x3 atau sering juga disebut matrik bujursangkarorde 3A =__1 3 85 9 72 4 6__2.3.3 Matrik simetrikMatrik simetrik adalah matrik bujursangkar yang elemen-elemen matrik A bernilai sama den-gan matrik transpose-nya (At).Contoh 5: Matrik simetrikA =__2 3 7 13 5 6 27 6 9 81 2 8 10__At=__2 3 7 13 5 6 27 6 9 81 2 8 10__2.3.4 Matrik diagonalMatrik diagonal adalah matrik bujursangkar yang seluruh elemen-nya bernilai 0 (nol), kecualielemen-elemen diagonalnya.Contoh 6: Matrik diagonal orde 3A =__11 0 00 29 00 0 61__2.3.5 Matrik identitasMatrik identitas adalah matrik bujursangkar yang semua elemen-nya bernilai 0 (nol), kecualielemen-elemen diagonal yang seluruhnya bernilai 1.Contoh 7: Matrik identitas orde 3I =__1 0 00 1 00 0 1__16 BAB 2. MATRIK DAN KOMPUTASI2.3.5.1 PythonSetidaknya, berdasarkan apa-apa yang telah kita pelajari sebelumnya, ada 2 cara untuk mengin-isialisasi matrik identitas, pertama1 from numpy import array2 I = array([[1,0,0],\3 [0,1,0],\4 [0,0,1]])kedua1 from numpy import zeros2 I = zeros((3,3))3 B[0][0]=14 B[0][1]=05 B[0][2]=06 B[1][0]=07 B[1][1]=18 B[1][2]=09 B[2][0]=010 B[2][1]=011 B[2][2]=1Berikut ini saya ketengahkan cara yang ketiga, yang paling mudah dan praktis1 from numpy import identity # memanggil function identity2 I = identity(3) # inisialisasi matrik identitas berukuran 3x33 print I2.3.6 Matrik upper-triangularMatrik upper-tringular adalah matrik bujursangkar yang seluruh elemen dibawah elemen di-agonal bernilai 0 (nol).Contoh 8: Matrik upper-triangularA =__3 6 2 10 4 1 50 0 8 70 0 0 9__2.3.7 Matrik lower-triangularMatrik lower-tringular adalah matrik bujursangkar yang seluruh elemen diatas elemen diago-nal bernilai 0 (nol).2.3. MACAM-MACAM MATRIK 17Contoh 9: Matrik lower-triangularA =__12 0 0 032 2 0 08 7 11 05 10 6 9__2.3.8 Matrik tridiagonalMatrik tridiagonal adalah matrik bujursangkar yang seluruh elemen bukan 0 (nol) berada dis-ekitar elemen diagonal, sementara elemen lainnya bernilai 0 (nol).Contoh 10: Matrik tridiagonalA =__3 6 0 02 4 1 00 5 8 70 0 3 9__2.3.9 Matrik diagonal dominanMatrik diagonal dominan adalah matrik bujursangkar yang memenuhi|aii| >n

j=1,j=i|aij| (2.2)dimana i=1,2,3,..n. Coba perhatikan matrik-matrik berikut iniA =__7 2 03 5 10 5 6__B =__6 4 34 2 03 0 1__Pada elemen diagonal aii matrik A, |7| > |2|+|0|, lalu |5| > |3|+|1|, dan |6| > |5|+|0|. MakamatrikAdisebut matrikdiagonal dominan. Sekarang perhatikan elemen diagonal matrikB,|6| < |4| +| 3|, | 2| < |4| +|0|, dan |1| < | 3| +|0|. Dengan demikian, matrik B bukan matrikdiagonal dominan.2.3.10 Matrik positive-deniteSuatu matrik dikatakan positive-denite bila matrik tersebut simetrik dan memenuhixtAx > 0 (2.3)18 BAB 2. MATRIK DAN KOMPUTASIContoh 11: Diketahui matrik simetrik berikutA =__2 1 01 2 10 1 2__untuk menguji apakah matrik A bersifat positive-denite, makaxtAx =_x1x2x3___2 1 01 2 10 1 2____x1x2x3__=_x1x2x3___2x1x2x1 + 2x2x3x2 + 2x3__= 2x212x1x2 + 2x222x2x3 + 2x23= x21 + (x212x1x2 + x22) + (x222x2x3 + x23) + x23= x21 + (x1x2)2+ (x2x3)2+ x23Dari sini dapat disimpulkan bahwa matrik A bersifat positive-denite, karena memenuhix21 + (x1x2)2+ (x2x3)2+ x23> 0kecuali jika x1=x2=x3=0.2.3.11 Vektor-baris dan vektor-kolomNotasi vektor biasanya dinyatakan dengan huruf kecil dan dicetak tebal. Suatu matrik dina-makanvektor-barisberukuranm, bilahanyamemilikisatubarisdanmkolom, yangdiny-atakan sebagai berikuta =_a11a12. . . a1m_ =_a1a2. . . am_(2.4)Sedangkan suatu matrik dinamakan vektor-kolomberukuran n, bila hanya memiliki satu kolomdan n baris, yang dinyatakan sebagai berikuta =__a11a21...an1__=__a1a2...an__(2.5)2.4. OPERASI MATEMATIKA 192.4 Operasi matematika2.4.1 Tukar posisiOperasi matematika yang pertama diperkenalkan adalah tukar posisi (pivoting). Misalnya, pa-da mulanya sistem persamaan linear tersusun seperti iniP1: x0+ x1+ 3x3= 4P2: 2x0+ x1 x2+ x3= 1P3: 3x0 x1 x2+ 2x3= -3P4: x0+ 2x1+ 3x2 x3= 4Selanjutnya mau diubah susunannya menjadiP1: x0+ x1+ 3x3= 4P3: 3x0 x1 x2+ 2x3= -3P2: 2x0+ x1 x2+ x3= 1P4: x0+ 2x1+ 3x2 x3= 4Salah satu source code untuk melakukan tukar posisi adalah sebagai berikut1 from numpy import array2 A = array([[1.,1.,0.,3.,4],\3 [2.,1.,-1.,1.,1],\4 [3.,-1.,-1.,2.,-3],\5 [-1.,2.,3.,-1,4]])6 print A78 for i in range(0,5):9 v=A[1][i]10 u=A[2][i]11 A[1][i]=u12 A[2][i]=v1314 print A2.4.2 Penjumlahan matrikOperasi penjumlahan pada dua buah matrik hanya bisa dilakukan bila kedua matrik tersebutberukuran sama. Misalnya matrik C23C =_9 5 37 2 1_dijumlahkan dengan matrik A23, lalu hasilnya (misalnya) dinamakan matrik D23D = A+ C20 BAB 2. MATRIK DAN KOMPUTASID =_3 8 56 4 7_+_9 5 37 2 1_=_3 + 9 8 + 5 5 + 36 + 7 4 + 2 7 + 1_=_12 13 813 6 8_Tanpa mempedulikan nilai elemen-elemen masing-masing matrik, operasi penjumlahan antaramatrik A23dan C23, bisa juga dinyatakan dalam indeks masing-masing dari kedua matriktersebut, yaitu_d11d12d13d21d22d23_ =_a11 + c11a12 + c12a13 + c13a21 + c21a22 + c22a23 + c23_Dijabarkan satu persatu sebagai berikutd11= a11 + c11d12= a12 + c12d13= a13 + c13(2.6)d21= a21 + c21d22= a22 + c22d23= a23 + c23Dari sini dapat diturunkan sebuah rumus umum penjumlahan dua buah matrikdij= aij + cij(2.7)dimana i=1,2 dan j=1,2,3.2.4.3 Komputasi penjumlahan matrikBerdasarkancontohoperasipenjumlahandiatas, indeksjpadapersamaan(2.7)lebihcepatberubah dibanding indeks i sebagaimana ditulis pada persamaan (2.6),d11= a11 + c11d12= a12 + c12d13= a13 + c13Jelasterlihat, ketikaindeksimasihbernilai 1, indeksj sudahberubahdari nilai 1sampai3. Halinimembawakonsekuensipadascriptpemrograman, dimanaloopinguntukindeksjharusdiletakkandidalamloopingindeksi. Pokoknyayanglooping-nyapalingcepatharusdiletakkanpalingdalam; sebaliknya, loopingpalingluaradalahloopingyangindeksnyapaling jarang berubah.2.4. OPERASI MATEMATIKA 212.4.3.1 MatlabDalam matlab, algoritma penjumlahan dua matrik ditulis sebagai berikut:1 for i=1:22 for j=1:33 D(i,j)=A(i,j)+C(i,j);4 end5 end2.4.3.2 Fortran77Sedangkan dalam Fortran77, operasi penjumlahan antara matrik ditulis sebagai berikut:A23dan C23 adalah1 do i=1,22 do j=1,33 D(i,j)=A(i,j)+C(i,j)4 end do5 end do2.4.3.3 PythonNah kalau di python caranya agak sedikit beda1,1 for i in range(0,2):2 for j in range(0,3):3 D[i][j]=A[i][j]+C[i][j]Perhatikan ketiga source-code di atas! Penulisan indeks i harus didahulukan daripada in-deks j.Perludicatatbahwaukuranmatriktidakterbatashanya2x3. Tentusajaandabisamen-gubahukurannyasesuaidengankeperluanataukebutuhananda. Jikaukuranmatrikdiny-atakan secara umum sebagai n x m, dimana n adalah jumlah baris dan m adalah jumlah kolom,maka bentuk pernyataan komputasinya dalam matlab menjadi1 for i=1:n2 for j=1:m3 D(i,j)=A(i,j)+C(i,j);4 end5 endsedangkan dalam Fortran771 do i=1,n2 do j=1,m1DiPython, angkaindeksterkecildimulaidari0(nol), bukandari1(satu). Padasource-codeini, walaupunbatasatasitertulissampai angka2, namunPythonhanyamengolahnyasampai angka1saja. Demikianpuladengan indeks j, ia hanya sampai angka 2 saja.22 BAB 2. MATRIK DAN KOMPUTASI3 D(i,j)=A(i,j)+C(i,j)4 end do5 end dokalau di Python1 for i in range(0,n):2 for j in range(0,m):3 D[i][j]=A[i][j]+C[i][j]Sekarang, mari kita lengkapi dengan contoh sebagai berikut: diketahui matrik A23A =_3 8 56 4 7_dan matrik C23C =_9 5 37 2 1_Program untuk menjumlahkan kedua matrik tersebut dalam matlab adalah:1 clear all2 clc34 A(1,1) = 3;5 A(1,2) = 8;6 A(1,3) = 5;7 A(2,1) = 6;8 A(2,2) = 4;9 A(2,3) = 7;10 C(1,1) = 9;11 C(1,2) = 5;12 C(1,3) = 3;13 C(2,1) = 7;14 C(2,2) = 2;15 C(2,3) = 1;16 n=217 m=318 for i=1:n19 for j=1:m20 D(i,j)=A(i,j)+C(i,j);21 end22 endsedangkan dalam Fortran771 A(1,1) = 32 A(1,2) = 83 A(1,3) = 54 A(2,1) = 65 A(2,2) = 46 A(2,3) = 77 C(1,1) = 98 C(1,2) = 52.4. OPERASI MATEMATIKA 239 C(1,3) = 310 C(2,1) = 711 C(2,2) = 212 C(2,3) = 113 n=214 m=315 do i=1,n16 do j=1,m17 D(i,j)=A(i,j)+C(i,j)18 end do19 end doKalau di Python1 from numpy import array, zeros2 A = array([[3.,8.,5.],\3 [6.,4.,7.]]) # A berukuran 2x34 C = array([[9.,5.,3.],\5 [7.,2.,1.]]) # C berukuran 2x36 n=27 m=38 D = zeros((n,m))9 for i in range(0,n):10 for j in range(0,m):11 D[i][j]=A[i][j]+C[i][j]12 print D2.4.4 Perkalian matrikOperasiperkalianduabuahmatrikhanyabisadilakukanbilajumlahkolommatrikpertamasamadenganjumlahbarismatrikkedua. Jadikeduamatriktersebuttidakharusberukuransama seperti pada penjumlahan dua matrik. Misalnya matrikA23dikalikan dengan matrikB32, lalu hasilnya (misalnya) dinamakan matrik E22E22= A23.B32E =_3 8 56 4 7___1 35 92 4__=_3.1 + 8.5 + 5.2 3.3 + 8.9 + 5.46.1 + 4.5 + 7.2 6.3 + 4.9 + 7.4_=_53 10140 82_Tanpamempedulikannilai elemen-elemenmasing-masingmatrik, operasi perkalianantaramatrik A23dan B32,bisa juga dinyatakan dalam indeks masing-masing dari kedua matrik24 BAB 2. MATRIK DAN KOMPUTASItersebut, yaitu_e11e12e21e22_ =_a11.b11 + a12.b21 + a13.b31a11.b12 + a12.b22 + a13.b32a21.b11 + a22.b21 + a23.b31a21.b12 + a22.b22 + a23.b32_Bila dijabarkan, maka elemen-elemen matrik E22 adalahe11= a11.b11 + a12.b21 + a13.b31(2.8)e12= a11.b12 + a12.b22 + a13.b32(2.9)e21= a21.b11 + a22.b21 + a23.b31(2.10)e22= a21.b12 + a22.b22 + a23.b32(2.11)Sejenak, mari kita amati perubahan pasangan angka-angka indeks yang mengiringi elemen e,adanbpadapersamaan (2.8)sampaipersamaan(2.11). Perhatikan perubahanangka indekspertama pada elemen e seperti berikut inie1..= ..e1..= ..e2..= ..e2..= ..Pola perubahan yang sama akan kita dapati pada angka indeks pertama dari elemen ae1..= a1...b... + a1...b... + a1...b...e1..= a1...b... + a1...b... + a1...b...e2..= a2...b... + a2...b... + a2...b...e2..= a2...b... + a2...b... + a2...b...Dengandemikiankitabisamencantumkanhuruf i sebagai pengganti angka-angkaindeksyang polanya samaei..= ai...b... + ai...b... + ai...b...ei..= ai...b... + ai...b... + ai...b...ei..= ai...b... + ai...b... + ai...b...ei..= ai...b... + ai...b... + ai...b...dimana i bergerak mulai dari angka 1 hingga angka 2, atau kita nyatakan i=1,2. Selanjutnya,masih dari persamaan (2.8) sampai persamaan (2.11), marilah kita perhatikan perubahan angka2.4. OPERASI MATEMATIKA 25indeks masih pada elemen e dan elemen b,ei1= ai...b..1 + ai...b..1 + ai...b..1ei2= ai...b..2 + ai...b..2 + ai...b..2ei1= ai...b..1 + ai...b..1 + ai...b..1ei2= ai...b..2 + ai...b..2 + ai...b..2Dengandemikiankitabisamencantumkanhuruf j sebagai pengganti angka-angkaindeksyang polanya samaeij= ai...b..j + ai...b..j + ai...b..jeij= ai...b..j + ai...b..j + ai...b..jeij= ai...b..j + ai...b..j + ai...b..jeij= ai...b..j + ai...b..j + ai...b..jdimana jbergerak mulai dari angka 1 hingga angka 2, atau kita nyatakan j=1,2. Selanjutnya,masihdaripersamaan(2.8)sampaipersamaan(2.11),marikitaperhatikanperubahanangkaindeks masih pada elemen a dan elemen b, dimana kita akan dapati pola sebagai berikuteij= ai1.b1j + ai2.b2j + ai3.b3jeij= ai1.b1j + ai2.b2j + ai3.b3jeij= ai1.b1j + ai2.b2j + ai3.b3jeij= ai1.b1j + ai2.b2j + ai3.b3jDankitabisamencantumkanhurufksebagaipengganti angka-angkaindeksyangpolanyasama, dimana k bergerak mulai dari angka 1 hingga angka 3, atau kita nyatakan k=1,2,3.eij= aik.bkj + aik.bkj + aik.bkjeij= aik.bkj + aik.bkj + aik.bkjeij= aik.bkj + aik.bkj + aik.bkjeij= aik.bkj + aik.bkj + aik.bkjKemudian secara sederhana dapat ditulis sebagai berikuteij= aik.bkj + aik.bkj + aik.bkj(2.12)Selanjutnya dapat ditulis pula formula berikuteij=3

k=1aikbkj(2.13)26 BAB 2. MATRIK DAN KOMPUTASIdimana i=1,2; j=1,2; dan k=1,2,3.Berdasarkan contoh ini, maka secara umum bila ada matrik Anm yang dikalikan dengan ma-trik Bmp, akan didapatkan matrik Enp dimana elemen-elemen matrik E memenuhieij=m

k=1aikbkj(2.14)dengan i=1,2,. . . ,n; j=1,2. . . ,p; dan k=1,2. . . ,m.2.4.5 Komputasi perkalian matrikKomputasi operasi perkalian antara matrik A23 dan B32 dilakukan melalui 2 tahap; pertamaadalah memberikan nilai 0 (nol) pada elemen-elemen matrik E22 dengan cara (dalam matlab)1 for i=1:22 for j=1:23 E(i,j)=0.0;4 end5 enddalam Fortran771 do i=1,22 do j=1,23 E(i,j)=0.04 end do5 end dodalam python begini caranya1 from numpy import array, zeros2 E = zeros((2,2))kedua adalah menghitung perkalian matrik dengan cara (dalam matlab)1 for i=1:22 for j=1:23 for k=1:34 E(i,j)=E(i,j)+A(i,k)*B(k,j);5 end6 end7 enddalam Fortran771 do i=1,22 do j=1,23 do k=1,34 E(i,j)=E(i,j)+A(i,k)*B(k,j)5 end do6 end do7 end do2.4. OPERASI MATEMATIKA 27dalam Python1 for i in range(0,2):2 for j in range(0,2):3 for k in range(0,3):4 E[i][j]=E[i][j]+A[i][k]*B[k][j]Sebentar.., sebelum dilanjut tolong perhatikan penempatan indeks i, j dan k pada script di atas.Mengapa indeks i didahulukan daripada indeks jdan k? Ini bukan sesuatu yang kebetulan.Dan ini juga bukan sekedar mengikuti urutan huruf abjad i,j,k.Sekali lagi ingin saya tegaskanbahwa penempatan yang demikian semata-mata mengikuti aturan umum yaitu looping yangindeksnya berubah paling cepat harus diletakkan paling dalam; sebaliknya, looping palingluar adalah loopingyang indeksnya paling jarang berubah. Kalau anda perhatikan denganteliti, pasti andaakanmenemukanfaktabahwaindekskpalingcepatberubah. Kemudiandisusul olehindeksj. Laluyangpalingjarangberubahadalahindeksi. Itulahsebabnya,penempatanurutanindekspadascriptdiatasharusdimulaidariiterlebihdahulusebagailooping terluar, kemudian indeks j, dan yang terakhir indeks k sebagai looping terdalam.Tentusajaandabisamengubahukuranmatrik-nyasesuaidengankeperluanataukebu-tuhananda. JikaukuranmatrikAdinyatakansecaraumumsebagai nxmdanmatrikBberukuran m x p, maka bentuk pernyataan komputasinya dalam Matlab menjadi1 for i=1:n2 for j=1:p3 E(i,j)=0.0;4 end5 end6 for i=1:n7 for j=1:p8 for k=1:m9 E(i,j)=E(i,j)+A(i,k)*B(k,j);10 end11 end12 enddalam Fortran771 do i=1,n2 do j=1,p3 E(i,j)=0.04 end do5 end do6 do i=1,n7 do j=1,p8 do k=1,m9 E(i,j)=E(i,j)+A(i,k)*B(k,j)10 end do11 end do12 end dosedangkan dalam Python28 BAB 2. MATRIK DAN KOMPUTASI1 E = zeros((n,p))2 for i in range(0,n):3 for j in range(0,p):4 for k in range(0,m):5 E[i][j]=E[i][j]+A[i][k]*B[k][j]dimanaakandiperolehhasil berupamatrikEyangberukurannxp. Source-codelengkapuntuk contoh soal yang ada di atas adalah1 from numpy import array, zeros2 A = array([[3.,8.,5.],\3 [6.,4.,7.]]) # A berukuran 2x34 B = array([[1.,3.],\5 [5.,9.],\6 [2.,4.]]) # B berukuran 3x27 n=2 # jumlah baris matrik A8 m=3 # jumlah kolom matrik A sekaligus jumlah baris matrik B9 p=2 # jumlah kolom matrik B10 E = zeros((n,p))11 for i in range(0,n):12 for j in range(0,p):13 for k in range(0,m):14 E[i][j]=E[i][j]+A[i][k]*B[k][j]2.4.6 Perkalian matrik dan vektor-kolomOperasi perkalian antara matrik dan vektor-kolom sebenarnya sama saja dengan perkalian an-tara dua matrik. Hanya saja ukuran vektor-kolom boleh dibilang spesial yaitu m x 1, dimanam merupakan jumlah baris sementara jumlah kolomnya hanya satu. Misalnya matrikA, pa-dacontoh1, dikalikandenganvektor-kolomxyangberukuran3x1ataudisingkatdenganmengatakan vektor-kolom x berukuran 3, lalu hasilnya (misalnya) dinamakan vektor-kolom yy = Axy =_3 8 56 4 7___234__=_3.2 + 8.3 + 5.46.2 + 4.3 + 7.4_=_5052_Sekali lagi, tanpa mempedulikan nilai elemen-elemen masing-masing, operasi perkalian antaramatrik A dan vektor-kolom x, bisa juga dinyatakan dalam indeksnya masing-masing, yaitu_y1y2_ =_a11.x1 + a12.x2 + a13.x3a21.x1 + a22.x2 + a23.x3_2.4. OPERASI MATEMATIKA 29Bila dijabarkan, maka elemen-elemen vektor-kolom y adalahy1= a11.x1 + a12.x2 + a13.x3y2= a21.x1 + a22.x2 + a23.x3kemudian secara sederhana dapat diwakili oleh rumus berikutyi=3

j=1aijxjdimana i=1,2.Berdasarkan contoh tersebut, secara umum bila ada matrik A berukuran n x m yang dikalikandengan vektor-kolom x berukuran m, maka akan didapatkan vektor-kolom y berukuran n x 1dimana elemen-elemen vektor-kolom y memenuhiyi=m

j=1aijxj(2.15)dengan i=1,2,. . . ,n.2.4.7 Komputasi perkalian matrik dan vektor-kolomSama seperti perkalian dua matrik, komputasi untuk operasi perkalian antara matrik Aberuku-ran n x m dan vektor-kolom x berukuran m dilakukan melalui 2 tahap; pertama adalah mem-berikan nilai 0 (nol) pada elemen-elemen vektor-kolom y yang berukuran n. Lalu tahap keduaadalahmelakukanprosesperkalian. Keduatahapaninidigabungjadisatudalamprogramberikut ini1 for i=1:n2 b(i,1)=0.0;3 end4 for i=1:n5 for j=1:m6 b(i,1)=b(i,1)+A(i,j)*x(j,1);7 end8 enddan dalam Fortran1 do i=1,n2 b(i,1)=0.03 end do4 do i=1,n5 do j=1,m6 b(i,1)=b(i,1)+A(i,j)*x(j,1)7 end do8 end dosementara di dalam Python30 BAB 2. MATRIK DAN KOMPUTASI1 E = zeros((n,1))2 for i in range(0,n):3 for k in range(0,m):4 E[i][0]=E[i][0]+A[i][k]*x[k][0]Dengan demikian penyelesaian contoh di atas adalah1 from numpy import array, zeros2 A = array([[3.,8.,5.],\3 [6.,4.,7.]]) # matrik A berukuran 2x34 x = array([[2.],\5 [3.],\6 [4.]]) # vektor x berukuran 3x17 n=2 # jumlah baris matrik A8 m=3 # jumlah kolom matrik A sekaligus jumlah baris vektor x9 E = zeros((n,1))10 for i in range(0,n):11 for k in range(0,m):12 E[i][0]=E[i][0]+A[i][k]*x[k][0]2.5 PenutupDemikianlah catatan singkat dan sederhana mengenai jenis-jenis matrik dasar yang seringkalidijumpai dalam pengolahan data sika secara numerik.Semuanya akan dijadikan acuan ataureferensi pada pembahasan topik-topik numerik yang akan datang.2.6 LatihanDiketahui matrik A, matrik B, dan vektor x sebagai berikutA =__1 3 6 25 9 7 5.62 4 8 12.3 1.4 0.8 2.3__B =__8 1 4 213 10 5 0.17 2 9 52.7 12 8.9 5.7__x =__0.41782.958756.30698.1__1. Buatlah 3 source-code untuk melakukan transpose matrik A, matrik B dan vektor x, laluujilah ketiga source-code tersebut apakah sudah bisa berjalan sesuai tujuannya!2. Buatlah source-code untuk menyelesaikan penjumlahan matrik A dan matrik B.3. Buatlah source-code untuk menyelesaikan perkalian matrik A dan matrik B.4. Buatlah source-code untuk menyelesaikan perkalian matrik A dan vektor x.5. Buatlah source-code untuk menyelesaikan perkalian matrik B dan vektor x.Bab 3Membuat Function dan ModuleObjektif :Mengenalkan cara membuat function di Python.Mengenalkan cara membuat module di Python.3.1 Akhir dari sebuah kebersamaanPadababterdahulu, hampirsemuacontohsource-codeselalumenggunakanfunctionarray,zeros dan transpose. Dan anda sudah tahu bahwa semua function tersebut tersimpan di dalammodulenumpy. Padababini, kitaakanmempelajarilebihjauhtentangbagaimanacaranyamembuatfunctiondanmodulepribadi. Sayakira, topikinicukupsulit. Iabagaikansebuahetapeyangmenanjakpenuhtikungan. Karenanya, bagiyangmasihgemarmeng-copyataumenyalin PR dari teman dekat, bisa jadi inilah saat-saat terakhir kebersamaan kita (dalam kon-teksperkuliahan). Maksudsaya, setelahhariinikemungkinanandaakankepayahanuntukbisa mengerti alur berkir saya dan sulit memahami apa-apa yang saya ucapkan. Namun se-moga itu tidak terjadi.3.2 FunctionFunction bisa dianggap sebagai sebuah cara untuk mengekspresikan rumus atau formula matem-atika. Misalnya diketahui formula sebagai berikuty= a2+ 2 b + cJika a = 2, b = 3 dan c = 4, maka dari python-shell, komputer bisa disuruh menghitung nilai y>>> a=2>>> b=3>>> c=4>>> y=a*a+2*b+c3132 BAB 3. MEMBUAT FUNCTION DAN MODULE>>> print y14cara lain adalah dengan membuat le x.py, misalnya1 a = 22 b = 33 c = 44 y = a*a+2*b+c5 print yAda cara baru yang kemudian akan menjadi bahasan utama bab ini, yaitu dengan membuatfunction. Langkah pertama adalah membuat sebuah le yang berisi statemen-statemen berikutini1 def rumus_abc (a,b,c):2 y = a*a+2*b+c3 return ykemudiansimpanlahletersebutdengannamakungfu.py, laludi-rundengancaramenekantombol F5. Selanjutnya, dari python-shell, anda bisa memanggil function rumus_abc>>> rumus_abc (2,3,4)14coba lagi dengan angka yang lain>>> rumus_abc (7,8,9)74>>> rumus_abc (5.,8.,1.)42.0Jadi dengan adanya function rumus_abc, anda tidak perlu lagi mengetikan y=a a + 2 b +cberulangkali. Functionmerupakankumpulanstatemenyangbisadipanggilberulangkalitanpaharusmengetikancode-nyaberkali-kali. Functionyangbarusajakitabuatdiatasbisadikembangkan menjadi seperti ini11 def rumus_abc (a,b,c):2 y = a*a+2*b+c3 x = a*b*c4 return y,xKetika function tersebut dipanggil>>> rumus_abc (2,3,4)(14, 24)1Jangan lupa untuk men-save dan men-run setiap kali ada modikasi di dalam function.3.2. FUNCTION 33angka pertama, yaitu 14 adalah milik y, sedangkan angka kedua (24) adalah miliknya x. Kalaudicoba dengan angka yang lain>>> rumus_abc (7,8,9)(74, 504)>>> rumus_abc (5.,8.,1.)(42.0, 40.0)3.2.1 Mencari akar persamaan kuadratRumus umum dari persamaan kuadrat adalah sebagai berikuty= ax2+ bx + cakar-akar persamaan kuadrat dapat dicari dengan rumus abcx1= b +D2ax2= b D2adimana D disebut diskriminanD = b24acBergantung pada nilai a, b dan c, nilai diskriminan bisaD > 0 memiliki 2 akar berbedaD = 0 memiliki 2 akar kembarD < 0 memiliki 2 akar kompleksFunction berikut ini bisa dihandalkan untuk mencari akar-akar persamaan kuadrat1 from __future__ import division2 from numpy import sqrt,complex34 def akarx1x2(a,b,c):5 D = b*b-4*a*c6 if D > 0.0:7 x1 = (-b+sqrt(D))/(2*a)8 x2 = (-b-sqrt(D))/(2*a)9 elif D == 0.0:10 x1 = -b/(2*a)11 x2 = -b/(2*a)12 else:13 D = -D14 x1r = -b/(2*a)15 x1i = sqrt(D)/(2*a)16 x1 = complex(x1r,x1i)17 x2r = x1r18 x2i = -x1i34 BAB 3. MEMBUAT FUNCTION DAN MODULE19 x2 = complex(x2r,x2i)20 return x1,x2Silakan anda save dan jalankan lalu cek hasilnya2>>> akarx1x2(1,3,2)(-1.0, -2.0)>>> akarx1x2(1,-4,4)(2.0, 2.0)>>> akarx1x2(4,4,2)((-0.5+0.5j), (-0.5-0.5j))3.2.2 Perkalian matrik dan vektorSekarang kita akan membuat function untuk perkalian matrik dan vektor. Berdasarkan source-code yang lalu (di bab sebelumnya) perkalian matrik dan vektor adalah sebagai berikut1 from numpy import array, zeros2 A = array([[3.,8.,5.],\3 [6.,4.,7.]]) # matrik A berukuran 2x34 x = array([[2.],\5 [3.],\6 [4.]]) # vektor x berukuran 3x17 n=2 # jumlah baris matrik A8 m=3 # jumlah kolom matrik A sekaligus jumlah baris vektor x9 E = zeros((n,1))10 for i in range(0,n):11 for k in range(0,m):12 E[i][0]=E[i][0]+A[i][k]*x[k][0]Source-code ini memiliki dua bagian utama, yaitu bagian inisialisasi dan bagian operasi perkalian.Bagian operasi perkalian akan dipisah menjadi sebuah function bernama matxvek yang dikhususkanuntuk melayani operasi perkalian matrik dan vektor.1 from numpy import zeros23 def matxvek (A,x):4 n=2 # jumlah baris matrik A5 m=3 # jumlah kolom matrik A sekaligus jumlah baris vektor x6 E = zeros((n,1))7 for i in range(0,n):8 for k in range(0,m):9 E[i][0]=E[i][0]+A[i][k]*x[k][0]10 return ESimpanlah le ini dengan nama komputasi.py, lalu di-run. Kemudian ketikan code berikut padapython-shell>>> from numpy import array2Statemen pertama pada function ini, yaitu from __future__ import division telah dibahas pada Bab 1.3.2. FUNCTION 35>>> A = array([[3.,8.,5.],\[6.,4.,7.]])>>> x = array([[2.],\[3.],\[4.]])>>> E = matxvek(A,x)>>> print E[[ 50.][ 52.]]Berhasil! Function matxvek bekerja sempurna.Sebelum dilanjut, ada sedikit modikasi yang diperlukan pada function matxvek yang ter-simpanpadalekomputasi.py, yaituyangmenyangkutinisialisasinilaindanm. Perhatikanperubahannya berikut ini (saya harap anda mengerti tanpa harus saya jelaskan).1 from numpy import zeros, transpose23 def matxvek (A,x):4 n=len(A) # cara lain untuk menghitung jumlah baris matrik A5 m=len(transpose(A)) # cara lain untuk menghitung jumlah kolom matrik A dan baris vektor x6 E = zeros((n,1))7 for i in range(0,n):8 for k in range(0,m):9 E[i][0]=E[i][0]+A[i][k]*x[k][0]10 return ESimpanlah le ini, lalu di-run kembali. Ulangi lagi ketikan code berikut pada python-shell>>> from numpy import array>>> A = array([[3.,8.,5.],\[6.,4.,7.]])>>> x = array([[2.],\[3.],\[4.]])>>> E = matxvek(A,x)>>> print E[[ 50.][ 52.]]Modikasi pada function matxvek bertujuan agar function matxvek bisa berlaku pada matrikA yang ukurannya bukan 2 3 saja. Contohnya>>> A = array([[3.,8.,5.],\[6.,4.,7.],\[2.,1.,9.]])>>> x = array([[2.],\[3.],\36 BAB 3. MEMBUAT FUNCTION DAN MODULE[4.]])>>> E = matxvek(A,x)>>> print E[[ 50.][ 52.][ 43.]]Jelas terlihat disini bahwa function matxvek bisa digunakan untuk ukuran matrik Ayang bervari-asi.3.3 ModuleSebelum mendiskusikan module, silakan buka lagi le kungfu.py yang menyimpan function ru-mus_abc yang lalu1 def rumus_abc (a,b,c):2 y = a*a+2*b+c3 return yFunction rumus_abc akan saya letakkan di dalam komputasi.py1 from numpy import zeros, transpose23 def matxvek (A,x):4 n=len(A)5 m=len(transpose(A))6 E = zeros((n,1))7 for i in range(0,n):8 for k in range(0,m):9 E[i][0]=E[i][0]+A[i][k]*x[k][0]10 return E1112 def rumus_abc (a,b,c):13 y = a*a+2*b+c14 x = a*b*c15 return y,xKemudian function akarx1x2 juga digabung ke dalamkomputasi.py. Perhatikan perubahan yangterjadi di source-code, khususnya pada statemen awal1 from __future__ import division2 from numpy import zeros, transpose, sqrt,complex34 def matxvek (A,x):5 n=len(A)6 m=len(transpose(A))7 E = zeros((n,1))8 for i in range(0,n):9 for k in range(0,m):10 E[i][0]=E[i][0]+A[i][k]*x[k][0]11 return E123.3. MODULE 3713 def rumus_abc (a,b,c):14 y = a*a+2*b+c15 x = a*b*c16 return y,x1718 def akarx1x2(a,b,c):19 D = b*b-4*a*c20 if D > 0.0:21 x1 = (-b+sqrt(D))/(2*a)22 x2 = (-b-sqrt(D))/(2*a)23 elif D == 0.0:24 x1 = -b/(2*a)25 x2 = -b/(2*a)26 else:27 D = -D28 x1r = -b/(2*a)29 x1i = sqrt(D)/(2*a)30 x1 = complex(x1r,x1i)31 x2r = x1r32 x2i = -x1i33 x2 = complex(x2r,x2i)34 return x1,x2jangan lupa di-save dan di-run. Kemudian buatlah sebuah le x.py yang isinya sebagai berikut1 from numpy import array2 from komputasi import matxvek34 A = array([[3.,8.,5.],\5 [2.,1.,9.],\6 [6.,4.,7.]]) # matrik A berukuran 3x37 x = array([[2.],\8 [3.],\9 [4.]]) # vektor x berukuran 3x110 hasil = matxvek(A,x)11 print hasilsilakan anda save dan run. Inilah hasilnya>>>[[ 50.][ 43.][ 52.]]Sampai disini anda telah berhasil membuat module pribadi, yaitu module komputasi.Sekarangsaatnya membahas module. Module adalah kumpulan function. Kita baru saja membuat moduleyangdiberinamakomputasi. Didalamnyabaruterdapat2buahfunctionyaitumatxvekdanrumus_abc. Untuk melihat seluruh function yang ada di module komputasi, ketikkan code berikutini>>> import komputasi>>> dir(komputasi)[__builtins__, __doc__, __file__, __name__, akarx1x2,38 BAB 3. MEMBUAT FUNCTION DAN MODULEcomplex, division, matxvek, rumus_abc, sqrt,transpose, zeros]Yup, disana sudah ada matxvek, rumus_abc dan akarx1x2.Tapi mengapa transpose dan zerosbisa tersimpan juga di module komputasi?3.4 Latihan1. Buatlahsebuahsource-codeuntuksebuahmoduleyangberisifunctionmatxvek, functionmatxmat(untukoperasiperkalian2matrik), functionmatplusmat(untukoperasipen-jumlahan 2 matrik), function rumus_abc dan function akarx1x2. Nama module harus dis-esuaikan dengan nomor pokok mahasiswa (NPM) masing-masing.2. Buatlah source-code untuk menyelesaikan penjumlahan matrik A dan matrik B denganmemanfaatkan module yang selesai dibuat pada nomor sebelumnya.3. Buatlah source-code untuk menyelesaikan perkalian matrik A dan matrik B dengan me-manfaatkan module yang selesai dibuat pada nomor sebelumnya.4. Buatlah source-code untuk menyelesaikan perkalian matrik A dan vektor x dengan me-manfaatkan module yang selesai dibuat pada nomor sebelumnya.5. Buatlah source-code untuk menyelesaikan perkalian matrik B dan vektor x dengan me-manfaatkan module yang selesai dibuat pada nomor sebelumnya.Berikut ini adalah matrik A, matrik B, dan vektor x yang digunakan untuk menyelesaikan soallatihan di atasA =__0.1 2.3 9.6 2.721.5 2.9 1.7 5.62.13 4.29 8.72 1.022.3 1.24 0.18 7.3__B =__8.3 1.6 4.8 21.23.4 10.5 5.2 0.17.8 2.7 9.4 5.12.7 12.3 18.9 50.7__x =__23.787.978.3694.112__Bab 4Metode Eliminasi GaussObjektif :Mengenalkan sistem persamaan linear.Mengenalkan teknik triangularisasi dan substitusi mundur.Aplikasi metode Eliminasi Gauss menggunakan matrik.Membuat algoritma metode Eliminasi Gauss.Menghitung invers matrik menggunakan metode Eliminasi Gauss.4.1 Sistem persamaan linearSecara umum, sistem persamaan linear dinyatakan sebagai berikutPn: an1x0 + an2x1 + ... + annxn= bn(4.1)dimana a dan b merupakan konstanta, x adalah variable, sementara nilai n = 1, 2, 3, ....MisalnyaadasistempersamaanlinearyangterdiridariempatbuahpersamaanyaituP1,P2, P3, dan P4 seperti berikut ini:P1: x0+ x1+ 3x3= 4P2: 2x0+ x1 x2+ x3= 1P3: 3x0 x1 x2+ 2x3= -3P4: x0+ 2x1+ 3x2 x3= 4Problem dari sistem persamaan linear adalah bagaimana mencari angka-angka yang tepatuntuk menggantikan variabel x0, x1, x2, dan x3 sehingga semua persamaan di atas menjadi be-nar. Untuk mendapatkan solusi tersebut, diperlukan langkah-langkah penyederhanaan sistempersamaan linear.3940 BAB 4. METODE ELIMINASI GAUSS4.2 Triangularisasi dan Substitusi MundurAdabanyakjalanuntukmenyederhanakansistempersamaanlinear. Namuntantangannya,kita ingin agar pekerjaan ini dilakukan oleh komputer. Oleh karena itu, kita harus menciptakanalgoritmayangnantinyabisaberjalandi komputer. Untukmencapai tujuanitu, kitaakanberpatokan pada tiga buah aturan operasi matematika, yaituPersamaan Pi dapat dikalikan dengan sembarang konstanta , lalu hasilnya ditempatkandi posisi persamaan Pi. Simbol operasi ini adalah (Pi) (Pi). ContohP1: x0 + x1 + 3x3= 4jika = 2, maka2P1: 2x0 + 2x1 + 6x3= 8PersamaanPjdapatdikalikandengansembarangkonstantakemudiandijumlahkandengan persamaan Pi, lalu hasilnya ditempatkan di posisi persamaan Pi. Simbol operasiini adalah (PiPj) (Pi). ContohP2: 2x0 + x1x2 + x3= 12P1: 2x0 + 2x1 + 6x3= 8maka operasi (P22P1) (P2) mengakibatkan perubahan pada P2 menjadiP2: x1x25x3= 7dimana variabel x0 berhasil dihilangkan dari P2.Persamaan Pi dan Pjdapat bertukar posisi.Simbol operasi ini adalah (Pi) (Pj).Con-tohP2: 2x0 + x1x2 + x3= 1P3: 3x0x1x2 + 2x3= 3maka operasi (P2) (P3) mengakibatkan pertukaran posisi masing-masing persamaan,menjadiP2: 3x0x1x2 + 2x3= 3P3: 2x0 + x1x2 + x3= 1Sebelum dilanjut, saya ingin mengajak anda untuk fokus memahami aturan operasi yang ked-ua. Misalnya ada 2 persamaan linear yaituP1: 3x0 + 2x15x2 + 8x3= 3P2: 4x0 + 7x1x2 + 6x3= 94.2. TRIANGULARISASI DAN SUBSTITUSI MUNDUR 41lalu anda diminta untuk menghilangkan variabel x0dari P2. Itu artinya, anda diminta untukmemodikasi P2. Berdasarkanrumusoperasi (Pi Pj) (Pi), makaoperasiyangtepatadalah (P243P1) (P2). Perhatikan! Bilangan , yaitu43, harus dikalikan dengan P1, BUKANdengan P2. Sedangkan angka43adalah satu-satunya angka yang bisa menghapus variabel x0dari P2 lewat operasi (P243P1). Selengkapnya adalah sebagai berikutP2: 4x0 + 7x1x2 + 6x3= 943P1:433x0 +432x1435x2 +438x3=433Kemudian, hasil operasi (P243P1) disimpan di P2 yang baruP2:_4 433_x0 +_7 432_x1_1 435_x2 +_6 438_x3=_9 433_Dengan sendirinya x0 akan lenyap dari P2. Mudah-mudahan jelas sampai disini.Sekarang, mari kita tinjau hal yang sama menggunakan indeks1. Secara umum, P1dan P2bisa dinyatakanP1: a00x0 + a01x1 + a02x2 + a03x3= a04P2: a10x0 + a11x1 + a12x2 + a13x3= a14Agar x0 hilang dari P2, operasi yang benar adalah (P2P1) (P2), dengan =a10a00. SehinggaP2 yang baruP2:_a10a10a00a00_x0+_a11a10a00a01_x1+_a12a10a00a02_x2+_a13a10a00a03_x3=_a14a10a00a04_Ada pola perubahan indeks yang tersirat dihasil akhir ini. Semoga intuisi anda bisa menangkappolatersebut. Jikabelum,marikitakembangkanpersoalanini. Sekarangsayasodorkandi-hadapan anda tiga buah persamaan, yaitu P1, P2 dan P3P1: a00x0 + a01x1 + a02x2 + a03x3= a04P2: a10x0 + a11x1 + a12x2 + a13x3= a14P3: a20x0 + a21x1 + a22x2 + a23x3= a24Bagaimana cara menghilangkan x0 dari P3??1Ingat! Pythonmemulai indeks-nyadari angka0,bukan angka1. Sehinggaelemenpertama memilikiindeksa00, bukan a11 sebagaimana yang berlaku di Matlab42 BAB 4. METODE ELIMINASI GAUSSBegini caranya, (P3P1) (P3), dengan =a20a00..P3:_a20a20a00a00_x0+_a21a20a00a01_x1+_a22a20a00a02_x2+_a23a20a00a03_x3=_a24a20a00a04_Mudah-mudahan, polanyasemakinterlihatjelas. JikaadapersamaanP4danjikax1ingindihapus dari P4, bagaimana caranya?Tentu saja operasinya adalah (P4P1) (P4), dengan =a30a00P4:_a30a30a00a00_x0+_a31a30a00a01_x1+_a32a30a00a02_x2+_a33a30a00a03_x3=_a34a30a00a04_Sekarang, marikitakembalikepadasistempersamaanlinearyangsudahditulisdiawalbab iniP1: x0+ x1+ 3x3= 4P2: 2x0+ x1 x2+ x3= 1P3: 3x0 x1 x2+ 2x3= -3P4: x0+ 2x1+ 3x2 x3= 4Sekali lagi saya tegaskan bahwa problem dari sistem persamaan linear adalah bagaimanamendapatkanangka-angkayangbisamenggantikanvariabelx0, x1, x2, danx3sehinggase-mua persamaan di atas menjadi benar. Dengan berpegang pada ketiga aturan operasi, sistempersamaan linear di atas dapat disederhanakan dengan langkah-langkah berikut ini:1. Gunakan persamaan P1 untuk menghilangkan variabel x0 dari persamaan P2, P3 dan P4dengan cara (P22P1) (P2), (P33P1) (P3) dan (P4 + P1) (P4).Hasilnya akanseperti iniP1: x0 + x1 + 3x3= 4,P2: x1x25x3= 7,P3: 4x1x27x3= 15,P4: 3x1 + 3x2 + 2x3= 82. GunakanpersamaanP2untukmenghilangkanvariabel x1dari persamaanP3danP4dengan cara (P34P2) (P3) dan (P4 + 3P2) (P4). Hasilnya akan seperti iniP1: x0 + x1 + 3x3= 4,P2: x1x25x3= 7,P3: 3x2 + 13x3= 13,P4: 13x3= 13Kalau x2 masih ada di persamaan P4, dibutuhkan satu operasi lagi untuk menghilangkan-nya. Namun hasil operasi pada langkah ke-2 ternyata sudah otomatis menghilangkan x2.Bentuk akhir dari keempat persamaan di atas, dikenal sebagai bentuk triangular.4.2. TRIANGULARISASI DAN SUBSTITUSI MUNDUR 43Sampai denganlangkahke-2ini, kitaberhasil mendapatkansistempersamaanlinearyang lebih sederhana. Apa yang dimaksud dengan sederhana dalam konteks ini?Suatusistempersamaanlineardikatakansederhanabilakitabisamendapatkanangka-angkapenggantivariabelx0, x1, x2danx3dengancarayanglebihmudahdibandingkanse-belum disederhanakan.3. Selanjutnya kita jalankan proses backward-substitution. Melalui proses ini, yang perta-ma kali didapat adalah nilai pengganti bagi variabel x3, kemudian x2, lalu diikuti x1, danakhirnya x0.P4: x3= 1313= 1,P3: x2=13(13 13x3) =13(13 13) = 0,P2: x1= (7 + 5x3 + x2) = (7 + 5 + 0) = 2,P1: x0= 4 3x3x1= 4 3 2 = 1Jadisolusinyaadalahx0= 1, x1=2, x2=0danx3=1. Cobasekarangandacek,apakah semua solusi ini cocok dan tepat bila dimasukan ke sistem persamaan linear yangbelum disederhanakan?OK, mudah-mudahan ngerti ya... Kalau belum paham, coba diulangi bacanya sekali lagi.Atau, sekarang kita beralih kecontoh yang lain.44 BAB 4. METODE ELIMINASI GAUSSContoh keduaMisalnya ada sistem persamaan linear, terdiri dari empat buah persamaan yaitu P1, P2, P3,dan P4 seperti berikut ini:P1: x0 x1+ 2x2 x3= -8P2: 2x0 2x1+ 3x2 3x3= -20P3: x0+ x1+ x2= -2P4: x0 x1+ 4x2+ 3x3= 4Seperti contoh pertama, solusi sistem persamaan linear di atas akan dicari dengan langkah-langkah berikut ini:1. Gunakan persamaan P1untuk menghilangkan x0dari persamaan P2, P3dan P4dengancara (P22P1) (P2), (P3P1) (P3) dan (P4P1) (P4). Hasilnya akan seperti iniP1: x0x1 + 2x2x3= 8,P2: x2x3= 4,P3: 2x1x2 + x3= 6,P4: 2x2 + 4x3= 12PerhatikanpersamaanP2! Akibatdari langkahyangpertamatadi, selainx0, x1jugahilang dari persamaan P2. Kondisi ini bisa menggagalkan proses triangularisasi. Untukitu,posisiP2mestiditukardenganpersamaanyangberadadibawahnya,yaituP3atauP4. Supayaprosestriangularisasidilanjutkankembali,makayangpalingcocokadalahditukar dengan P3.2. Tukar posisi persamaan P2 dengan persamaan P3, (P2 P3). Hasilnya akan seperti iniP1: x0x1 + 2x2x3= 8,P2: 2x1x2 + x3= 6,P3: x2x3= 4,P4: 2x2 + 4x3= 123. Gunakan persamaan P3untuk menghilangkan x2dari persamaan P4dengan cara (P42P3) (P4). Hasilnya akan seperti iniP1: x0x1 + 2x2x3= 8,P2: 2x1x2 + x3= 6,P3: x2x3= 4,P4: 2x3= 4Sampai disini proses triangularisasi telah selesai.4.3. MATRIK DAN ELIMINASI GAUSS DALAM PYTHON 454. Selanjutnya adalah proses backward-substitution. Melalui proses ini, yang pertama kalididapat solusinya adalah x3, kemudian x2, lalu diikuti x1, dan akhirnya x0.P4: x3=42= 2,P3: x2= 4 + x31= 2,P2: x1=6 + x2x32= 3,P1: x0= 8 + x12x2 + x3= 7Jadi solusinya adalah x0= 7, x1= 3, x2= 2 dan x3= 2.Berdasarkan kedua contoh di atas, untuk mendapatkan solusi sistem persamaan linear, diper-lukan operasi triangularisasi dan proses backward-substitution. Kata backward-substitutionkalau diterjemahkan kedalam bahasa indonesia, menjadi substitusi-mundur. Gabungan pros-es triangularisasi dan substitusi-mundur untuk menyelesaikan sistem persamaan linear dike-nal sebagai metode eliminasi gauss.4.3 Matrik dan Eliminasi Gauss dalam PythonMatrik bisa digunakan untuk menyatakan suatu sistem persamaan linear. Sejenak,mari kitakembali lagi melihat sistem persamaan linear secara umum seperti berikut ini:a00x0 + a01x1 + . . . + a0nxn= b0a10x0 + a11x1 + . . . + a1nxn= b1. . . . . . . . . . . . . . . = . . .. . . . . . . . . . . . . . . = . . .an0x0 + an1x1 + . . . + annxn= bnBentuk operasi matrik yang sesuai dengan sistem persamaan linear di atas adalah__a00a01. . . a0na10a11. . . a1n.........an0an1. . . ann____x0x1...xn__=__b0b1...bn__(4.2)Dalamupayamencarisolusisuatusistempersamaanlinearmenggunakanmetodeeliminasigauss, bentuk operasi matrik di atas dimanipulasi menjadi matrik augment, yaitu suatu matrik46 BAB 4. METODE ELIMINASI GAUSSyang berukuran n x (n + 1) seperti berikut ini:__a00a01. . . a0n| b0a10a11. . . a1n| b1............ |...an0an1. . . ann| bn__=__a00a01. . . a0n| a0,n+1a10a11. . . a1n| a1,n+1......... |...an0an1. . . ann| an,n+1__(4.3)Pada contoh pertama di atas, diketahui sistem persamaan linear yang terdiri dari empat buahpersamaan yaitu P1, P2, P3, dan P4P1: x0+ x1+ 3x3= 4P2: 2x0+ x1 x2+ x3= 1P3: 3x0 x1 x2+ 2x3= -3P4: x0+ 2x1+ 3x2 x3= 4Sistem persamaan linear tersebut dapat dinyatakan dalam operasi matrik__1 1 0 32 1 1 13 1 1 21 2 3 1____x0x1x2x3__=__4134__Setelah itu matrik augment disusun seperti ini (perhatikan angka-angka indeks pada matriksdisebelahnya)__1 1 0 3 | 42 1 1 1 | 13 1 1 2 | 31 2 3 1 | 4____a00a01a02a03| a04a10a11a12a13| a14a20a21a22a23| a24a30a31a32a33| a34__Kemudiankitalakukanoperasitriangularisaiterhadapmatrikaugment,dimulaidarikolompertama, yaituP2:_a10a10a00a00_x0+_a11a10a00a01_x1+_a12a10a00a02_x2+_a13a10a00a03_x3=_a14a10a00a04_P3:_a20a20a00a00_x0+_a21a20a00a01_x1+_a22a20a00a02_x2+_a23a20a00a03_x3=_a24a20a00a04_P4:_a30a30a00a00_x0+_a31a30a00a01_x1+_a32a30a00a02_x2+_a33a30a00a03_x3=_a34a30a00a04_Source code python untuk menyelesaikan perhitungan ini adalah1 from numpy import array2 A = array([[1.,1.,0.,3.,4],\3 [2.,1.,-1.,1.,1],\4 [3.,-1.,-1.,2.,-3],\5 [-1.,2.,3.,-1,4]]) # susunan matrik augment4.3. MATRIK DAN ELIMINASI GAUSS DALAM PYTHON 4767 m=A[1][0]/A[0][0]8 A[1][0]=A[1][0]-m*A[0][0]9 A[1][1]=A[1][1]-m*A[0][1]10 A[1][2]=A[1][2]-m*A[0][2]11 A[1][3]=A[1][3]-m*A[0][3]12 A[1][4]=A[1][4]-m*A[0][4]1314 m=A[2][0]/A[0][0]15 A[2][0]=A[2][0]-m*A[0][0]16 A[2][1]=A[2][1]-m*A[0][1]17 A[2][2]=A[2][2]-m*A[0][2]18 A[2][3]=A[2][3]-m*A[0][3]19 A[2][4]=A[2][4]-m*A[0][4]2021 m=A[3][0]/A[0][0]22 A[3][0]=A[3][0]-m*A[0][0]23 A[3][1]=A[3][1]-m*A[0][1]24 A[3][2]=A[3][2]-m*A[0][2]25 A[3][3]=A[3][3]-m*A[0][3]26 A[3][4]=A[3][4]-m*A[0][4]Hasilnya akan seperti ini__1 1 0 3 | 40 1 1 5 | 70 4 1 7 | 150 3 3 2 | 8____a00a01a02a03| a04a10a11a12a13| a14a20a21a22a23| a24a30a31a32a33| a34__Padakolompertama, seluruhelemenberubahmenjadinol(a10=0, a20=0, dana30=0)kecuali elemen yang paling atas a00. Lalu dilanjutkan ke kolom kedua,dengan operasi yanghampir sama, untuk membuat elemen a21 dan a31 bernilai nolP3:_a20a21a11a10_x0+_a21a21a11a11_x1+_a22a21a11a12_x2+_a23a21a11a13_x3=_a24a21a11a14_P4:_a30a31a11a10_x0+_a31a31a11a11_x1+_a32a31a11a12_x2+_a33a31a11a13_x3=_a34a31a11a14_1 from numpy import array2 m=A[2][1]/A[1][1]3 A[2][0]=A[2][0]-m*A[1][0]4 A[2][1]=A[2][1]-m*A[1][1]5 A[2][2]=A[2][2]-m*A[1][2]6 A[2][3]=A[2][3]-m*A[1][3]7 A[2][4]=A[2][4]-m*A[1][4]89 m=A[3][1]/A[1][1]10 A[3][0]=A[3][0]-m*A[1][0]11 A[3][1]=A[3][1]-m*A[1][1]12 A[3][2]=A[3][2]-m*A[1][2]13 A[3][3]=A[3][3]-m*A[1][3]14 A[3][4]=A[3][4]-m*A[1][4]48 BAB 4. METODE ELIMINASI GAUSSHasilnya akan seperti ini__1 1 0 3 | 40 1 1 5 | 70 0 3 13 | 130 0 0 13 | 13____a00a01a02a03| a04a10a11a12a13| a14a20a21a22a23| a24a30a31a32a33| a34__Dengan memperhatikan angka-angka indeks pada matrik augment di atas, kita akan menco-ba membuat rumusan proses substitusi-mundur untuk mendapatkan seluruh nilai penggantivariabel x. Dimulai dari x3,x3=a34a33= 1313= 1ini dapat dinyatakan dalam rumus umum, yaituxn1=an1,nan1,n1lalu dilanjutkan dengan x2, x1, dan x0.x2=a24a23x3a22=13 [(13)(1)]3= 0x1=a14(a12x2 + a13x3)a11=(7) [(1)(0) + (5)(1)](1)= 2x0=a04(a01x1 + a02x2 + a03x3)a00=4 [(1)(2) + (0)(0) + (3)(1)]1= 1Inilah source code proses substitusi mundur sesuai rumusan di atas1 X = zeros((4,1))23 X[3][0]=A[3][4]/A[3][3]4 X[2][0]=(A[2][4]-A[2][3]*X[3][0])/A[2][2]5 X[1][0]=(A[1][4]-(A[1][2]*X[2][0]+A[1][3]*X[3][0]))/A[1][1]6 X[0][0]=(A[0][4]-(A[0][1]*X[1][0]+A[0][2]*X[2][0]+A[0][3]*X[3][0]))/A[0][0]4.3.1 Source-code dasarProses triangularisasi dan substitusi-mundur dibakukan menjadi algoritma metode eliminasigaussyangdapatditerapkandalamberbagaibahasapemrogramankomputer, misalnyafor-tran, C, java, pascal, matlab, dan lain-lain. Berikut ini saya tampilkan source-code dalam bahasapython1 from numpy import array,zeros23 #~~~~~~inisialisasi matrik augment~~~~~#4 A = array([[1.,1.,0.,3.,4],\5 [2.,1.,-1.,1.,1],\6 [3.,-1.,-1.,2.,-3],\7 [-1.,2.,3.,-1,4]])8 print A4.3. MATRIK DAN ELIMINASI GAUSS DALAM PYTHON 49910 #~~~~~~proses triangularisasi~~~~~~~~~~#11 #-----menghilangkan x1 dari P2 dst-----#12 m=A[1][0]/A[0][0]13 A[1][0]=A[1][0]-m*A[0][0]14 A[1][1]=A[1][1]-m*A[0][1]15 A[1][2]=A[1][2]-m*A[0][2]16 A[1][3]=A[1][3]-m*A[0][3]17 A[1][4]=A[1][4]-m*A[0][4]1819 m=A[2][0]/A[0][0]20 A[2][0]=A[2][0]-m*A[0][0]21 A[2][1]=A[2][1]-m*A[0][1]22 A[2][2]=A[2][2]-m*A[0][2]23 A[2][3]=A[2][3]-m*A[0][3]24 A[2][4]=A[2][4]-m*A[0][4]2526 m=A[3][0]/A[0][0]27 A[3][0]=A[3][0]-m*A[0][0]28 A[3][1]=A[3][1]-m*A[0][1]29 A[3][2]=A[3][2]-m*A[0][2]30 A[3][3]=A[3][3]-m*A[0][3]31 A[3][4]=A[3][4]-m*A[0][4]3233 #-----menghilangkan x2 dari P3 dst-----#3435 m=A[2][1]/A[1][1]36 A[2][0]=A[2][0]-m*A[1][0]37 A[2][1]=A[2][1]-m*A[1][1]38 A[2][2]=A[2][2]-m*A[1][2]39 A[2][3]=A[2][3]-m*A[1][3]40 A[2][4]=A[2][4]-m*A[1][4]4142 m=A[3][1]/A[1][1]43 A[3][0]=A[3][0]-m*A[1][0]44 A[3][1]=A[3][1]-m*A[1][1]45 A[3][2]=A[3][2]-m*A[1][2]46 A[3][3]=A[3][3]-m*A[1][3]47 A[3][4]=A[3][4]-m*A[1][4]4849 #-----menghilangkan x3 dari P4 dst-----#5051 m=A[3][2]/A[2][2]52 A[3][0]=A[3][0]-m*A[2][0]53 A[3][1]=A[3][1]-m*A[2][1]54 A[3][2]=A[3][2]-m*A[2][2]55 A[3][3]=A[3][3]-m*A[2][3]56 A[3][4]=A[3][4]-m*A[2][4]5758 print A5960 #~~~~~~proses substitusi-mundur~~~~~~~~#6162 X = zeros((4,1))6364 X[3][0]=A[3][4]/A[3][3]65 X[2][0]=(A[2][4]-A[2][3]*X[3][0])/A[2][2]66 X[1][0]=(A[1][4]-(A[1][2]*X[2][0]+A[1][3]*X[3][0]))/A[1][1]67 X[0][0]=(A[0][4]-(A[0][1]*X[1][0]+A[0][2]*X[2][0]+A[0][3]*X[3][0]))/A[0][0]50 BAB 4. METODE ELIMINASI GAUSS6869 print X4.3.2 Optimasi source codeSingkatnya, tujuan dari dilakukannya proses optimasi adalah untuk memperkecil jumlah barisstatemen pada source code dasar. Seperti kita ketahui bersama, source code dasar eliminasi gaussyangtertulis di atas terdiri atas 69 barisstatemen,sehingga proses optimasiperlu dilakukanuntuk memperkecil jumlah baris statemen (tanpa menyalahi hasil perhitungan).Langkah optimasi yang pertama difokuskan pada baris statemen ke 12 hingga ke 17, yaitum=A[1][0]/A[0][0]A[1][0]=A[1][0]-m*A[0][0]A[1][1]=A[1][1]-m*A[0][1]A[1][2]=A[1][2]-m*A[0][2]A[1][3]=A[1][3]-m*A[0][3]A[1][4]=A[1][4]-m*A[0][4]Bagian ini dapat dioptimasi menjadim=A[1][0]/A[0][0]for i in range(0,5):A[1][i]=A[1][i]-m*A[0][i]Langkah optimasi yang sama juga bisa diterapkan untuk rangkaian baris statemen dari bariske19hingga24danbariske26hingga31(yangterdapatpadasource-codedasar), sehinggamasing-masing akan menjadim=A[2][0]/A[0][0]for i in range(0,5):A[2][i]=A[2][i]-m*A[0][i]danm=A[3][0]/A[0][0]for i in range(0,5):A[3][i]=A[3][i]-m*A[0][i]Ternyata, pola yang sama juga masih bisa ditemui (pada source-code dasar) hingga baris state-men ke 56. Dengan demikian, setidaknya, tahapan pertama ini akan menghasil source-code baruhasil optimasi awal yaitu1 from numpy import array,zeros23 #~~~~~~inisialisasi matrik augment~~~~~#4 A = array([[1.,1.,0.,3.,4],\5 [2.,1.,-1.,1.,1],\6 [3.,-1.,-1.,2.,-3],\7 [-1.,2.,3.,-1,4]])4.3. MATRIK DAN ELIMINASI GAUSS DALAM PYTHON 518 print A910 #~~~~~~proses triangularisasi~~~~~~~~~~#11 #-----menghilangkan x1 dari P2 dst-----#1213 m=A[1][0]/A[0][0]14 for i in range(0,5):15 A[1][i]=A[1][i]-m*A[0][i]1617 m=A[2][0]/A[0][0]18 for i in range(0,5):19 A[2][i]=A[2][i]-m*A[0][i]2021 m=A[3][0]/A[0][0]22 for i in range(0,5):23 A[3][i]=A[3][i]-m*A[0][i]2425 #-----menghilangkan x2 dari P3 dst-----#2627 m=A[2][1]/A[1][1]28 for i in range(0,5):29 A[2][i]=A[2][i]-m*A[1][i]3031 m=A[3][1]/A[1][1]32 for i in range(0,5):33 A[3][i]=A[3][i]-m*A[1][i]3435 #-----menghilangkan x3 dari P4 dst-----#3637 m=A[3][2]/A[2][2]38 for i in range(0,5):39 A[3][i]=A[3][i]-m*A[2][i]4041 print A4243 #~~~~~~proses substitusi-mundur~~~~~~~~#4445 X = zeros((4,1))4647 X[3][0]=A[3][4]/A[3][3]48 X[2][0]=(A[2][4]-A[2][3]*X[3][0])/A[2][2]49 X[1][0]=(A[1][4]-(A[1][2]*X[2][0]+A[1][3]*X[3][0]))/A[1][1]50 X[0][0]=(A[0][4]-(A[0][1]*X[1][0]+A[0][2]*X[2][0]+A[0][3]*X[3][0]))/A[0][0]5152 print XSekarang, source-code eliminasi gauss telah mengecil menjadi hanya 52 baris statemen saja (se-belumnya ada 69 baris statemen). Namun ini belum merupakan akhir proses optimasi. Source-code yang terakhir ini masih bisa dioptimasi kembali.Cobaandaperhatikanpolayangnampakmulaipadabarisstatemenke-13hinggake-39.Optimasi tahap dua dilakukan untuk menyederhanakan bagian tersebut, yaitufor j in range(1,4):m=A[j][0]/A[0][0]for i in range(0,5):A[j][i]=A[j][i]-m*A[0][i]52 BAB 4. METODE ELIMINASI GAUSS#-----menghilangkan x2 dari P3 dst-----#for j in range(2,4):m=A[j][1]/A[1][1]for i in range(0,5):A[j][i]=A[j][i]-m*A[1][i]#-----menghilangkan x3 dari P4 dst-----#for j in range(3,4):m=A[j][2]/A[2][2]for i in range(0,5):A[j][i]=A[j][i]-m*A[2][i]Dengan demikian source-code keseluruhan menjadi1 from numpy import array,zeros23 #~~~~~~inisialisasi matrik augment~~~~~#4 A = array([[1.,1.,0.,3.,4],\5 [2.,1.,-1.,1.,1],\6 [3.,-1.,-1.,2.,-3],\7 [-1.,2.,3.,-1,4]])8 print A910 #~~~~~~proses triangularisasi~~~~~~~~~~#11 #-----menghilangkan x1 dari P2 dst-----#12 for j in range(1,4):13 m=A[j][0]/A[0][0]14 for i in range(0,5):15 A[j][i]=A[j][i]-m*A[0][i]1617 #-----menghilangkan x2 dari P3 dst-----#18 for j in range(2,4):19 m=A[j][1]/A[1][1]20 for i in range(0,5):21 A[j][i]=A[j][i]-m*A[1][i]2223 #-----menghilangkan x3 dari P4 dst-----#24 for j in range(3,4):25 m=A[j][2]/A[2][2]26 for i in range(0,5):27 A[j][i]=A[j][i]-m*A[2][i]2829 print A3031 #~~~~~~proses substitusi-mundur~~~~~~~~#3233 X = zeros((4,1))3435 X[3][0]=A[3][4]/A[3][3]36 X[2][0]=(A[2][4]-A[2][3]*X[3][0])/A[2][2]37 X[1][0]=(A[1][4]-(A[1][2]*X[2][0]+A[1][3]*X[3][0]))/A[1][1]38 X[0][0]=(A[0][4]-(A[0][1]*X[1][0]+A[0][2]*X[2][0]+A[0][3]*X[3][0]))/A[0][0]3940 print XHasil optimasi pada tahap kedua ini baru mampu mengecilkan source-code menjadi hanya 404.3. MATRIK DAN ELIMINASI GAUSS DALAM PYTHON 53baris statemen saja. Sekarang perhatikan baris statemen ke-12 hingga ke-27. Saya bisa letakkanindeks k disanak=0for j in range(1,4):m=A[j][k]/A[k][k]for i in range(0,5):A[j][i]=A[j][i]-m*A[k][i]#-----menghilangkan x2 dari P3 dst-----#k=1for j in range(2,4):m=A[j][k]/A[k][k]for i in range(0,5):A[j][i]=A[j][i]-m*A[k][i]#-----menghilangkan x3 dari P4 dst-----#k=2for j in range(3,4):m=A[j][k]/A[k][k]for i in range(0,5):A[j][i]=A[j][i]-m*A[k][i]Bagian ini bisa diotak-atik sedikit menjadik=0for j in range(k+1,4):m=A[j][k]/A[k][k]for i in range(0,5):A[j][i]=A[j][i]-m*A[k][i]#-----menghilangkan x2 dari P3 dst-----#k=1for j in range(k+1,4):m=A[j][k]/A[k][k]for i in range(0,5):A[j][i]=A[j][i]-m*A[k][i]#-----menghilangkan x3 dari P4 dst-----#k=2for j in range(k+1,4):m=A[j][k]/A[k][k]for i in range(0,5):A[j][i]=A[j][i]-m*A[k][i]selanjutnya dioptimasi menjadifor k in range(0,3):for j in range(k+1,4):m=A[j][k]/A[k][k]for i in range(0,5):A[j][i]=A[j][i]-m*A[k][i]dan source-code yang tadinya ada 40 baris statemen, sekarang berubah menjadi hanya 28 barisstatemen saja54 BAB 4. METODE ELIMINASI GAUSS1 from numpy import array,zeros23 #~~~~~~inisialisasi matrik augment~~~~~#4 A = array([[1.,1.,0.,3.,4],\5 [2.,1.,-1.,1.,1],\6 [3.,-1.,-1.,2.,-3],\7 [-1.,2.,3.,-1,4]])8 print A910 #~~~~~~proses triangularisasi~~~~~~~~~~#11 for k in range(0,3):12 for j in range(k+1,4):13 m=A[j][k]/A[k][k]14 for i in range(0,5):15 A[j][i]=A[j][i]-m*A[k][i]1617 print A1819 #~~~~~~proses substitusi-mundur~~~~~~~~#2021 X = zeros((4,1))2223 X[3][0]=A[3][4]/A[3][3]24 X[2][0]=(A[2][4]-A[2][3]*X[3][0])/A[2][2]25 X[1][0]=(A[1][4]-(A[1][2]*X[2][0]+A[1][3]*X[3][0]))/A[1][1]26 X[0][0]=(A[0][4]-(A[0][1]*X[1][0]+A[0][2]*X[2][0]+A[0][3]*X[3][0]))/A[0][0]2728 print XBagian proses triangularisasi yang semula terdiri atas banyak baris statemen, sekarang dapatdiwakil