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Ử LU

PGS.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 UV là các ma trận unita và D là ma trận chéo hóa.

Ví dụng về ma trận trong dạng chuẩn tắc Jordan. Những khối xám mà được gọi là những khối Jordan.

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−1

và 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

  1. TẠP CHÍ KHOA HỌC ĐẠI HỌC VĂN LANG Nguyễn Văn Lộc PHÂN RÃ MA TRẬN LU VÀ PHƯƠNG PHÁP LẬP TRÌNH GIẢI MÔ HÌNH TUYẾN TÍNH TRONG PHÂN TÍCH KINH TẾ DISCUSSION AND PROGRAMMING METHODS IN ECONOMIC ANALYSIS NGUYỄN VĂN LỘC TÓM TẮT: 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. Từ khóa: lập trình; phân rã ma trận; hệ phương trình tuyến tính. ABSTRACT: The paper presents the method of using LU matrix decomposition and programming method to solve the system of linear equations in economic analysis. Key words: matrix decomposition; system of linear equations. 1. ĐẶT VẤN ĐỀ Phân rã ma trận là cách giảm ma trận thành Trong một nền kinh tế có hàng trăm sản các thành phần cấu thành của nó. Phân rã ma phẩm, mỗi sản phẩm có hai phương trình cung và trận là một cách tiếp cận có thể đơn giản hóa các phương cầu nhằm xác định sản lượng cân bằng. tính toán ma trận phức tạp vì được thực hiện trên Để xác định tất cả các sản lượng cân bằng của ma trận phân tách thay vì trên chính ma trận gốc. nền kinh tế, phục vụ cho việc nghiên cứu sản Phân rã ma trận tương tự như phân tách (factor) phẩm tiềm năng Yp, ta phải giải một hệ có đến các số: ví dụ như factor 10 thành 2  5. Giống hằng trăm phương trình tuyến tính. Các phương như phân tích các giá trị thực, có nhiều cách để pháp toán học như: Phương pháp ma trận nghịch phân tách một ma trận và một loạt các kỹ thuật đảo; Phương pháp Cramer; Phương pháp Gauss... phân rã ma trận khác nhau. Trong bài viết này, các phương pháp lập trình như: Hàm solve( ); chúng tôi trình bày phương pháp phân rã ma trận hàm inv( ); hàm pinv( )… là không thể giải. Dùng đơn giản, được sử dụng rộng rãi là phân rã ma phân rã ma trận kết hợp với phương pháp lập trận LU. Phép phân rã LU - Decomposition trình để chuyển việc giải các hệ tuyến tính “phức dùng cho ma trận vuông, nó phân tách ma trận tạp” về giải các hệ tuyến tính đơn giản hơn là việc thành các thành phần L và U. làm rất cần thiết trong nghiên cứu kinh tế. Trong Công thức: A = L.U hoặc A = LU bài viết này, chúng tôi minh họa phương pháp Với A là ma trận vuông muốn phân rã; L trên thông qua cách sử dụng phân rã ma trận LU là ma trận tam giác dưới; U là ma trận tam giác và phương pháp lập trình để giải các hệ phương trên. Điều kiện áp dụng phân rã LU: A khả trình tuyến tính trong phân tích kinh tế. nghịch, A  0, k  n 2. NỘI DUNG 2.1.2. Phương pháp phân rã ma trận 2.1. Phân rã ma trận A=LU (LU - Decomposition) Biểu diễn A dưới dạng tích hai ma trận trong Toán học đồng cấp với A: L là ma trận tam giác trên với 2.1.1. Phân rã ma trận (Matrix Decomposition) các phần tử trên đường chéo chính bằng 1, các  PGS.TS. Trường Đại học Văn Lang, , Mã số: TCKH27-07-2021 88
  2. TẠP CHÍ KHOA HỌC ĐẠI HỌC VĂN LANG Số 27, Tháng 5 - 2021 phần tử đối diện “phần 0” cần xác định và U là P là ma trận hoán vị (permutation matrix). ma trận tam giác dưới với các phần tử trên Mỗi dòng, mỗi cột có một hệ số bằng 1, tất cả đường chéo chính và các phần tử đối diện các hệ số khác bằng 0. Hoán vị các dòng của I “phần 0” cần xác định; hay các cột chuẩn. Thực hiện phép nhân LU; + Đồng nhất Tính chất của ma trận P: hóa các phần tử hai ma trận cùng cấp LU và ma T T 1 T a ). P  1; b).P.P  P .P  I ; c ).P  P trận A, ta được hệ đẳng thức về sự bằng nhau 3 2 5 9  của các phần tử tương ứng của hai ma trận.   Từ hệ đẳng thức được xác định, ta tìm Ví dụ: Cho ma trận A  1 7 5 7 5 10 5 3 được các phần tử của L và U. 6 9 7 2    Ví dụ: Phân rã LU - Decomposition ma trận: a) Phân tích ma trận A thành các thành 1 2 4  1 0 0 phần P, L, U. In ra kết quả. A   3 8 14  LU ; L   L21 1 0 b) Tái tạo (phục hồi) ma trận B từ các 2 6 13    L31 L32 1 thành phần P, L, U. U11 U12 U13  Giải: &U   0 U 22 U 23  import numpy    0 0 U 33  Entrée[1]: import scipy from scipy.linalg import lu Giải: Ta có: A = numpy.array([[3., 2. , 5., 9.], [1.,  U11 U12 U13    Entrée[2]: 7., 5., 7.], [5., 10., 5., 3.], [6., 9., 7., LU  L21U11 L21U12  U 22 L21U13  U 23   2.]])  L31U11 L31U12  L32U 22 L31U13  L32U 23  U 33  Entrée[3]: P, L, U = lu(A) 1 2 4  Entrée[4]: P   3 8 14  (1) array([[0., 0., 1., 0.], [0., 1., 0., 0.], 2 6 13 Out [4]:   [0., 0., 0., 1.], [1., 0., 0., 0.]] Đồng nhất hóa các phần tử tương ứng của Entrée[5]: L hai ma trận từ (1), ta có: array([[ 1., 0., 0., 0.], [0.16666667, 1., 0., U11  1; U12  2; U13  4. Out [5]: 0.], [0.5, -0.45454545, 1., 0.], [0.83333333, 0.45454545, -0.79439252, 1.]])  L21  3; U 22  2; U 23  2; L31  2; L32  1; U 33  3. Entrée[6]: U 1 2 4  1 0 0 1 2 4 array([[ 6., 9., 7., 2.], [ 0., 5.5 , 3.83333333,  A  3 8 14  3 1 0  0 2 2 2 6 13 2 1 1 0 0 3 Out [6]: 6.66666667], [0., 0., 3.24242424, 11.03030303], [0., 0., 0., 7.06542056]]) 2.2. Phân rã ma trận PA = LU bằng phương B = P.dot(L).dot(U) Entrée[7]: pháp lập trình B Việc phân rã LU được thực hiện bằng cách array([[ 3., 2., 5., 9.], sử dụng một quá trình số lặp và có thể thất bại Out [7]: [ 1., 7., 5., 7.], đối với các ma trận không thể phân tích. Do [ 5., 10., 5., 3.], vậy, để phân tích ma trận ổn định về mặt số, ta [ 6., 9., 7., 2.]]) dùng phân tích LU xoay vòng một phần (Partial 2.3. Ứng dụng phân rã ma trận PA = LU và Pivoting) [1, tr.6]. phương pháp lập trình giải hệ phương trình Công thức: PA = LU tuyến tính Với mọi ma trận vuông A: PA = LU. Với L là  AX  1  PAX  LUX  PB  B ' ma trận tam giác dưới; U là ma trận tam giác trên. 89
  3. TẠP CHÍ KHOA HỌC ĐẠI HỌC VĂN LANG Nguyễn Văn Lộc LY  B '  2  Y  L1.B ' Entrée[6]: print(U)  UX  Y 3  X  U .Y 1 [[ 3. 2. -1. 2.] [ 0. -4.33333333 2.66666667-0.33333333] [0. 0. Thay vì giải hệ phương trình (1), ta lần lượt: 4.15384615-2.76923077] [0. 0. 0. -6.]] Bước 1: Giải hệ phương trình (2), tìm Y, import numpy as np 1 với Y  L .B ' Entrée[7]: B = np.array([[6], [8], [4], [-8]]) Bước 2: Giải hệ phương trình (3), tìm X, B 1 Out [7]: array([[ 6], [ 8], [ 4], [-8]]) với X U .Y D=P@B Ví dụ: Giải hệ phương trình: Entrée[8]: D  x1  2 x2  3 x3  2 x4  6 Out [8]: array([[ 4.], [-8.], [ 6.], [ 8.]])   2 x1  x2  2 x3  3 x4  8 . Theo [2, tr.86] from numpy.linalg import inv  3x  2 x  x  2 x  4  1 2 3 4 Entrée[9]: K = inv(L)  2 x1  3 x2  2 x3  x4  8 K Chuyển hệ phương trình về dạng phương array([[ 1., 0., 0., 0.], [-0.66666667, 1., 0., 0.], [-0.53846154, 0.30769231, 1., trình ma trận: AX =B, với: Out [9]: 0.], [-0.66666667, -0.33333333, 1 2 3 2  x1  6  x2  0.66666667, 1.]]) 2 1 2 3 8 A   ;B    2 ;X Y=K@D 3 2 1 x3 4 2    8 Entrée[10]: Y  3 2 1  4  x   array([[4.], [-10.66666667], [1.38461538], Giải: (Sử dụng phân rã PA =LU). Out [10]: [12.]]) from numpy import array E = inv(U) Entrée[1]: Entrée[11]: from scipy.linalg import lu E A = array([[1, 2, 3, -2], [2, -1, -2, - array([[ 0.33333333, 0.15384615, - Entrée[2]: 3], [3, 2, -1, 2], [2, -3, 2, 1]]) 0.01851852, 0.11111111], [-0., - print(A) Out [11]: 0.23076923, 0.14814815, -0.05555556], [[ 1 2 3 -2] [ 0., 0., 0.24074074, -0.11111111], [-0., - [ 2 -1 -2 -3] 0., -0., -0.16666667]]) [ 3 2 -1 2] X = E.dot(Y) [ 2 -3 2 1]] Entrée[12]: X P, L, U =lu(A) Out [12]: array([[ 1.], [ 2.], [-1.], [-2.]]) Entrée[3]: C=P.dot(L).dot(U) print(C) Vậy nghiệm của hệ phương trình là : [[ 1. 2. 3. -2.]  x1  1 [ 2. -1. -2. -3.]  x  2 [ 3. 2. -1. 2.]  x 2  1  3 [ 2. -3. 2. 1.]]  x4  2 Entrée[4]: print(P) [[ 1. 2. 3. -2.] 2.4. Ứng dụng phân rã ma trận PA = LU và [ 2. -1. -2. -3.] phương pháp lập trình giải mô hình tuyến [ 3. 2. -1. 2.] tính kinh tế [ 2. -3. 2. 1.]] Mô hình tuyến tính trong phân tích kinh tế Entrée[5]: print(L) giải bằng phân rã LU và phương pháp lập trình [[ 1. 0. 0. 0.] [0.66666667 1. 0. 0.] theo quy trình 3 bước như mô tả trong ví dụ sau: [0.33333333-0.30769231 1. 0.] Ví dụ: Xét thị trường chè, café, ca cao có [0.66666667 0.53846154-0.66666667 1.]] hàm cung và hàm cầu tương ứng như sau: 90
  4. TẠP CHÍ KHOA HỌC ĐẠI HỌC VĂN LANG Số 27, Tháng 5 - 2021 QS  10  P1 ; ...QD  20  P1  P3 ...( che ) [[1. 0. 0.] 1 1 [0. 1. 0.] QS  2 P2 ; ...QD  40  2 P2  P3 ...( cafe) [0. 0. 1.]] 2 2 QS  5  3 P3 ; ...QD  10  P2  P3  P1...( caocao ) Entrée[6]: print(L) 3 3 [[ 1. 0. 0. ] Hãy thiết lập mô hình cân bằng thị trường [ 0. 1. 0. ] của ba loại hàng hóa trên. Xác định giá và [ 0.5 -0.25 1. ]] lượng hàng hóa của mỗi loại ở trạng thái cân Entrée[7]: print(U) bằng thị trường [3, tr.84]. [[2. 0. 1. ] Giải:Bước 1: Thiết lập mô hình cân bằng [0. 4. 1. ] thị trường: [0. 0. 3.75]] import numpy as np Q  Q  S1 D1  10  P1  20  P1  P3 Entrée[8]: B = np. array([[30], [40], [15]])  S Q  Q D   2 2 P  40  2 P2  P3 B Q 2  Q 2  5  3P3  10  P2  P3  P1 Out [8]: array([[30], [40], [15]])  S3 D3 D=P@B Entrée[9]:  2 P1  P3  30 D    4 P2  P3  40 Out [9]: array([[30.], [40.], [15.]]) P1  P2  4 P3  15 from numpy.linalg import inv Entrée[10]: K = inv(L) Dạng ma trận AX = B với: K 2 0 1  P1  30 array([[ 1., 0. , 0.], [0., 1., 0.], [- A  0 4 1  ; X   P 2 ; B   40 Out [10]: 0.5, 0.25, 1.]]) 1 1 4  P3 15  Y=K@D Entrée[11]: Bước 2: Giải mô hình bằng phương pháp Y lập trình, sử dụng phân rã ma trận PA= LU Out [11]: array([[30.], [40.], [10.]]) Entrée [1]: # Giải mô hình tuyến tính bậc Entrée[12]: E = inv(U) 3_trong kinh tế : E array([[ 0.5, 0., -0.13333333], [0., 0.25, -  2 P1  P3  30 Out [12]:  #  4 P2  P3  40 0.06666667], [0., 0., 0.26666667]]) X = E.dot(Y) P1  P2  4 P3  15 Entrée[13]: X from numpy import array array([[13.66666667], Entrée[2]: Out [13]: from scipy.linalg import lu [9.33333333], [2.66666667]] A = array([[2, 0, 1], [0, 4, 1], [1, - Bước 3: Phát biểu kết quả “kinh tế” của Entrée[3]: 1, 4]]) bài toán: Giá và lượng cân bằng tương ứng của print(A) [[ 2 0 1] mỗi loại hàng hóa là: [ 0 4 1] P1  13, 66, QD  QS  10  13, 66  3, 66; 1 1 [ 1 -1 4]] P, L, U =lu(A) P2  9, 33, QD  QS  2.9, 33  18, 66; 2 2 Entrée[4]: C=P.dot(L).dot(U) P3  2, 66, QD  QS  5  3.2, 66  2, 98 print(C) 3 3 [[ 2. 0. 1.] 3. KẾT LUẬN [ 0. 4. 1.] Hệ phương trình tuyến tính có ứng dụng [ 1. -1. 4.]] rộng rãi trong các bài toán tìm vec-tơ riêng, giá Entrée[5]: print(P) trị riêng của ánh xạ tuyến tính, trong các hệ mô 91
  5. TẠP CHÍ KHOA HỌC ĐẠI HỌC VĂN LANG Nguyễn Văn Lộc hình hóa tuyến tính trong kinh tế... Do vậy, việc trên. Từ những kết quả đã trình bày còn cho tìm các phương pháp hữu hiệu giải các hệ tuyến thấy sự cần thiết của việc kết hợp nghiên cứu tính có số ẩn và số phương trình “rất lớn” luôn phát triển các phương pháp Toán học và là nhu cầu cần thiết. Phân rã ma trận LU kết phương pháp lập trình trong giải các mô hình hợp với phương pháp lập trình cho ta một tuyến tính trong kinh tế và mở rộng cho các mô phương pháp giải hiệu quả các phương trình hình kinh tế khác. TÀI LIỆU THAM KHẢO [1] Trung tâm tin học, Đại học Khoa học Tự nhiên (2019), Mathematics and Statistics for Data Science, Tài liệu lưu hành nội bộ. [2] Nguyễn Đình Trí (2014), Bài tập Toán cao cấp tập 1, Nxb Giáo dục Việt Nam. [3] Nguyễn Tiến Quang (2014), Cơ sở Đại số tuyến tính, Nxb Giáo dục Việt Nam. Ngày nhận bài: 22-02-2021. Ngày biên tập xong: 05-5-2021. Duyệt đăng: 20-5-2021 92


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.

Phân tích ma trận thành dạng LU

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.