Phép phân tích ma trận: VD: Cho ma trận A(3x3) là ma trận ko suy biến (Định thức khác 0). Phép biến đổi ma trận A thành tích 2 ma trận L(3x3) và R(3x3) gọi là phép phân tích ma trận. = [L] * [R] =
[ ]= I.
*
Phân tích ma trận bằng phương pháp Doolittle Phương pháp phân tích đưa ma trận A(3x3) về 2 ma trận L, R có dạng như sau gọi là phương pháp Doolittle 1 0 0 1 0 ; [R] = 0 [L] = 0 0 1 Để tìm ra 2 ma trận trên, ta thử nhân chúng lại với nhau! + + + + + Thực hiện phép khử Gauss tiến đối với ma trận trên, ta có: B1: Lấy dòng thứ nhất làm trụ. Dòng thứ 2 - Dòng thứ nhất * l21 để khử a21 Dòng thứ 3 - Dòng thứ nhất * l31 để khử a31 [A] = [L] * [R] =
[A1] = 0 0
+
B2: Lấy dòng thứ 2 làm trụ. Dòng thứ 3 – Dòng thứ 2 * l32 để khử a32 [A2] = 0 0
0
Ta có thể thấy, ma trận [A2] chính là ma trận [R], còn những phần tử lij mà ta nhân với dòng trụ để khử aij chính là những giá trị trong ma trận [L] Để phân tích ma trận [A] theo phương pháp Doolittle, ta dùng phương pháp khử Gauss tiến. Code thuật toán! function [ l,r ] = doolittle( a ) %DOOLITTLE Thuc hien phan tich ma tran a = pp Doolittle % Khoi tao cac ma tran 0 la ma tran vuong cap n = ma tran a n = size(a,1); r = zeros(n); l = zeros(n); % Dung phuong phap khu Gauss tien de bien doi ma tran for k = 1:n-1 for i = k+1:n if a(i,k)~=0 ptc = a(i,k)/a(k,k); a(i,k+1:n) = a(i,k+1:n) - ptc*a(k,k+1:n); a(i,k) = ptc; end end end % Trich ra 2 ma tran l, r l = tril(a); for i=1:n l(i,i) = 1; end r = triu(a); for i=1:n r(i,i) = a(i,i); end end
VD minh họa: nhập vào ma trận A = [1,2,3;4,5,6;7,8,9] >> A = [1,2,3;4,5,6;7,8,9] A= 1 4
2 5
3 6
7
8
9
>> [L,R] = doolittle(A) L= 1 4 7
0 1 2
0 0 1
R= 1 0 0
2 3 -3 -6 0 0
>> II. Phân tích ma trận bằng phương pháp Crout Tương tự như phương pháp phân tích ma trận Doolittle, phương pháp Crout phân tích ma trận [A] về 2 ma trận [L], [R] sau: 0 0 1 0 ; [R] = 0 1 [L] = 0 0 1 Tương tự, ta cũng nhân 2 ma trận trên lại với nhau! + + + + + Thực hiện phép khử Gauss theo chiều từ trái sang phải cho ma trận trên, ta có: B1: Lấy cột thứ nhất làm trụ Cột thứ 2 – Cột thứ nhất * r12 để khử a12 Cột thứ 3 – Cột thứ nhất * r13 để khử a13 [A] = [L] * [R] =
[A1] =
0
0
+
B2: Lấy cột thứ 2 làm trụ Cột thứ 3 – Cột thứ 2 * r23 để khử a23 0 0 0 [A2] =
Ta có thể thấy, ma trận [A2] chính là ma trận [L], còn những phần tử rij mà ta nhân với cột trụ để khử aij chính là những giá trị trong ma trận [R] Để phân tích ma trận [A] theo phương pháp Crout, ta dùng phương pháp khử Gauss từ trái sang. Code thuật toán!.
function [ l,r ] = crout( a ) %CROUT Thuc hien phan tich ma tran a = pp CROUT % Khoi tao cac ma tran 0 la ma tran vuong cap n = ma tran a n = size(a,1); r = zeros(n); l = zeros(n); % Dung phuong phap khu Gauss tu trai sang de bien doi ma tran for k = 1:n-1 for i = k+1:n if a(k,i)~=0 ptc = a(k,i)/a(k,k); a(k+1:n,i) = a(k+1:n,i) - ptc*a(k+1:n,k); a(k,i) = ptc; end end end % Trich ra 2 ma tran l, r l = tril(a); for i=1:n l(i,i) = a(i,i); end r = triu(a); for i=1:n
r(i,i) = 1; end end
VD minh họa: nhập vào ma trận A = [1,2,3;4,5,6;7,8,9] >> A = [1,2,3;4,5,6;7,8,9] A= 1 4 7
2 5 8
3 6 9
>> [L,R] = crout(A) L= 1 4 7
0 -3 -6
0 0 0
2 1 0
3 2 1
R= 1 0 0 >>