Optimasi Matrik dan Eliminasi Gauss dalam Python

52 BAB 4. METODE ELIMINASI GAUSS 25 26 X[2,0]=A[2,4]-A[2,3]X[3,0]A[2,2] 27 X[1,0]=A[1,4]-A[1,2]X[2,0]+A[1,3]X[3,0]A[1,1] 28 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] 29 30 print X Selanjutnya, saya memilih mulai dari baris statemen ke-28, dimana sedikit perubahan dilakukan padanya ~~~~~~proses substitusi-mundur~~~~~~~~ X = zeros4,1 X[n-1,0]=A[n-1,n]A[n-1,n-1] X[2,0]=A[2,4]-A[2,3]X[3,0]A[2,2] X[1,0]=A[1,4]-A[1,2]X[2,0]+A[1,3]X[3,0]A[1,1] S=0 for i in range1,4: S=S+A[0,i]X[i,0] X[0,0]=A[0,4]-SA[0,0] print X Kemudian diikuti oleh perubahan dengan pola yang sama yang diterapakan pada baris state- men 27 dan 26 ~~~~~~proses substitusi-mundur~~~~~~~~ X = zeros4,1 X[n-1,0]=A[n-1,n]A[n-1,n-1] S=0 for i in range3,4: S=S+A[2,i]X[i,0] X[2,0]=A[2,4]-SA[2,2] S=0 for i in range2,4: S=S+A[1,i]X[i,0] X[1,0]=A[1,4]-SA[1,1] S=0 for i in range1,4: S=S+A[0,i]X[i,0] X[0,0]=A[0,4]-SA[0,0] Sebelum dilanjut, semua angka 4 diganti oleh variabel n ~~~~~~proses substitusi-mundur~~~~~~~~ X = zerosn,1 4.4. MATRIK DAN ELIMINASI GAUSS DALAM PYTHON 53 X[n-1,0]=A[n-1,n]A[n-1,n-1] S=0 for i in range3,n: S=S+A[2,i]X[i,0] X[2,0]=A[2,n]-SA[2,2] S=0 for i in range2,n: S=S+A[1,i]X[i,0] X[1,0]=A[1,n]-SA[1,1] S=0 for i in range1,n: S=S+A[0,i]X[i,0] X[0,0]=A[0,n]-SA[0,0] Lalu kita nyatakan indeks j seperti ini ~~~~~~proses substitusi-mundur~~~~~~~~ X = zerosn,1 X[n-1,0]=A[n-1,n]A[n-1,n-1] j=2 S=0 for i in rangej+1,n: S=S+A[j,i]X[i,0] X[j,0]=A[j,n]-SA[j,j] j=1 S=0 for i in rangej+1,n: S=S+A[j,i]X[i,0] X[j,0]=A[j,n]-SA[j,j] j=0 S=0 for i in rangej+1,n: S=S+A[j,i]X[i,0] X[j,0]=A[j,n]-SA[j,j] Inilah yang akhirnya dioptimasi menjadi for j in range2,-1,-1: S=0 for i in rangej+1,n: S=S+A[j,i]X[i,0] X[j,0]=A[j,n]-SA[j,j] lalu dinyatakan dalam n for j in rangen-2,-1,-1: S=0 54 BAB 4. METODE ELIMINASI GAUSS for i in rangej+1,n: S=S+A[j,i]X[i,0] X[j,0]=A[j,n]-SA[j,j] Setelah melalui proses optimasi yang cukup melelahkan, source-code hasil akhir optimasi adalah seperti berikut ini 1 from numpy import array, zeros 2 3 ~~~~~~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 A 9 10 ===== METODE ELIMINASI GAUSS ========= 11 n=lenA 12 ~~~~~~proses triangularisasi~~~~~~~~~~ 13 for k in range0,n-1: 14 for i in rangek+1,n: 15 m=A[i,k]A[k,k] 16 for j in range0,n+1: 17 A[i,j]=A[i,j]-mA[k,j] 18 19 ~~~~~~proses substitusi-mundur~~~~~~~~ 20 X = zerosn,1 21 X[n-1,0]=A[n-1,n]A[n-1,n-1] 22 for j in rangen-2,-1,-1: 23 S=0 24 for i in rangej+1,n: 25 S=S+A[j,i]X[i,0] 26 X[j,0]=A[j,n]-SA[j,j] 27 ====================================== 28 print X Fantastis Sekarang jumlah statemen baris-nya hanya 28. Padahal source-code dasarnya ter- diri dari 69 baris statemen.

4.4.6 Jangan puas dulu..

Walaupun memiliki jumlah baris statemen yang lebih sedikit, source-code ini masih mengan- dung bug yang bisa berakibat fatal. Sekarang coba anda ganti angka-angka pada bagian in- isialisasi matrik menjadi angka-angka baru yang disesuaikan dengan sistem persamaan linear berikut ini P 1 : x − x 1 + 2x 2 − x 3 = -8 P 2 : 2x − 2x 1 + 3x 2 − 3x 3 = -20 P 3 : x + x 1 + x 2 = -2 P 4 : x − x 1 + 4x 2 + 3x 3 = 4 Saya jamin source code yang tadi akan berhenti sebelum tugasnya selesai. Artinya ia gagal menjalankan tugas mencari solusi sistem persamaan linear. Mengapa bisa begitu? 4.4. MATRIK DAN ELIMINASI GAUSS DALAM PYTHON 55

4.4.7 Pivoting

Pada baris ke-15, yang merupakan bagian dari proses triangularisasi dalam source code di atas, terdapat m=A[i,k]A[k,k] elemen A[k, k] tentunya tidak boleh bernilai nol. Jika itu terjadi, maka proses triangularisasi otomatis akan berhenti dan itu sekaligus menggagalkan metode eliminasi Gauss. Dilihat dari indeks-nya yang kembar yaitu [k, k], maka tidak diragukan lagi bahwa ia pasti menempati posisi di elemen diagonal. Nama lain elemen ini adalah elemen pivot. Jadi apa yang harus dilakukan jika secara tidak disengaja didalam aliran proses terdapat elemen pivot yang bernilai nol? Salah satu cara untuk mengatasinya adalah dengan menukar seluruh elemen yang se- baris dengan elemen diagonal bernilai nol. Ia harus ditukar posisinya dengan baris yang ada dibawahnya, sampai elemen diagonal matrik menjadi tidak nol, a ii 6= 0. Cara ini disebut pivot- ing 3 . Penambahan proses pivoting kedalam source code eliminasi Gauss dimulai dari baris ke-15 sampai baris ke-20 berikut ini 1 from numpy import array, zeros 2 3 ~~~~~~inisialisasi matrik augment~~~~~ 4 A = array[[1.,-1.,2.,-1.,-8.],\ 5 [2.,-2.,3.,-3.,-20],\ 6 [1.,1.,1.,0.,-2],\ 7 [1.,-1.,4.,3,4]] 8 print A 9 10 ===== METODE ELIMINASI GAUSS ========= 11 n=lenA 12 ~~~~~~proses triangularisasi~~~~~~~~~~ 13 for k in range0,n-1: 14 -----proses pivot dari sini---------- 15 if A[k,k]==0: 16 for s in range0,n+1: 17 v=A[k,s] 18 u=A[k+1,s] 19 A[k,s]=u 20 A[k+1,s]=v 21 -----proses pivot sampai sini---------- 22 for i in rangek+1,n: 23 m=A[i,k]A[k,k] 24 for j in range0,n+1: 25 A[i,j]=A[i,j]-mA[k,j] 26 27 ~~~~~~proses substitusi-mundur~~~~~~~~ 28 X = zerosn,1 29 X[n-1,0]=A[n-1,n]A[n-1,n-1] 30 for j in rangen-2,-1,-1: 31 S=0 32 for i in rangej+1,n: 33 S=S+A[j,i]X[i,0] 3 Catatan singkat dan source code mengenai pivoting sudah diterangkan di Bab-2