Giáo trình Toán rời rạc
III. Ma trận1. Khái niệm ma trậnCho K là một trường (field). Một bảng hình chữ nhật dạng11 12 121 22 21 2 . . . nnm m mna a aa a aa a a trong đó các phần tử aij ∈ K gọi là một ma trận trên K.Ma trận trên còn được kí hiệu (aij), i=1, . ,m, j=1, . ,n hoặc đơn giản chỉ là (aij). Có m bộ gồm n phần tử theo chiều ngang (a11, a12, . ,a1n), (a21, a22, . ,a2n), . , (am1,am2, .,amn) gọi là các hàng của ma trận và có n bộ gồm m phần tử theo chiều dọc:11211 .maaa , 12222 .maaa , . , 12 .nnmnaaa gọi là các cột. Phần tử aij gọi là phần tử thứ ij và xuất hiện ở hàng i, cột j. Một ma trận như vậy gọi là một ma trận m hàng n cột, hay đơn giản là một ma trận mxn. Bộ (m,n) gọi là kích thước của ma trận (hoặc dạng) của ma trận.1Ví dụ:5 6 9 02 1 4 73 7 2 8− − là một ma trận 3 hàng và 4 cột trên tập hợp các số thực.Các ma trận thường được kí hiệu bởi các chữ hoa A, B, C còn các phần tử của K thường được kí hiệu bằng chữ thường a,b,c. Hai ma trận A, B bằng nhau nếu có cùng dạng và mọi phần tử tương ứng với các hàng và cột đều bằng nhau. Khi đó ta ghi A = B. Điều đó cũng có nghóa là sự bằng nhau của hai ma trận mxn tương đương với hệ thống gồm m.n đẳng thức.1 Việc ghi chỉ số hàng hoặc cột (cái nào ghi trước) của ma trận (aij) tùy thuộc vào mỗi tác giả. Tuy nhiên sự khác nhau đó không làm thay đổi bản chất cúa các vấn đề sẽ được nghiên cứu sau đây.Trong các ngôn ngữ lập trình việc khai báo một ma trận thông thường được xem như một mảng hai chiều các phần tử kiểu cơ sở. Ví dụ trong Pascal:A : array [1 m, 1 n] of K;Trong khai báo này có thể xem như chỉ số đầu tiên để chỉ hàng còn chỉ số thứ hai để chỉ cột (điều này không phải là một qui ước có tính cách bắt buộc). Như vậy phần tử A[i,j] là một phần tử có kiểu dữ liệu K thuộc về hàng thứ i, cột thứ j.58 Ví dụ:2 3 51 4x y z sx y z s+ + = − − tương đương với hệ thống312 54x yx yz sz s+ =− =+ =− =Ma trận đơn vò:Đònh nghóa: Ma trận vuông nxn In=(ij∂) trong đó ij∂=10nếu i jnếu i j=≠ gọi là ma trận đơn vò. In = 1 0 . 00 1 . 0 . . . .0 0 . 1 (Kí hiệu ij∂ được gọi là kí hiệu Kronecker).Ma trận chuyển vò:Đònh nghóa: Cho ma trận A kích thước mxn, ma trận chuyển vò của ma trận A là ma trận kí hiệu At kích thước nxm có được bằng cách chuyển hàng thành cột và ngược lại.Ví dụ:Cho A= 1 2 34 5 6 thì At = 1 42 53 6 Ma trận đối xứng:Đònh nghóa: Một ma trận vuông nxn A=(aij) gọi là đối xứng nếu ta có aij=aji với mọi i,j.Ví dụ: Ma trận 1 2 3 42 8 11 53 11 2 64 5 6 9 − là một ma trận đối xứng.59 Nói cách khác ma trận vuông A gọi là đối xứng nếu nó không thay đổi khi chúng hoán vò các hàng và các cột cho nhau, ie: khi A = At 2. Các phép toán trên ma trậnPhép cộng:Đònh nghóa: Cho hai ma trận cùng dạng A=(aij), B=(bij). Tổng của A và B là một ma trận cùng dạng C=(cij) được đònh nghóa bởi:cij=aij+bij với mọi i, jTa không đònh nghóa tổng của hai ma trận khác dạng.Phép nhân vô hướng:Đònh nghóa: Cho phần tử k ∈ K và ma trận A. Tích của k với A, kí hiệu k.A hoặc kA là ma trận cùng dạng (k.aij).Ta cũng đònh nghóa:- A = (-1). A và A - B = A + (-B)Ví dụ:Cho A = 1 2 34 5 6− − và B = 3 0 27 1 8 − thì:A + B = 4 2 53 6 2− − và 3A = 3 6 912 15 18− − 3A - B = 0 6 719 14 26− − Nhân hai ma trận:Đònh nghóa: Cho A là ma trận mxp và B là ma trận pxn (số cột của A bằng số hàng của B). Tích của hai ma trận A và B, kí hiệu AB là ma trận C kích thước mxn đònh nghóa bởi:cij =1pik kjka b=∑ , ∀i,jTa cũng dònh nghóa Ar= .AAA A (thực hiện r lần phép nhân) với mọi ma trận A.Ví dụ 1:r st u 1 2 31 2 3a a ab b b = 1 1 2 2 3 31 1 2 2 3 3ra sb ra sb ra sbta ub ta ub ta ub+ + + + + + Ví dụ 2:60 1 2 1 1 1 53 4 0 2 3 11 = Lưu ý là phép nhân ma trận không có tính giao hoán, ie: không chắc AB bằng BA (hơn nữa cũng không chắc BA có nghóa hay không!).Tính chất: AIn = ImA = A với mọi ma trận A kích thước mxn.Thông thường ta qui ước: Ao = In.Thuật toán nhân ma trận:Procedure Nhân ma trận (A,B,C: các ma trận)For i:=1 to m do {Duyệt trên mỗi hàng của A}BeginFor j:=1 to n do {với mỗi hàng đó duyệt trên các cột của B} begincij := 0For k:=1 to p do cij:=cij+aik*bkjendEndReturn C=(cij)Ví dụ: Có bao nhiêu phép cộng và phép nhân các số nguyên được thuật toán nói trên sử dụng để nhân hai ma trận vuông nxn có các phần tử là số nguyên?Giải: Có n2 phần tử trong tích của A và B. Để tìm mỗi phần tử cần tất cả n phép nhân và (n -1) phép cộng. Vậy có tất cả n3 phép nhân và n2(n-1) phép cộng đã được dùng. Điều này chứng tỏ giải thuật trên cần đến O(n3) phép nhân và phép cộng (độ phức tạp giải thuật là O(n3) 2.3. Ma trận Boole.Các ma trận mà các phần tử chỉ nhận một trong hai giá trò 0 và 1 (hoặc chỉ nhận hai giá trò TRUE, FALSE) gọi là ma trận Boole. Khi đó ta có thể sử dụng các phép toán logich ∧ (and) và ∨ (or) cho các phần tử của các ma trận này. Khi đó nếu A=(aij) và B=(bij) có cùng kích thước, ta có thể đònh nghóa các phép toán ma trận:A ∧B=(aij ∧bij) và A ∨B=(aij ∨ bij).2 Dùng một số thuật toán khác có thể đạt độ phức tạp thuật toán chỉ có7( )O n. Tuy nhiên không tiện trình bày các thuật toán đó ở đây.61 Ví dụ:A= 1 0 10 1 0 và B = 0 0 10 1 1 thìA ∧B=0 0 10 1 0 và A ∨ B =1 0 10 1 1 Tương tự ta có thể đònh nghóa tích Boole của hai ma trận Boole A và B kích thước lần lượt là mxp và pxn, kí hiệu , là ma trận boole kích thước mxn, như sau:A ⊗ B = (c ij) = ((ai1∧ b1j)∨ (ai2 ∧b2j) ∨ . ∨ (aik ∧bkj))Đònh nghóa này hoàn toàn tương tự với đònh nghóa tích hai ma trận trong đó ta đã thay trong biểu thức của cij phép nhân bởi ∧ và phép cộng bởi ∨.Ví dụ: A= 1 00 11 0 và B= 1 1 00 1 1 thì A⊗B= 1 1 00 1 11 1 0 (Việc kiểm tra kết quả một cách chi tiết xin dành cho người đọc)3 3 Cũng đề nghò người đọc tự xác đònh một thuật toán tương tự cho việc tính tích Boole của hai ma trận.62 . 1 2 31 2 3a a ab b b = 1 1 2 2 3 31 1 2 2 3 3ra sb ra sb ra sbta ub ta ub ta ub+ + + + + + Ví dụ 2: 60 1 2 1 1 1 53 4 0 2 3 11 . dụ:Cho A = 1 2 34 5 6− − và B = 3 0 27 1 8 − thì:A + B = 4 2 53 6 2 − và 3A = 3 6 9 12 15 18− − 3A - B = 0 6 719 14 26 −