Skkn chuyên đề ứng dụng nhân ma trận trong các bài toán tin học

28 3 0
Skkn chuyên đề ứng dụng nhân ma trận trong các bài toán tin học

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ỨNG DỤNG NHÂN MA TRẬN TRONG CÁC BÀI TOÁN TIN HỌC Contents I Lý thuyết ma trận 1 1 1 Định nghĩa ma trận 1 1 2 Phép cộng và phép nhân hai ma trận 2 + Phép cộng hai ma trận A và B 2 +Phép nhân hai ma trậ[.]

ỨNG DỤNG NHÂN MA TRẬN TRONG CÁC BÀI TOÁN TIN HỌC Contents I Lý thuyết ma trận 1.1 Định nghĩa ma trận 1.2 Phép cộng phép nhân hai ma trận + Phép cộng hai ma trận A B: +Phép nhân hai ma trận: 1.3 Ma trận vuông + Ví dụ ma trận tam giác trên: .3 + Ví dụ ma trận tam giác dưới: + Ví dụ ma trận chéo: + Ma trận đơn vị In: 1.4 Ma trận đối xứng + Khái niệm ma trận chuyển vị: + Ma trận đối xứng: .4 II Bài tập ứng dụng I Lý thuyết ma trận skkn 1.1 Định nghĩa ma trận Ma trận mảng chữ nhật chứa số đối tượng tốn học khác, mà định nghĩa số phép toán cộng nhân ma trận Hay gặp ma trận trường F mảng chữ nhật chứa đại lượng vô hướng F Bài viết đề cập đến ma trận thực, tức ma trận mà phần tử số thực A  A= A 11 A 12 A A  1n  A  2n  21 22     A  A m1 m2 A  mn  Trong Aij €F ( 1≤i≤n; 1≤j≤m), gọi ma trận m hàng n cột với phần tử F Véc tơ hàng ( Ai1 Ai Ain được gọi hàng thứ i ma trận A skkn  Véc tơ cột (  A1 j Amj gọi cột thứ j ma trận A A2 j Ma trận gọi ma trận A=(Aij)m×n Tập hợp ma trận m hàng, n cột với phần tử F kí hiệu M(m×n,F) 1.2 Phép cộng phép nhân hai ma trận Ta định nghĩa phép cộng phép nhân vơ hướng M(m×n,F) sau: + Phép cộng hai ma trận A B: A  A 11 A A 1n 12 A  B   A B B  1n B   2n  21 12 11 B  B 22 2n  21 22   +        B   A  A m1 A mn m2  AB   11 m2 B  mn  Cài đặt pascal: 11 A B 21 m1 B 21 =  skkn A12  B12 A22  B22 A B  1n 1n A B  2n  2n   Am  Bm A B  mn skkn mn  for i:=1 to M for j:=1 to N C[i,j]:= A[i,j] + B[i,j];  3.5  Ví dụ:  2   0  6   3 +     01   7  3.5 6  =  1   3  8  0 +Phép nhân hai ma trận: Cho hai ma trận A=(Aij) € M (m × n,F), B = (Bjk) € M(n × p,F) Tích AB ma trận A ma trận B ma trận C =(Cik) € M(m × p,F) với phần tử xác định sau:  Aij Bjk ,n Cik= ( 1≤ i ≤m, 1≤ k ≤p) j1 Trong Pascal cài đặt sau: skkn for i:=1 to M for k:=1 to P skkn begin C[i,k]:=0; for j:=1 to N C[i,k]:=C[i,k]+A[i,j] * B[j,k]; end Ví dụ:  1 3 1     0  2 =  ×   1  13      32 1        Tích số a ma trận A€M(m × n,F) ma trận B€M(m × n,F)  A m1 A12 A  1n  Ví dụ:  11 A22 A A  2n  21    Am  A  A skkn mn  aA  aA  =  aA  skkn 1.3 Ma trận vuông Ma trận vuông ma trận có số hàng số cột Ma trận n × n cịn gọi ma trận vng bậc n Bất kì hai ma trận vng bậc thực phép cộng phép nhân với Các phần tử A ii tạo thành đường chéo ma trận vng + Các loại thường gặp: Nếu phần tử A bên đường chéo 0, A gọi ma trận tam giác Tương tự, phần tử A nằm phía đường chéo 0, A gọi ma trận tam giác Nếu phần tử nằm bên đường chéo khơng A gọi ma trận chéo   0    + Ví dụ ma trận chéo:  0   + Ví dụ ma trận tam giác trên:    2  + Ví dụ ma trận tam giác dưới:   4 skkn  0 3 5    1 0    1 skkn Dữ liệu: Vào từ file vãn TILE.INP  Dòng đầu chứa số nguyên dương ( ≤ 10) – số lượng liệu  T dòng tiếp, dòng thứ ghi số nguyên dương kích thước nhà liệu thứ Kết quả: Đưa file văn TILE.OUT dòng tương ứng kết tìm với liệu theo thứ tự Đưa theo số dư cho 109 + Ví dụ: TILE.INP TILE.OUT 3 171 2731 12 Hướng dẫn: Gọi số cách tạo đường viền kích thước × Dễ thấy: = −1 +2 −2 Khi ta có: =[ ] × −1 = −1 −1 −2 với = [ × ] −1 Do đó, để tính ta dùng phương pháp nhân ma trận giải toán thời gian (log2 × ( )3) Code mẫu: skkn using namespace std; typedef long long ll; struct matrix { int val[maxn][maxn]; matrix() { memset(val, 0, sizeof(val)); } skkn matrix operator * ( const matrix & x) { matrix res; for (int u = 0; u < 2; u++) for (int v = 0; v < 2; v++) for (int i = 0; i < 2; i++) res.val[u][v] = ((ll)val[u][i] * x.val[i][v] + res.val[u][v] ) % MOD; return res; } }; matrix A, res; long long n; long long F[10000001]; matrix POWW(matrix A, long long b) skkn { matrix C; for (int i = 0; i < 2; i++) C.val[i][i] = 1; for ( ; b; b /= 2, A = A * A) if (b % 2) C = C * A; return C; } int main() { ios_base::sync_with_stdio(0); freopen(Task".inp", "r", stdin); freopen(Task".out", "w", stdout); int T; cin >> T; while (T ){ cin >> n; skkn A.val[0][0] = 1; A.val[0][1] = 2; A.val[1][0] = 1; res= POWW(A,n+1); cout

Ngày đăng: 13/02/2023, 08:50

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan