Solusi Numerik Sistem Persamaan Linear Modul #2 Praktikum AS2205 Astronomi Komputasi Oleh Dr. Muhamad Irfan Hakim Program Studi Astronomi Fakultas Matematika dan Ilmu Pengetahuan Alam Institut Teknologi Bandung 2014
Daftar Isi Daftar Isi i 1 Pendahuluan 1 2 Algoritma 3 2.1 Eliminasi Gauss Sederhana....................... 3 2.2 Eliminasi Gauss-Jordan......................... 4 2.3 Eliminasi Gauss-Seidel.......................... 5 3 Praktikum 6 3.1 Indeks................................... 6 3.2 Konstruksi matriks............................ 6 3.3 Eliminasi Gauss.............................. 6 3.4 Metode iterasi Gauss-Seidel....................... 7 3.5 Selesaian dengan linalg.......................... 7 i
Bab 1 Pendahuluan Untuk pekerjaan komputasi SPL kali ini, ada beberapa konsep kunci pada python yang perlu kita ingat lagi: 1. Kecuali didefinisikan lain, by default, python menghitung indeks/counter mulai dari nol. Hal ini penting untuk memahami konstruksi matriks dalam python. 2. Pemesanan indeks j dari 3 ke 9 menggunakan sintaks: for j in range(3,10): Perhatikan angka 10! Bentuk lain lebih diperumum: for j in range(3,10,1): 3. pemesanan indeks j (mundur) dari 13 ke 9 menggunakan sintaks: Perhatikan angka 8! for j in range(13,8,-1): 4. Untuk manipulasi larik/array, modul numpy dapat digunakan dengan memanggilnya, misal import numpy as np 5. Contoh deklarasi matriks dengan objek np di atas: A = np.array([ [ 4.,-3.], [ 3., 1.] ]) C = np.array([25., -3., 21.]) dengan A[0][0] = 4, A[1][0] = 3, C[0] = 25, dan seterusnya. 1
Bab 1. Pendahuluan 6. Modul numpy menyediakan submodul linalg yang berisi sejumlah algoritma fungsi dan prosedur yang berkaitan dengan SPL, termasuk menghitung solusi SPL. Pada praktikum ini, submodul tersebut akan dicoba di bagian akhir. Di bagian awal, fokus praktikum pada eliminasi Gauss yang sederhana, eliminasi Gauss-Jordan, dan iterasi Gauss-Seidel. Metode penumpuan (pivoting) di praktikum ini tidak dicobakan, tapi menjadi bahan belajar mandiri di luar kelas/lab. Institut Teknologi Bandung 2
Bab 2 Algoritma 2.1 Eliminasi Gauss Sederhana Input: n, [A] ukuran n n, [C] ukuran n 1 Proses: 1. Eliminasi maju for column k = 1 to n 1: for row j = k +1 to n: m a jk /a kk a jk 0 # m hanyalah skalar c j c j m c k for i = k+1 to n: a ji a ji m a ki 2. Substitusi mundur for all row j = n down to 1: if j < n: for column k = n down to j +1: c j c j a jk x k x j c j /a jj Output: x j, j = 1, 2,..., n 3
Bab 2. Algoritma 2.2. Eliminasi Gauss-Jordan 2.2 Eliminasi Gauss-Jordan Input: n, [A] ukuran n n, [C] ukuran n 1 Proses: for all column k = 1 to n: c k c k /a kk for column l = k +1 to n: a kl a kl /a kk for row j = 1 to n: if row j k: m a jk /a kk a jk 0 # m hanyalah skalar c j c j m c k for column i = k+1 to n: Output: x k c k, a kk 1 k = 1, 2,..., n a ji a ji m a ki Institut Teknologi Bandung 4
Bab 2. Algoritma 2.3. Eliminasi Gauss-Seidel 2.3 Eliminasi Gauss-Seidel Diasumsikan matriks [A] dominan secara diagonal. Input: n, [A] ukuran n n, [C] ukuran n 1, tebakan awal x j, j = 1,..., n, ketelitian ǫ, maksimum iterasi M Proses: for iterasi = 1 to M: 1. δ 0 2. for i = 1 to n: (a) x new c i (b) for j = 1 to n: if j i: x new x new a ij x j (c) x new x new /a ii (d) δ xnew x i x new (e) x i x new 3. if δ ǫ: done # selesai Output: x j, j = 1,..., n Iterasi tak konvergen bila (δ > ǫ) dan (iterasi > M) Institut Teknologi Bandung 5
Bab 3 Praktikum 3.1 Indeks Cobakan dengan python for j in range(3,10,1): print j for k in range(13,8,-1): print k 3.2 Konstruksi matriks import numpy as np A = np.array([ [ 2., 3.], [ 4.,-4.] ]) print( \n[a] = ); print(a) print( \na[0][1] = %g % A[0][1]) C = np.array([51., 31., 11.]) print( \n[c] = ); print(c) print( \nc[0] = ); print(c[0]) 3.3 Eliminasi Gauss 1. Konstruksikan matriks perluasan A = np.array([ [ 2., 3., -1., 5.], [ 4., 4., -3., 3.], [-2., 3., -1., 1.] ]) 6
Bab 3. Praktikum 3.4. Metode iterasi Gauss-Seidel 2. Tuliskan langkah-langkah untuk eliminasi maju dalam bahasa python. 3. Tuliskan pula untuk substitusi balik. Untuk pengecekan, solusi analitik adalah [X] = [1.,2.,3.] 4. Bila sudah berjalan dengan benar dan sesuai, lakukan eliminasi dengan metode Gauss-Jordan. 3.4 Metode iterasi Gauss-Seidel Setelah metode Gauss-Jordan, terapkan metode Gauss-Seidel sambil mencoba metode selesaian dari submodul linalg di pasal berikutnya. Untuk metode iteratif Gauss-Seidel, SPL 4 persamaan yang akan diselesaikan dikonstruksi dalam matriks perluasan berikut ini: A = np.array([ [10.,-1., 2., 0., 6.], [-1.,11., -1., 3., 25.], [ 2.,-1., 10.,-1.,-11.], [ 0., 3., -1., 8., 15.] ]) hingga tercapai x new x i x new < ǫ, ǫ = 10 3 atau hingga iterasi maksimum M tercapai. Sebagai informasi, solusi SPL ini adalah [X] = [1.,2., 1.,1.] 3.5 Selesaian dengan linalg # Solusi numerik SPL: AX = C menggunakan algoritma SPL dari numpy import numpy as np from numpy.linalg import * A = np.array([ [ 2., 3., -1.], [ 4., 4., -3.], [-2., 3., -1.] ]) print( \n[a] = ); print(a) print( \na[1][2] = %g % A[1][2]) C = np.array([5., 3., 1.]) Institut Teknologi Bandung 7
Bab 3. Praktikum 3.5. Selesaian dengan linalg print( \n[c] = ); print(c) print( \nc[0] = ); print(c[0]) X = np.linalg.solve(a, C) print( \n[x] = ); print(x) # solusi print( ); print( Cek! Benar? ) Z = np.allclose(np.dot(a, X), C) print(z) Institut Teknologi Bandung 8