LU DECOMPOSITION
(FAKTORISASI MATRIK)
Dr. Eng. Supriyanto, M.Sc
Lab. Komputer, Departemen Fisika, Universitas Indonesia
email: supri@fisika.ui.ac.id atau supri92@gmail.com
5 Februari 2005
Pada semua catatan yang terdahulu, telah diulas secara panjang lebar bahwa sistem persamaan linear dapat dicari solusinya secara langsung dengan metode eliminasi gauss. Namun perlu juga diketahui bahwa eliminasi gauss bukan satu-satunya metode dalam mencari solusi sistem persamaan linear, misalnya ada metode matrik inversi seperti yang dijelaskan pada catatan yang paling terakhir. Terlepas dari masalah in-efisiensi penye-lesaiannya, yang jelas metode invers matrik bisa digunakan untuk menyelesaikan sistem persamaan linear.
Nah, pada catatan kali ini, saya ingin mengetengahkan sebuah metode yang lain untuk menyelesaikan sistem persamaan linear, yaitu metode faktorisasi matrik yang umum dikenal sebagai LU-decomposition. Metode ini sekaligus menjadi pengantar menuju metode Singular Value Decomposition, (SVD), suatu metode yang saat ini paling “han-dal” dalam menyelesaikan sistem persamaan linear dan merupakan bagian dari metode
least square.
Seperti biasa, kita berasumsi bahwa sistem persamaan linear dapat dinyatakan dalam operasi matrik
Ax = b (1)
Pada metode LU-decomposition, matrik A difaktorkan menjadi matrik L dan matrik U, dimana dimensi atau ukuran matrik L dan U harus sama dengan dimensi matrik A. Atau
dengan kata lain, hasil perkalian matrik L dan matrik U adalah matrik A,
A = LU (2)
sehingga persamaan (1) menjadi
LUx = b
Langkah penyelesaian sistem persamaan linear dengan metode LU-decomposition, di-awali dengan menghadirkan vektor y dimana,
Ux = y (3)
Langkah tersebut tidak bermaksud untuk menghitung vektor y, melainkan untuk menghi-tung vektor x. Artinya, sebelum persamaan (3) dieksekusi, nilai-nilai yang menempati elemen-elemen vektor y harus sudah diketahui. Lalu bagaimana cara memperoleh vektor
y? Begini caranya,
Ly = b (4)
Kesimpulannya, metode LU-decomposition dilakukan dengan tiga langkah sebagai berikut: • Melakukan faktorisasi matrik A menjadi matrik L dan matrik U → A = LU.
• Menghitung vektor y dengan operasi matrik Ly = b. Ini adalah proses
forward-substitution atau substitusi-maju.
• Menghitung vektor x dengan operasi matrik Ux = y. Ini adalah proses
backward-substitution atau substitusi-mundur.
Metode LU-decomposition bisa dibilang merupakan modifikasi dari eliminasi gauss, karena beberapa langkah yang mesti dibuang pada eliminasi gauss, justru harus dipakai oleh LU-decomposition. Untuk lebih jelasnya, perhatikan contoh berikut ini. Diketahui sistem persamaan linear sebagai berikut
P1 : x1 + x2 + 3x4 = 4
P2 : 2x1 + x2 − x3 + x4 = 1
P3 : 3x1 − x2 − x3 + 2x4 = -3
Sistem tersebut dapat dinyatakan dalam operasi matrikAx = y, ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 1 0 3 2 1 −1 1 3 −1 −1 2 −1 2 3 −1 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ x1 x2 x3 x4 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦= ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 4 1 −3 4 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ (5)
Pada metode eliminasi gauss, matrik A dikonversi menjadi matrik triangular melalui uru-tan operasi-operasi berikut: (P2− 2P1) → (P2), (P3− 3P1) → (P3), (P4− (−1)P1) → (P4), (P3 − 4P2) → (P3), (P4 − (−3)P2) → (P4). Disisi lain, vektor b ikut berubah
nilainya menyesuaikan proses triangularisasi, ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 1 0 3 0 −1 −1 −5 0 0 3 13 0 0 0 −13 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ x1 x2 x3 x4 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦= ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 4 −7 13 −13 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ (6)
Lain halnya dengan metode LU-decomposition dimana vektor b tidak mengalami peruba-han. Yang berubah hanya matrik A saja, yaitu menjadi matrik L dan matrik U,A = LU
A = ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 1 0 3 2 1 −1 1 3 −1 −1 2 −1 2 3 −1 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦= ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 0 0 0 2 1 0 0 3 4 1 0 −1 −3 0 1 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 1 0 3 0 −1 −1 −5 0 0 3 13 0 0 0 −13 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ Jadi matrik L dan U masing-masing adalah
L = ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 0 0 0 2 1 0 0 3 4 1 0 −1 −3 0 1 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ U = ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 1 0 3 0 −1 −1 −5 0 0 3 13 0 0 0 −13 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦
Coba bandingkan matrik U di atas dengan matrik hasil triangularisasi dari metode elim-inasi gauss pada persamaan (6), sama persis bukan? Jadi, cara memperoleh matrik U adalah dengan proses triangularisasi! Lantas, bagaimana cara memperoleh matrik L? Be-gini caranya: (1) elemen-elemen diagonal matrik L diberi nilai 1 (Asal tahu saja, cara ini dikenal dengan metode Doolittle). (2) elemen-elemen matrik L yang berada di atas elemen-elemen diagonal diberi nilai 0. (3) sedangkan, elemen-elemen matrik L yang be-rada di bawah elemen-elemen diagonal diisi dengan faktor pengali yang digunakan pada
proses triangularisasi eliminasi gauss. Misalnya pada operasi(P2− 2P1) → (P2), maka faktor pengalinya adalah 2; pada operasi (P3 − 3P1) → (P3), maka faktor pengalinya adalah3, dan seterusnya.
Inilah letak perbedaannya, seluruh faktor pengali tersebut sangat dibutuhkan pada metode LU-decomposition untuk membentuk matrik L. Padahal dalam metode eliminasi gauss, seluruh faktor pengali tersebut tidak dimanfaatkan alias dibuang begitu saja. Di-sisi lain, vektor b tidak mengalami proses apapun sehingga nilainya tetap. Jadi, proses konversi matrik pada metode LU-decomposition hanya melibatkan matrik A saja!
Setelah langkah faktorisasi matrik A dilalui, maka operasi matrik pada persamaan (5) menjadi, ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 0 0 0 2 1 0 0 3 4 1 0 −1 −3 0 1 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 1 0 3 0 −1 −1 −5 0 0 3 13 0 0 0 −13 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ x1 x2 x3 x4 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦= ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 4 1 −3 4 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ (7)
Langkah berikutnya adalah menentukan vektor y, dimanaLy = b, ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 0 0 0 2 1 0 0 3 4 1 0 −1 −3 0 1 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ y1 y2 y3 y4 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦= ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 4 1 −3 4 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦
Dengan proses substitusi-maju, elemen-elemen vektor y dapat ditentukan, y1 = 4,
2y1+ y2 = 1,
3y1+ 4y2+ y3 = −3,
−y1− 3y2+ y4 = 4
maka diperolehy1 = 4, y2= −7, y3 = 13, y4 = −13.
Langkah terakhir adalah proses substitusi-mundur untuk menghitung vektor x, dimana Ux = y, ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 1 0 3 0 −1 −1 −5 0 0 3 13 0 0 0 −13 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ x1 x2 x3 x4 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦= ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 4 −7 13 −13 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦
Melalui proses ini, yang pertama kali didapat solusinya adalah x4, kemudian x3, lalu diikutix2, dan akhirnyax1.
x4 = 1
x3 = 13(13 − 13x4) = 0
x2 = −(−7 + 5x4+ x3) = 2
x1 = 4 − 3x4 − x2 = −1
akhirnya diperoleh solusi x1 = −1, x2 = 2, x3 = 0, dan y4 = 1. Demikianlah contoh penyelesaian sistem persamaan linear dengan metode LU-decomposition.
Sekali matrik A difaktorkan, maka vektor b bisa diganti nilainya sesuai dengan sistem persamaan linear yang lain, misalnya seluruh nilai di ruas kanan diganti menjadi
P1 : x1 + x2 + 3x4 = 8
P2 : 2x1 + x2 − x3 + x4 = 7
P3 : 3x1 − x2 − x3 + 2x4 = 14
P4 : −x1 + 2x2 + 3x3 − x4 = -7
Dalam operasi matrik menjadi ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 1 0 3 2 1 −1 1 3 −1 −1 2 −1 2 3 −1 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ x1 x2 x3 x4 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦= ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 8 7 14 −7 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ (8)
Perhatikan baik-baik! Matrik A sama persis dengan contoh sebelumnya. Perbedaannya hanya pada vektor b. Selanjutnya, dengan metode LU-decomposition, persamaan (8) menjadi ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 0 0 0 2 1 0 0 3 4 1 0 −1 −3 0 1 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 1 1 0 3 0 −1 −1 −5 0 0 3 13 0 0 0 −13 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ x1 x2 x3 x4 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦= ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ 8 7 14 −7 ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ (9)
Silakan anda lanjutkan proses perhitungannya dengan mencari vektor y sesuai contoh yang telah diberikan sebelumnya. Pada akhirnya akan diperoleh solusi sebagai berikut: x1 = 3, x2 = −1, x3 = 0, dan y4 = 2.
Sekarang saatnya saya tunjukkan algoritma metode LU decomposition. Algoritma ini dibuat untuk menyelesaikan sistem persamaan linear, dengan cara menfaktorkan matrik A = (aij) berukuran n x n menjadi matrik L = (lij) dan matrik U = (uij) dengan ukuran yang sama. Algoritma LU-decomposition yang anda lihat sekarang merupakan modifikasi dari algoritma eliminasi gauss. Silakan anda periksa langkah-langkah mana saja yang telah mengalami modifikasi! Tapi asal tahu saja bahwa ini bukan satu-satunya algoritma untuk mendapatkan matrik LU. Sejauh yang saya tahu, ada algoritma lain untuk tujuan yang sama, dimana algoritma tersebut membutuhkan matrik permutasi untuk menggeser elemen pivot yang bernilai nol agar terhindar dari singular. Nah, sedangkan algoritma yang akan anda baca saat ini, sama sekali tidak “berurusan” dengan matrik permutasi. Algoritma ini cuma memanfaatkan “trik” tukar posisi yang sudah pernah dibahas di awal-awal catatan khususnya ketika membahas konsep eliminasi gauss.
Satu lagi yang harus saya sampaikan juga adalah bahwa dalam algoritma ini, elemen matrik L dan matrik U digabung jadi satu dan menggantikan seluruh elemen-elemen matrik A. Perhatian! cara ini jangan diartikan sebagai perkalian matrik L dan matrik U menjadi matrik A kembali. Cara ini dimaksudkan untuk menghemat memori komputer. Suatu aspek yang tidak boleh diabaikan oleh para programer. Marilah kita simak algoritmanya bersama-sama!
INPUT: dimensin; nilai elemen aij,1 ≤ i, j ≤ n; nilai elemen bi.
OUTPUT: solusi x1, x2, x3, ..., xn atau pesan kesalahan yang mengatakan bahwa fak-torisasi tidak mungkin dilakukan.
• Langkah 1: Inputkan konstanta-konstanta dari sistem persamaan linear kedalam elemen-elemen matrik A dan vektor b, seperti berikut ini:
A = ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ a11 a12 . . . a1n a21 a22 . . . a2n .. . ... ... an1 an2 . . . ann ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ b = ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ b1 b2 .. . bn ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ (10)
• Langkah 2: Untuk i = 1, ..., n − 1, lakukan Langkah 3 sampai Langkah 5.
• Langkah 3: Definisikan p sebagai integer dimana i ≤ p ≤ n. Lalu pastikan bahwa api = 0. Langkah dilakukan bila ditemukan elemen diagonal yang bernilai nol (aii = 0). Ketika ada elemen diagonal yang bernilai nol, maka
program harus mencari dan memeriksa elemen-elemen yang tidak bernilai nol dalam kolom yang sama dengan kolom tempat elemen diagonal tersebut be-rada. Jadi saat proses ini berlangsung, integer i (indeks dari kolom) dibuat konstan, sementara integer p (indeks dari baris) bergerak dari p = i sampai p = n. Bila ternyata setelah mencapai elemen paling bawah dalam kolom tersebut, yaitu saat p = n tetap didapat nilai api = 0, maka sebuah pesan dimunculkan:sistem persamaan linear tidak memiliki solusi yang unik. Lalu program berakhir: STOP.
• Langkah 4: Namun jika sebelum integer p mencapai nilai p = n sudah diper-oleh elemen yang tidak sama dengan nol (api = 0), maka bisa dipastikan p = i. Jika p = i maka lakukan proses pertukaran (Pp)↔ (Pi).
• Langkah 5: Untuk j = i + 1, .., n, lakukan Langkah 6 dan Langkah 7. • Langkah 6: Tentukan mji,
mji = aaji ii • Langkah 7: Lakukan proses triangularisasi,
(Pj − mjiPi) → (Pj) • Langkah 8: Nilai mji disimpan keaji,
aji = mji
• Langkah 9: Nilai b1dicopy key1, lalu lakukan substitusi-maju.
y1 = b1 Untuki = 2, ..., n tentukan xi, yi = bi− i−1 j=1 aijyj
• Langkah 10: Lakukan proses substitusi-mundur, dimulai dengan menentukan xn, xn= an,n+1a nn Untuki = n − 1, ..., 1 tentukan xi, xi = ai,n+1− n j=i+1aijxj aii
• Langkah 11: Diperoleh solusi yaitu x1, x2, ..., xn. Algoritma telah dijalankan den-gan sukses. STOP.
Algoritma di atas telah diimplementasi kedalam program yang ditulis dengan bahasa Fortran. Program tersebut sudah berhasil dikompilasi dengan visual fortran (windows) dan g77 (debian-linux). Inilah programnya:
DIMENSION A(10,11), B(10), Y(10), X(10) REAL MJI
WRITE(*,*)
WRITE(*,*) ’==> FAKTORISASI MATRIK: LU DECOMPOSITION <==’ WRITE (*,*)
C LANGKAH 1: MEMASUKAN NILAI ELEMEN-ELEMEN MATRIK A DAN VEKTOR B
WRITE (*,’(1X,A)’) ’JUMLAH PERSAMAAN ? ’ READ (*,*) N
WRITE (*,*)
WRITE (*,*) ’MASUKAN ELEMEN-ELEMEN MATRIK A’ DO 50 I = 1,N
DO 60 J = 1,N
WRITE (*,’(1X,A,I2,A,I2,A)’) ’A(’,I,’,’,J,’) = ’ READ (*,*) A(I,J)
60 CONTINUE
WRITE (*,’(1X,A,I2,A)’) ’B(’,I,’) ? ’ READ (*,*) B(I)
WRITE (*,*)
50 CONTINUE
WRITE (*,*)
C MENAMPILKAN MATRIK A
WRITE (*,’(1X,A)’) ’MATRIK A:’ DO 110 I = 1,N
WRITE (*,6) (A(I,J),J=1,N)
110 CONTINUE
WRITE (*,*)
C LANGKAH 2: MEMERIKSA ELEMEN-ELEMEN PIVOT
DO 10 I=1,NN
C LANGKAH 3: MENDEFINISIKAN P
P = I
100 IF (ABS(A(P,I)).GE.1.0E-20 .OR. P.GT.N) GOTO 200
P = P+1 GOTO 100
200 IF(P.EQ.N+1)THEN
C MENAMPILKAN PESAN TIDAK DAPAT DIFAKTORKAN
WRITE(*,8) GOTO 400 END IF
C LANGKAH 4: PROSES TUKAR POSISI
IF(P.NE.I) THEN DO 20 JJ=1,N C = A(I,JJ) A(I,JJ) = A(P,JJ) A(P,JJ) = C 20 CONTINUE END IF
C LANGKAH 5: PERSIAPAN PROSES TRIANGULARISASI
JJ = I+1 DO 30 J=JJ,N
C LANGKAH 6: TENTUKAN MJI
MJI = A(J,I)/A(I,I)
C LANGKAH 7: PROSES TRIANGULARISASI
DO 40 K=JJ,N
A(J,K) = A(J,K)-MJI*A(I,K)
40 CONTINUE
C LANGKAH 8: MENYIMPAN MJI KE A(J,I)
A(J,I) = MJI
30 CONTINUE
10 CONTINUE
C MENAMPILKAN MATRIK LU
DO 120 I = 1,N WRITE (*,6) (A(I,J),J=1,N) 120 CONTINUE WRITE (*,*) C LANGKAH 9: SUBSTITUSI-MAJU Y(1) = B(1) DO 15 I=2,N SUM = 0.0 DO 16 J=1,I-1 SUM = SUM+A(I,J)*Y(J) 16 CONTINUE Y(I) = B(I)-SUM 15 CONTINUE C MENAMPILKAN VEKTOR Y
WRITE (*,’(1X,A)’) ’VEKTOR Y:’ DO 138 I = 1,N WRITE (*,6) Y(I) 138 CONTINUE WRITE (*,*) C LANGKAH 10: SUBSTITUSI-MUNDUR X(N) = Y(N)/A(N,N) DO 24 K=1,N-1 I = N-K JJ = I+1 SUM = 0.0 DO 26 KK=JJ,N SUM = SUM+A(I,KK)*X(KK) 26 CONTINUE X(I) = (Y(I)-SUM)/A(I,I) 24 CONTINUE
C LANGKAH 11: MENAMPILKAN SOLUSI DAN SELESAI
WRITE (*,’(1X,A)’) ’SOLUSI:’ DO 18 I = 1,N
18 CONTINUE WRITE(*,*)
WRITE(*,*) ’SELESAI --> SUKSES’ WRITE(*,*)
400 CONTINUE
6 FORMAT(1X,5(F14.8))
8 FORMAT(1X,’TIDAK DAPAT DIFAKTORKAN’)
END
Demikianlah, sekarang kita punya tiga buah algoritma untuk memecahkan problem sistem persamaan linear, yaitu eliminasi gauss, invers matrik, dan lu-decomposition. Di-antara ketiga-nya, eliminasi gauss adalah algoritma yang paling simpel dan efisien. Dia hanya butuh proses triangularisasi dan substitusi-mundur untuk mendapatkan solusi. Sedan-gkan dua algoritma yang lainnya membutuhkan proses-proses tambahan untuk mendap-atkan solusi yang sama.
Saya cukupkan sementara sampai disini. Insya Allah akan saya sambung lagi dilain waktu. Kalau ada yang mau didiskusikan, silakan hubungi saya melalui email.