Phân tích ma trận thành dạng LU
PGS.TSHọc viên thực hiện:Nguyễn Văn LâmĐề tài: GIẢI SỐ BẰNG MATLABTrang 133end Khoi tao ban dau cho vector pivoting.piv = 1:n; Cac buoc khu he sofor k = 1:n-1 Tim yeu to lon nhat trong cot pivot, ben duoi vi tri cua pivot cung cac chi sotoi da cua cac thanh phan do. [col_max index] = maxabsAk:n,k;index = index + k-1; if index ~= kChuyen sang dong thu k cung chi so, trong cot k den n. Tuong tu cho cot b tempA = Ak,k:n;Ak,k:n = Aindex,k:n; Aindex,k:n = tempA;tempb = bk; bk = bindex;bindex = tempb; temp = pivk;pivk = pivindex; pivindex = temp;end Dinh dang sau do luu lai thanh cac phan tu trong cot pivot, ben duoi duongcheo chinh. Ak+1:n,k = Ak+1:n,kAk,k;Tien hanh cac buoc khu, dau tien sua doi ma tran, va sau do bo sung cho b for i = k+1:nAi,k+1:n = Ai,k+1:n - Ai,kAk,k+1:n; endbk+1:n = bk+1:n - Ak+1:n,kbk; endThiet lap ma tran tam giac tren cua he tuyen tinh. x = zerosn,1;xn = bnAn,n; for i = n-1:-1:1xi=bi-Ai,i+1:nxi+1:nAi,i; endGhi nhan lai ma tran phan tich LU voi viec bien doi dong. lu = A; 6.2. PHƯƠNG PHÁP NHÂN TỬ LUPGS.TSHọc viên thực hiện:Nguyễn Văn LâmĐề tài: GIẢI SỐ BẰNG MATLABTrang 134Nội dung của phương pháp này là phân tích ma trậnAthành tích của hai ma trận, ma trận tam giác dưới L và ma trận tam giác trênU . Khi đó việc giải hệ 6.1 sẽ đưa về việc giải hai hệLg b vàUx g . 6.6Định lý 6.2.1 NếuAlà một ma trận không suy biến, thì bao giờ cũng tồn tại một ma trận P không suy biến sao cho ma trận PA phân tích được thành hai ma trận,ma trận tam giác dưới L và ma trận tam giác trên U , tức làPA LU . 6.7Có nhiều phương pháp phân tích A LU , tuy nhiên ta thường xét trườnghợp ma trận L có các phần tử trên đường chéo chính bằng 1 và gọi đây là phân rã Doolittle. Khi đó L vàU có dạng21 121 0 01 0 01n nl Ll l và11 121 222 nn nnu uu uu Uu . 6.8Với, 1 11 111 11 111 ,2 ,1 ,1 1.j ji ii i ji j ik kjk ji j i jik kj kjju aj n al i nu ua l ui j la l uj i u 6.9PGS.TSHọc viên thực hiện:Nguyễn Văn LâmĐề tài: GIẢI SỐ BẰNG MATLABTrang 135Nghiệm của hệLg b xác định theo công thức 6.4 và nghiệm của hệUx g xác định theo cơng thức 6.3.Ví dụ 6.2.2 Đối với hệ 6.5, ta có1 3 41 1 2 6 71 1 4 5 7 5 6 1L và 43 21 0 7 4 3 25 4 12 7 10 75 3 U .Mà 1, 1, 1, 1Tb , nên nghiệm củaLg b là 1,1 4, 12 7,0Tg ,dẫn đến hệUx g có nghiệm là 0, 1, 1,0Tx .CHƯƠNG TRÌNHMATLAB: Chúng tơi trình bày chương trình 6.2 để giải hệ6.1 bằng phương pháp nhân tử LU. Đối số của chương trình là ma trận hệ số A và vector cột b. Kết quả trả về là các ma trận l và u theo phân tích 6.8, cácvector nghiệm g và x của 6.6 và x cũng chính là nghiệm cần tìm của hệ 6.1. Chương trình được gọi theo cú pháp[l,u,g,x] = LUfactorA,b.Chương trình 6.2: function [l,u,g,x] = LUfactorA,bDay la ham [l,u,g,x] = LUfactorA,b, dung de giai he 6.1 theo pp LU. Giai vi du 6.2.2 theo cu phap[l,u,g,x] = LUfactor[4 3 2 1;3 4 3 2;2 3 4 3;1 2 3 4],[1 1 -1 -1] Kiem tra cac doi so nhap vao khi goi chuong trinhif nargin 2, errorCho ma tran he so; end; Phan tich lu theo cong thuc 6.9N=lengthb; l=zerosN; u=zerosN;for i=1:N, li,i=1; end; for j=1:Nu1,j=A1,j;PGS.TSHọc viên thực hiện:Nguyễn Văn LâmĐề tài: GIẢI SỐ BẰNG MATLABTrang 136end; if u1,1==0errorKhong the phan tich duoc.; end;for i=2:N li,1=Ai,1u1,1;end; for i=2:N-1for j=i:N sum=0;for k=1:i-1 sum=sum+li,kuk,j;end; ui,j=Ai,j-sum;end; if ui,i==0errorKhong the phan tich duoc.; end;for j=i+1:N sum=0;for k=1:i-1 sum=sum+lj,kuk,i;end; lj,i=Aj,i-sumui,i;end; end;sum=0; for k=1:N-1sum=sum+lN,kuk,N; end;uN,N=AN,N-sum; Giai he lg=b theo dang ma tran he so tam giac duoi, cong thuc 6.4.g = zerosN,1; g1 = b1l1,1;for k=2:N sum = 0;for j=1:k-1 sum=sum+lk,jgj;end; gk=bk-sumlk,k;end; Giai he ux=g theo dang ma tran he so tam giac tren, cong thuc 6.3PGS.TSHọc viên thực hiện:Nguyễn Văn LâmĐề tài: GIẢI SỐ BẰNG MATLABTrang 137x = zerosN,1; xN = xNuN,N;for k=N-1:-1:1 sum = 0;for j=k+1:N sum=sum+uk,jxj;end; xk=gk-sumuk,k;end; Phương pháp nhân tử LU áp dụng rất hiệu quả cho trường hợp matrận hệ số A có dạng ba đường chéo. Để tránh trùng lắp trong ký hiệu, ta viết lại hệ 6.1 trong trường hợp này làAx d chương trình 6.3 giải hệ theo cách viết này, với11 1221 2223 3233 1, 11, , 1, nn nn n nn na aa aa aa Aa aa a Khi đó phân rã Doolittle cho ta21 321 11 1l Ll và11 1222 2333 ,n nu uu uu Uu .Khi đó, từ cơng thức 6.9 ta cóPGS.TSHọc viên thực hiện:Nguyễn Văn LâmĐề tài: GIẢI SỐ BẰNG MATLABTrang 13811 1112 1221 2111 ,, , 11, , 1, 1 1,1, ,; ;; ,2,3, , ; ;, 2,3, ,1.i i i ii i ii i ii i ii ii i iu a ua l au ua l ui nu al au in 6.10Và theo phân tích LU thì ta cần giải hai hệLg d vàUx g , theo công thức 6.4 và 6.3. Cụ thể là HệLg d thì1 1, 1 1, ., 2,...,j jj j jg d gd l gj n . HệUx g thì1 ,; ,1,...,1.j j jn nn n jj jg b x xg u xj n u Ví dụ 6..2.3 Giải hệAx d , với2 1 0 0 0 1 2 1 0 00 2 2 1 0 0 0 1 2 10 0 0 1 2 A và [5, 4, 3, 2, 1]Td .Áp dụng 6.10, 6.4, 6.3 ta tính được1 1 21 2 31 3 41 4 5 1L và2 10 3 2 14 3 15 4 16 5 U .Nghiệm củaLg d là 5, 3 2, 2, 1 2, 3 5Tg . HệUx g có nghiệm là 5 2, 0, 3 2, 1 2,0Tx .Tiếp theo, chúng tơi trình bày chương trình 6.2a để giải hệ 6.1 khi nó códạng hệ thống ba đường chéo. Trong trường hợp đặc biệt này, thay vì đưa vào ma trận hệ số A, ta sẽ đưa vào ba vector, a chứa các phần tử trên đường chéo chínhPGS.TSHọc viên thực hiện:Nguyễn Văn LâmĐề tài: GIẢI SỐ BẰNG MATLABTrang 139của A, b là đường chéo nằm trên đường chéo chính và c là đường chéo nằm dưới đường chéo chính; vector cột tự do là d; N là số phương trình và cũng là số ẩn củahệ. Kết quả trả về là các vector, l chứa các phần tử của đường chéo dưới đường chéo chính củaL; u và v chứa các phần tử của đường chéo chính và đường chéo trên đường chéo chính củaU ; g là nghiệm củaLg d và x là nghiệm củaUx g và cũng chính là nghiệm của hệ 6.1. Chương trình được gọi theo cú pháp [l,u,v,g,x]=tridiaga,b,c,d,N.Chương trình 6.2a: function [l,u,v,g,x]=tridiaga,b,c,d,NHam dung de giai he 6.1 dang ba duong cheo. Giai vi du 6.2.3, [l,u,v,g,x]=tridiag[2 2 2 2 2],[1 1 1 1],[1 1 1 1],[5 4 3 2 1],5if nargin 5, errorHam co toi thieu 5 doi so.; end;Kiem tra cac doi so khi goi chuong trinh. Phan tich lu.u1=a1;v1=b1;l1=c1u1; g1=d1;for i=2:N-1 ui=ai-li-1vi-1;vi=bi; li=ciui;gi=di-li-1gi-1; end; Giai he lg=d va ux=g.uN=aN-lN-1vN-1; gN=dN-lN-1gN-1;xN=gNuN; for i=N-1:-1:1xi=gi-vixi+1ui; end;
Có một số phương pháp để đưa ma trận về những dạng dễ nghiên cứu hơn. Các nhà toán học thường coi chúng là kỹ thuật phân tích ma trận hoặc nhân tử hóa ma trận. Họ quan tâm tới những kỹ thuật này vì chúng bảo tồn một số tính chất nhất định của ma trận trong quá trình biến đổi, như định thức, hạng hay nghịch đảo, do đó những đại lượng này có thể dễ dàng tính toán sau khi áp dụng phép biến đổi, hoặc những tính toán ma trận sẽ dễ dàng hơn về mặt thuật toán thực thi đối với một số ma trận đặc biệt. Phương pháp phân tích LU ma trận chính là kỹ thuật phân tích ma trận thành tích của một ma trận tam giác dưới (L) với một ma trận tam giác trên (U).[63] Khi phương pháp phân tích này được thực hiện, những hệ phương trình tuyến tính có thể giải một cách hữu hiệu hơn bằng những kỹ thuật đơn giản như thay thế tiến và lùi (forward and back substitution). Tương tự, tính nghịch đảo của ma trận tam giác sẽ dễ dàng hơn nhiều so với ma trận tổng quát. Phép khử Gauss tương tự như một thuật toán; nó biến đổi ma trận bất kỳ thành dạng hàng bậc thang (row echelon form).[64] Cả hai phương pháp được tiến hành bằng cách nhân ma trận với những ma trận cơ sở phù hợp, hay những ma trận thu được từ việc hoán vị các cột hoặc hàng cho nhau và cộng thêm một số bội lần một hầng vào hàng khác. Kỹ thuật phần tích giá trị kỳ dị (singular value decomposition) biểu diễn ma trận bất kỳ A thành tích của UDV∗, với U và V là các ma trận unita và D là ma trận chéo hóa. Phân tích ma trận thành ma trận chỉ có các phần tử là các giá trị riêng (eigendecomposition) hay chéo hóa biểu diễn A thành tích VDV−1, với D là ma trận đường chéo và V là một ma trận khả nghịch phù hợp.[65] Nếu A được viết theo dạng này, nó được gọi là ma trận chéo hóa được (diagonalizable matrix). Tổng quát hơn, và áp dụng đối với mọi ma trận, phép phân tích Jordan biến đổi ma trận thành dạng chuẩn tắc Jordan (Jordan normal form), để đưa các ma trận về dạng mà chỉ những phần tử khác 0 là các giá trị riêng λ1 đến λn của A, nằm trên đường chéo chính và có thể có các phần tử nằm bên trên đường chéo chính đều bằng 1 như chỉ ra ở hình bên.[66] Dựa theo kỹ thuật phân tích ma trận theo giá trị riêng, lũy thừa bậc ncủa A (tức là thực hiện nhân ma trận A với chính nó n lần) sẽ được tính toán thông qua An = (VDV−1)n = VDV−1VDV−1...VDV−1 = VDnV−1và lũy thừa của ma trận đường chéo được tính trực tiếp khi lấy lũy thừa của các phần tử nằm trên đường chéo chính, mà cách này dễ dàng hơn rất nhiều khi thực hiện từng lần nhân với A. Phương pháp này còn được ứng dụng để tính lũy thừa ma trận (matrix exponential) eA, do nó xuất hiện thường xuyên trong lúc giải phương trình vi phân tuyến tính, logarit của ma trận (matrix logarithm) và căn bậc hai của ma trận (square root of a matrix).[67] Để tránh trường hợp sai số lớn khi thay đổi dữ liệu số đầu vào (condition number), các nhà toán học nêu những thuật toán tốt hơn như phân tích Schur sẽ được ứng dụng.[68] Tóm tắt nội dung tài liệu
Page 2
YOMEDIA
Bài viết trình bày cách ứng dụng phương pháp sử dụng phân rã ma trận LU và phương pháp lập trình để giải hệ phương trình có hàng trăm phương trình tuyến tính trong phân tích kinh tế mà các phương pháp thông thường trong chương trình toán cao cấp khó giải được.
Giấy phép Mạng Xã Hội số: 670/GP-BTTTT cấp ngày 30/11/2015 Copyright © 2009-2019 TaiLieu.VN. All rights reserved. |