Command Palette

Search for a command to run...

Metode Linear AI

LU Dekomposisi

Apa itu Dekomposisi LU?

Dekomposisi LU adalah singkatan dari Lower-Upper decomposition atau dekomposisi Lower-Upper. Nama ini berasal dari dua matriks hasil dekomposisi:

  • L (Lower) = Matriks segitiga bawah yang memiliki elemen nol di atas diagonal utama
  • U (Upper) = Matriks segitiga atas yang memiliki elemen nol di bawah diagonal utama

Mengapa kita memerlukan dekomposisi ini? Karena menyelesaikan sistem persamaan linear dengan matriks segitiga jauh lebih mudah daripada dengan matriks biasa.

Konsep Dasar Dekomposisi LU

Dekomposisi LU adalah cara memecah matriks menjadi perkalian dua matriks yang lebih sederhana. Bayangkan kita memiliki teka-teki yang rumit, lalu kita bongkar menjadi kepingan-kepingan yang lebih mudah disusun kembali.

Untuk matriks AA yang diberikan, kita mendapatkan:

PA=LUP \cdot A = L \cdot U

Di mana PP adalah matriks permutasi (pengatur urutan baris), LL adalah matriks segitiga bawah, dan UU adalah matriks segitiga atas.

Eliminasi Gauss menghitung dekomposisi LU ini melalui serangkaian operasi baris yang sistematis. Proses ini dapat dituliskan sebagai:

U=LrPrL3P3L2P2L1P1AU = L_r \cdot P_r \cdot \ldots \cdot L_3 \cdot P_3 \cdot L_2 \cdot P_2 \cdot L_1 \cdot P_1 \cdot A

dengan i=1,,ri = 1, \ldots, r, matriks pertukaran baris PiP_i atau Pi=IP_i = I dan matriks eliminasi:

Li=(1λi+1iλmi1)L_i = \begin{pmatrix} 1 & & & \\ & \ddots & & \\ & & \lambda_{i+1i} & \\ & & \vdots & \ddots \\ & & \lambda_{mi} & & 1 \end{pmatrix}

Invers dari LiL_i adalah:

Li1=(1λi+1iλmi1)L_i^{-1} = \begin{pmatrix} 1 & & & \\ & \ddots & & \\ & & -\lambda_{i+1i} & \\ & & \vdots & \ddots \\ & & -\lambda_{mi} & & 1 \end{pmatrix}

Karena Pi1=PiP_i^{-1} = P_i, kita dapat menulis ulang rangkaian operasi ini menjadi bentuk yang lebih sederhana hingga akhirnya mendapatkan L1PA=UL^{-1} \cdot P \cdot A = U.

Struktur Hasil Dekomposisi

Dari eliminasi Gauss dengan langkah-langkah j1,,jrj_1, \ldots, j_r, kita mendapatkan tiga matriks dengan struktur khusus:

(0u1j1u1nl2100u2j2u2nl31l320000urjrurml(r+1)r00000000lm1lm2lmr0000)\begin{pmatrix} 0 & u_{1j_1} & \cdots & & \cdots & u_{1n} \\ l_{21} & 0 & 0 & u_{2j_2} & \cdots & u_{2n} \\ l_{31} & l_{32} & 0 & 0 & \ddots & \\ \vdots & \vdots & \ddots & 0 & 0 & u_{rj_r} \cdots u_{rm} \\ & & & l_{(r+1)r} & 0 & 0 & 0 & 0 \\ \vdots & \vdots & & \vdots & 0 & 0 & 0 & 0 \\ l_{m1} & l_{m2} & \cdots & l_{mr} & 0 & 0 & 0 & 0 \end{pmatrix}

Matriks PP diperoleh dari penerapan vektor permutasi pp pada baris-baris matriks identitas. Ketiga matriks memiliki sifat:

  1. UU adalah matriks segitiga atas dalam bentuk baris bertingkat dengan peringkat rr
  2. LL adalah matriks segitiga bawah reguler dengan 1 pada diagonal
  3. PP adalah matriks permutasi dengan P1=PTP^{-1} = P^T

Langkah Eliminasi Gauss

Mari kita lihat contoh konkret. Bayangkan kita sedang membersihkan rumah lantai demi lantai, mulai dari atas.

  1. Kolom pertama dengan elemen pivot a21=3a_{21} = 3. Kita tukar baris pertama dan kedua seperti menukar posisi furniture.

    A=(333302421231)A = \begin{pmatrix} 3 & 3 & 3 & 3 \\ 0 & 2 & 4 & 2 \\ 1 & 2 & 3 & 1 \end{pmatrix}
    r=1, Langkah ={1},p=(2,1,3),v=1r = 1, \text{ Langkah } = \{1\}, p = (2,1,3), v = 1

    Eliminasi entri lain pada kolom tersebut: λ21=0\lambda_{21} = 0, λ31=13\lambda_{31} = -\frac{1}{3}

  2. Kolom kedua dengan elemen pivot a22=2a_{22} = 2. Tidak ada pertukaran diperlukan.

    Eliminasi: λ32=12\lambda_{32} = -\frac{1}{2}

  3. Kolom ketiga tidak memiliki elemen pivot yang bisa digunakan.

  4. Kolom keempat dengan elemen pivot a34=1a_{34} = -1. Tidak ada operasi lagi diperlukan.

Hasil akhir:

r=3,Langkah={1,2,4},p=(2,1,3),v=1r = 3, \text{Langkah} = \{1, 2, 4\}, p = (2,1,3), v = 1

Dari hasil eliminasi ini, kita peroleh:

U=(333302420001)U = \begin{pmatrix} 3 & 3 & 3 & 3 \\ 0 & 2 & 4 & 2 \\ 0 & 0 & 0 & -1 \end{pmatrix}
L=(1000101/31/21)L = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 1/3 & 1/2 & 1 \end{pmatrix}
P=(010100001)P = \begin{pmatrix} 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{pmatrix}

Pembuktian menunjukkan bahwa LU=PAL \cdot U = P \cdot A untuk matriks AA yang diberikan awalnya.

Algoritma dan Kompleksitas

Algoritma eliminasi Gauss bekerja seperti pembersihan sistematis. Untuk setiap kolom, kita melakukan:

  1. Cari elemen pivot terbaik
  2. Tukar baris jika perlu
  3. Eliminasi elemen di bawah pivot
  4. Simpan informasi multiplier

Kompleksitas waktu untuk menghitung dekomposisi LU adalah 13n3+O(n2)\frac{1}{3}n^3 + O(n^2) operasi aritmatika. Pembuktian menunjukkan bahwa perkalian dan penjumlahan terjadi bersamaan dalam transformasi baris eliminasi aij:=aij+λirarla_{ij} := a_{ij} + \lambda_{ir} \cdot a_{rl}.

j=1ni=j+1nl=j+1n1=j=1n(nj)2\sum_{j=1}^n \sum_{i=j+1}^n \sum_{l=j+1}^n 1 = \sum_{j=1}^n (n-j)^2
=j=1n(n22nj+j2)= \sum_{j=1}^n (n^2 - 2nj + j^2)
=n32nj=1nj+j=1nj2= n^3 - 2n \sum_{j=1}^n j + \sum_{j=1}^n j^2
=n32nn(n+1)2+n(n+1)(2n+1)6= n^3 - 2n \frac{n(n+1)}{2} + \frac{n(n+1)(2n+1)}{6}
=n3n3+26n3+O(n2)= n^3 - n^3 + \frac{2}{6}n^3 + O(n^2)
=13n3+O(n2)= \frac{1}{3}n^3 + O(n^2)

Implementasi Algoritma dalam Python

Berikut adalah implementasi algoritma dekomposisi LU dalam Python:

Pythonlu_decomposition.py
import numpy as npdef lu_decomposition(A):  """  Melakukan dekomposisi LU dengan pemilihan pivot parsial  Masukan: Matriks A (n x n)  Keluaran: L, U, P (matriks Bawah, Atas, dan Permutasi)  """  n = A.shape[0]  U = A.copy().astype(float)  L = np.zeros((n, n))  P = np.eye(n)    for i in range(n):      max_row = i      for k in range(i + 1, n):          if abs(U[k, i]) > abs(U[max_row, i]):              max_row = k            if max_row != i:          U[[i, max_row]] = U[[max_row, i]]          P[[i, max_row]] = P[[max_row, i]]          if i > 0:              L[[i, max_row], :i] = L[[max_row, i], :i]            for k in range(i + 1, n):          if U[i, i] != 0:              factor = U[k, i] / U[i, i]              L[k, i] = factor              U[k, i:] = U[k, i:] - factor * U[i, i:]    np.fill_diagonal(L, 1)  return L, U, Pdef forward_substitution(L, b):  """  Substitusi maju untuk menyelesaikan L * y = b  """  n = len(b)  y = np.zeros(n)    for i in range(n):      y[i] = b[i] - np.dot(L[i, :i], y[:i])    return ydef backward_substitution(U, y):  """  Substitusi mundur untuk menyelesaikan U * x = y  """  n = len(y)  x = np.zeros(n)    for i in range(n - 1, -1, -1):      if U[i, i] != 0:          x[i] = (y[i] - np.dot(U[i, i+1:], x[i+1:])) / U[i, i]    return xdef solve_linear_system(A, b):  """  Menyelesaikan sistem Ax = b menggunakan dekomposisi LU  """  L, U, P = lu_decomposition(A)  pb = np.dot(P, b)  y = forward_substitution(L, pb)  x = backward_substitution(U, y)  return x, L, U, P

Penyelesaian Sistem Linear

Setelah mendapatkan dekomposisi LU, menyelesaikan sistem Ax=bA \cdot x = b menjadi seperti menyelesaikan teka-teki yang sudah diurutkan.

Sistem Ax=bA \cdot x = b berubah menjadi Ux=L1PbU \cdot x = L^{-1} \cdot P \cdot b melalui dua tahap:

Substitusi Maju

Algoritma substitusi maju menyelesaikan Ly=PbL \cdot y = P \cdot b dengan matriks segitiga bawah reguler LL dan vektor c=Pbc = P \cdot b. Proses ini seperti mengisi tangga dari bawah ke atas, di mana setiap langkah bergantung pada langkah sebelumnya.

Untuk setiap baris i=1,,mi = 1, \ldots, m, kita menghitung:

yi:=1lii(cij=1i1lijyj)y_i := \frac{1}{l_{ii}} \cdot \left( c_i - \sum_{j=1}^{i-1} l_{ij} \cdot y_j \right)

Algoritma ini efisien karena kita hanya perlu menghitung satu nilai di setiap langkah. Elemen diagonal liil_{ii} selalu bernilai 1 untuk matriks LL dari dekomposisi LU, sehingga pembagian menjadi sederhana.

Substitusi Mundur

Algoritma substitusi mundur menyelesaikan Ux=yU \cdot x = y dengan matriks UU dalam bentuk baris bertingkat dengan rr langkah pada kolom-kolom j1,,jrj_1, \ldots, j_r dan vektor d=yd = y.

Pertama, kita periksa apakah sistem dapat diselesaikan. Jika r<mr < m dan terdapat di0d_i \neq 0 untuk i{r+1,,m}i \in \{r + 1, \ldots, m\}, maka sistem tidak memiliki solusi.

Jika sistem dapat diselesaikan, kita inisialisasi matriks kernel KK dengan ukuran n×(nr)n \times (n-r), dan mulai dengan k=0k = 0 serta i=ri = r.

Algoritma bekerja mundur dari kolom j=nj = n hingga j=1j = 1. Untuk setiap kolom, kita periksa apakah kolom tersebut adalah langkah pivot atau bukan.

  1. Jika kolom j adalah langkah pivot, artinya j=jij = j_i untuk langkah ke-ii, maka kita hitung solusi untuk variabel xjx_j:

    xj:=1uij(dil=j+1nuilxl)x_j := \frac{1}{u_{ij}} \cdot \left( d_i - \sum_{l=j+1}^n u_{il} \cdot x_l \right)

    Dan kita juga hitung kontribusi variabel ini terhadap matriks kernel:

    Kjq:=1uij(l=j+1nuilKlq)K_{jq} := \frac{1}{u_{ij}} \cdot \left( - \sum_{l=j+1}^n u_{il} \cdot K_{lq} \right)

    untuk q=1,,nrq = 1, \ldots, n - r, kemudian kita kurangi ii dengan 1.

  2. Jika kolom j bukan langkah pivot, artinya tidak ada pivot pada kolom tersebut, maka variabel xjx_j adalah variabel bebas. Kita set:

    • k:=k+1k := k + 1
    • xj:=0x_j := 0 (solusi khusus)
    • Kjk:=1K_{jk} := 1 (basis kernel)

Algoritma ini menghasilkan solusi xx dan matriks KK yang memenuhi Ux=dU \cdot x = d dan UK=0U \cdot K = 0.

Kolom-kolom dari matriks KK membentuk basis untuk kernel (ruang null) dari matriks UU. Ini berarti bahwa setiap kolom KK adalah vektor yang ketika dikalikan dengan UU menghasilkan vektor nol.

Himpunan solusi lengkap adalah:

{x+K(t1tnr):t1,,tnrR}\left\{ x + K \cdot \begin{pmatrix} t_1 \\ \vdots \\ t_{n-r} \end{pmatrix} : t_1, \ldots, t_{n-r} \in \mathbb{R} \right\}

Contoh Penerapan

Mari kita lihat bagaimana dekomposisi LU digunakan untuk menyelesaikan sistem linear secara konkret. Misalkan kita memiliki vektor b=(433)b = \begin{pmatrix} 4 \\ 3 \\ 3 \end{pmatrix} dan ingin menyelesaikan sistem Ax=bA \cdot x = b.

  1. Langkah pertama adalah menghitung c=Pbc = P \cdot b. Karena matriks permutasi PP menukar baris pertama dengan baris kedua, kita mendapatkan:

    c=Pb=(010100001)(433)=(343)c = P \cdot b = \begin{pmatrix} 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} 4 \\ 3 \\ 3 \end{pmatrix} = \begin{pmatrix} 3 \\ 4 \\ 3 \end{pmatrix}
  2. Langkah kedua adalah substitusi maju untuk menyelesaikan Ly=cL \cdot y = c. Kita menggunakan matriks segitiga bawah LL yang sudah kita peroleh. Proses ini dilakukan dari atas ke bawah seperti mengisi tangga satu per satu.

    Untuk baris pertama dengan l11=1l_{11} = 1, kita dapatkan y1=c1=3y_1 = c_1 = 3.

    Untuk baris kedua dengan l22=1l_{22} = 1, kita dapatkan y2=c2=4y_2 = c_2 = 4.

    Untuk baris ketiga dengan l33=1l_{33} = 1, kita hitung:

    y3=c3l31y1l32y2y_3 = c_3 - l_{31} \cdot y_1 - l_{32} \cdot y_2
    =3133124= 3 - \frac{1}{3} \cdot 3 - \frac{1}{2} \cdot 4
    =312=0= 3 - 1 - 2 = 0

    Sehingga diperoleh:

    y=L1c=(340)y = L^{-1} \cdot c = \begin{pmatrix} 3 \\ 4 \\ 0 \end{pmatrix}
  3. Langkah ketiga adalah substitusi mundur untuk menyelesaikan Ux=yU \cdot x = y. Matriks UU dalam bentuk baris bertingkat memiliki pivot pada kolom 1, 2, dan 4. Kolom 3 tidak memiliki pivot sehingga menjadi variabel bebas.

    Dari proses substitusi mundur, kita memperoleh solusi khusus:

    x=(1200)x = \begin{pmatrix} -1 \\ 2 \\ 0 \\ 0 \end{pmatrix}

    dan matriks kernel:

    K=(1210)K = \begin{pmatrix} 1 \\ -2 \\ 1 \\ 0 \end{pmatrix}
  4. Interpretasi hasil sangat penting untuk dipahami. Solusi xx adalah satu solusi khusus dari sistem persamaan. Matriks KK menunjukkan arah di mana kita bisa bergerak dalam ruang solusi tanpa mengubah hasil perkalian AxA \cdot x.

  5. Verifikasi matematis menunjukkan bahwa untuk setiap nilai parameter t1t_1, solusi umum x+Kt1x + K \cdot t_1 tetap memenuhi persamaan asli.

    Mari kita buktikan dengan menghitung A(x+Kt1)A \cdot (x + K \cdot t_1). Hasilnya adalah:

    A(x+Kt1)=A(1200)+A(1210)t1A \cdot (x + K \cdot t_1) = A \cdot \begin{pmatrix} -1 \\ 2 \\ 0 \\ 0 \end{pmatrix} + A \cdot \begin{pmatrix} 1 \\ -2 \\ 1 \\ 0 \end{pmatrix} \cdot t_1
    =(433)+(000)t1=b= \begin{pmatrix} 4 \\ 3 \\ 3 \end{pmatrix} + \begin{pmatrix} 0 \\ 0 \\ 0 \end{pmatrix} \cdot t_1 = b

    Perhatikan bahwa AK=0A \cdot K = 0, yang berarti vektor KK berada dalam ruang null dari matriks AA. Ini menjelaskan mengapa menambahkan kelipatan KK pada solusi tidak mengubah hasil.

Dibandingkan dengan menghitung dekomposisi LU secara penuh, proses substitusi maju dan mundur ini jauh lebih efisien untuk menyelesaikan sistem linear dengan vektor ruas kanan yang berbeda-beda.