Phép phân tích ma trận A=LU

Phép phân tích ma trận (hay Matrix Decomposition) là một phương pháp nhân tử hóa ma trận bằng cách tách ma trận đó ra thành phép nhân của nhiều ma trận khác nhau. Cũng giống như với một số tự nhiên, ta có thể tách số đó ra thành các nhân tử khác nhau như tách ra thành các thừa số nguyên tố để dễ dàng nhận biết được đặc điểm của con số ấy. Thì nhân tử hóa ma trận cũng được xây trên khái niệm tương tự. Phép phân tích ma trận đơn giản nhất là A=LUA=LU.

Trong đó:
  • AA là một ma trận bất kỳ.
  • LL là ma trận tam giác dưới. (L là viết tắt của Lower trong Lower Triangle).
  • UU là ma trận tam giác trên. (U là viết tắt của Upper trong Upper Triangle).

A=LUA = LU

Phép phân tích ma trận này rất đơn giản, đầu tiên ta thực hiện các phép biến đổi trên dòng để đưa A thành một ma trận bậc thang. Lúc đó, ma trận bậc thang chính là U. Tôi sẽ lấy một ma trận có kích thước 3x3 để làm ví dụ. A=[152364227] A = \begin{bmatrix} 1 & 5 & 2 \\ 3 & 6 & 4 \\ -2 & 2 & 7 \end{bmatrix}
Đầu tiên, ta cần tính toán hệ số ll để nhân dòng 1 rồi trừ cho dòng 2 để thực hiện loại trừ (elimination). Có thể tính được l=A21A11=31=3l = \frac{A_21}{A_11} = \frac{3}{1} = 3. Chúng ta gọi hệ số này là l21l_21. Vậy phép biến đổi dòng đầu tiên là r2l21.r1=r23.r1r_2 - l_21.r_1 = r_2 - 3.r_1. Tương tự, ta cũng tính ra được l31=A31A11=2l_31 = \frac{A_31}{A_11}= -2 và phép biến đổi dòng thứ hai là r3l31.r1=r3+2.r1r_3 - l_31.r_1 = r_3 + 2.r_1.
Đến đây, ta có một ký hiệu chung lijl_ij là hệ số nhân cho dòng j và trừ cho dòng i.
$$ \begin{bmatrix} 1 & 5 & 2 \\ 3 & 6 & 4 \\ -2 & 2 & 7 \end{bmatrix} \begin{aligned} &\xrightarrow{r_2-3r_1}\\ &\xrightarrow{r_3 +2r_2 } \end{aligned} \begin{bmatrix} 1 & 5 & 2 \\ 0 & -9 & -2 \\ 0 & 12 & 11 \end{bmatrix} $$
Tiếp tục bước loại trừ, ta có l32=129=43l_32 = \frac{12}{-9} = -\frac{4}{3}.
$$ \begin{bmatrix} 1 & 5 & 2 \\ 0 & -9 & -2 \\ 0 & 12 & 11 \end{bmatrix} \xrightarrow{r_3 + \frac{4}{3} r_2} \begin{bmatrix} 1 & 5 & 2 \\ 0 & -9 & -2 \\ 0 & 0 & \frac{25}{3} \end{bmatrix} $$
Vậy, ma trận U của ta có kết quả:
U=[15209200253] U= \begin{bmatrix} 1 & 5 & 2 \\ 0 & -9 & -2 \\ 0 & 0 & \frac{25}{3} \end{bmatrix}
Bây giờ ta cần tìm một ma trận LL sao cho A=LUA = LU [152364227]=L[15209200253] \begin{bmatrix} 1 & 5 & 2 \\ 3 & 6 & 4 \\ -2 & 2 & 7 \end{bmatrix} = L \begin{bmatrix} 1 & 5 & 2 \\ 0 & -9 & -2 \\ 0 & 0 & \frac{25}{3} \end{bmatrix}
Các bạn có thể tìm U1U^{-1} để kiếm LL bằng phương trình L=AU1L = A U^{-1}. Nhưng điều đó là không cần thiết vì thật ra ma trận LL của ta chính là: L=[100l2110l31l321]=[1003102431] \begin{equation} \begin{split} L &= \begin{bmatrix} 1 & 0 & 0 \\ l_21 & 1 & 0 \\ l_31 & l_32 & 1 \end{bmatrix} \\ &= \begin{bmatrix} 1 & 0 & 0 \\ 3 & 1 & 0 \\ -2 & -\frac{4}{3} &1 \end{bmatrix} \end{split} \end{equation}
Nếu bạn nghi ngờ giả thuyết của tôi, sao chúng ta không kiểm tra thử nhỉ.
LU=[|||a1a2a3|||]=[1003102431][15209200253] LU = \begin{bmatrix} \vert & \vert & \vert \\ a_1 & a_2 & a_3 \\ \vert & \vert & \vert \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 \\ 3 & 1 & 0 \\ -2 & -\frac{4}{3} &1 \end{bmatrix} \begin{bmatrix} 1 & 5 & 2 \\ 0 & -9 & -2 \\ 0 & 0 & \frac{25}{3} \end{bmatrix}
Ta tính cột đầu tiên a1a_1:
[|a1|]=[1003102431][100]=1[132]+0[0143]+0[001]=[132] \begin{equation} \begin{split} \begin{bmatrix} \vert \\ a_1\\ \vert \end{bmatrix} &= \begin{bmatrix} 1 & 0 & 0 \\ 3 & 1 & 0 \\ -2 & -\frac{4}{3} &1 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix}\\ &= 1\begin{bmatrix} 1 \\ 3 \\ -2 \end{bmatrix} + 0\begin{bmatrix} 0 \\ 1 \\ -\frac{4}{3} \end{bmatrix} + 0\begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix}\\ &= \begin{bmatrix} 1 \\ 3 \\ -2 \end{bmatrix} \end{split} \end{equation}
Cột a2a_2:
[|a2|]=[1003102431][590]=5[132]9[0143]+0[001]=[562] \begin{equation} \begin{split} \begin{bmatrix} \vert \\ a_2\\ \vert \end{bmatrix} &= \begin{bmatrix} 1 & 0 & 0 \\ 3 & 1 & 0 \\ -2 & -\frac{4}{3} &1 \end{bmatrix} \begin{bmatrix} 5 \\ -9 \\ 0 \end{bmatrix}\\ &= 5\begin{bmatrix} 1 \\ 3 \\ -2 \end{bmatrix} - 9\begin{bmatrix} 0 \\ 1 \\ -\frac{4}{3} \end{bmatrix} + 0\begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix}\\ &= \begin{bmatrix} 5 \\ 6 \\ 2 \end{bmatrix} \end{split} \end{equation}
Cột a3a_3:
[|a3|]=[1003102431][22253]=2[132]2[0143]+253[001]=[247] \begin{equation} \begin{split} \begin{bmatrix} \vert \\ a_3\\ \vert \end{bmatrix} &= \begin{bmatrix} 1 & 0 & 0 \\ 3 & 1 & 0 \\ -2 & -\frac{4}{3} &1 \end{bmatrix} \begin{bmatrix} 2 \\ -2 \\ \frac{25}{3} \end{bmatrix}\\ &= 2\begin{bmatrix} 1 \\ 3 \\ -2 \end{bmatrix} - 2\begin{bmatrix} 0 \\ 1 \\ -\frac{4}{3} \end{bmatrix} + \frac{25}{3}\begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix}\\ &= \begin{bmatrix} 2 \\ 4 \\ 7 \end{bmatrix} \end{split} \end{equation}
Vậy : LU=[152364227]=ALU = \begin{bmatrix} 1 & 5 & 2 \\ 3 & 6 & 4 \\ -2 & 2 & 7 \end{bmatrix} = A
Thật ra đây không phải là đoán mò. Nếu chúng ta sử dụng một cách giải thích khác về phép nhân ma trận: [c1c2c3][a1Ta2Ta3T]=c1[a1T]+c2[a2T]+c3[a3T] \begin{equation} \begin{split} &\begin{bmatrix} c_1 & c_2 & c_3 \end{bmatrix} \begin{bmatrix} -& a_1^T &-\\ - & a_2^T & -\\ - & a_3^T & - \end{bmatrix} \\ = & c_1\begin{bmatrix} - & a_1^T & - \end{bmatrix} + c_2\begin{bmatrix} -& a_2^T &- \end{bmatrix} + c_3\begin{bmatrix} - & a_3^T & - \end{bmatrix} \end{split} \end{equation}
Thì thật ra những phần tử trong mỗi dòng của LL đang giúp ta đảo lại các phép toán trên dòng mà ta đã làm. Ví dụ với dòng 2 của ma trận U có được từ việc trừ đi l21.r1l_21.r_1 thì ở dòng 2 của ma trận L ta đã khôi phục lại như sau:
[l2110][15209200253]=l21[152]+[092] \begin{equation} \begin{split} &\begin{bmatrix} l_21 & 1 & 0 \end{bmatrix} \begin{bmatrix} 1 & 5 & 2 \\ 0 & -9 & -2 \\ 0 & 0 & \frac{25}{3}\end{bmatrix} \\ = & l_21 \begin{bmatrix}1 & 5 & 2 \end{bmatrix}+ \begin{bmatrix}0 & -9 & -2\end{bmatrix} \end{split} \end{equation}
Ta đã lấy dòng 2 của UU (tức kết quả cuối cùng sau khi loại trừ) và cộng thêm vào dòng 1 để lấy lại dòng 2 ban đầu. Đối với dòng 3 cũng tương tự. Vậy, ta luôn có thể tính nhanh LL bằng cách giữ lại các lijl_ij và xếp chúng vào các vị trí tương ứng.
L=[100l2110lm1lm21]L = \begin{bmatrix} 1 & 0 & \cdots & 0 \\ l_21 & 1 & \cdots & 0 \\ \vdots &&\ddots & \\ l_{m1} & l_{m2} &\cdots &1 \end{bmatrix}

A=LDUA = LDUA=LDLTA = LDL^T

Tuy nhiên, các ma trận tam giác sẽ đúng chuẩn hơn khi trên đường chéo của chúng chỉ là 1. Ma trận UU mà ta đã kiếm được ở trên do vậy cần một chút điều chỉnh nhỏ.
[15209200253]=[10009000253][1520129001]=DU\begin{bmatrix} 1 & 5 & 2 \\ 0 & -9 & -2 \\ 0 & 0 & \frac{25}{3} \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & -9 & 0 \\ 0 & 0 & \frac{25}{3} \end{bmatrix} \begin{bmatrix} 1 & 5 & 2 \\ 0 & 1 & \frac{2}{9} \\ 0 & 0 & 1 \end{bmatrix} = DU
Vậy, nếu phân tích theo phương pháp A=LDUA = LDU ta sẽ được: A=LDU=[1003102431][10009000253][1520129001] \begin{equation} \begin{split} A &= LDU\\ &=\begin{bmatrix} 1 & 0 & 0 \\ 3 & 1 & 0 \\ -2 & -\frac{4}{3} &1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & -9 & 0 \\ 0 & 0 & \frac{25}{3} \end{bmatrix} \begin{bmatrix} 1 & 5 & 2 \\ 0 & 1 & \frac{2}{9} \\ 0 & 0 & 1 \end{bmatrix} \end{split} \end{equation}
Phép phân tích này rất có lợi khi ta muốn tìm các phần tử cơ sở (pivot variable) sau khi rút gọn ma trận.
Một sự thật thú vị là nếu AA là một ma trận đối xứng. Lúc này phép phân tích trên sẽ trở thành A=LDLTA = LDL^T. Vì tính chất của ma trận đối xứng, ta có: $$A^T = A \tag{1}$$$$ \begin{equation} \begin{split} A^T &= (LDU)^T\\ &=U^TDL^T \end{split} \end{equation}\tag{2}$$ Từ (1) và (2), ta có: UTDLT=LDUU^TDL^T = LDU Việc này chỉ xảy ra khi L=UTU=LTL = U^T \Rightarrow U=L^T

PA=LUPA = LU

Đôi khi chúng ta cần phải thay đổi các dòng với nhau mới có thể thực hiện loại trừ. Trong trường hợp đó ta không thể sử dụng cách phân tích A=LUA=LU đã nói trên được vì LULU bây giờ là kết quả của phép phân tích trên ma trận AA đã được đổi dòng (tạm gọi là AA^'). Lúc này ta phải sử dụng thêm một ma trận PP để thực hiện các phép hoán đổi dòng trên AA. Lúc này: A=LUPA=LUA^' = LU \Leftrightarrow PA = LU

Nhận xét

Bài đăng phổ biến từ blog này

Hướng dẫn đăng ký khóa học trên Coursera và edX miễn phí

Độc lập tuyến tính và phụ thuộc tuyến tính