Phương pháp tính với C++ - Chương 3
lượt xem 69
download
CÁC VẤN ĐỀ VỀ MA TRẬN §1. ĐỊNH THỨC CỦA MA TRẬN Cho một ma trận vuông cấp n. Ta cần tìm định thức của nó. Trước hết chúng ta nhắc lại một số tính chất quan trọng của định thức: - nếu nhân tất cả các phần tử của một hàng (hay cột) với k thì định thức được nhân với k - định thức không đổi nếu ta cộng thêm vào một hàng tổ hợp tuyến tính của các hàng còn lại. ...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Phương pháp tính với C++ - Chương 3
- CHƯƠNG 3: CÁC VẤN ĐỀ VỀ MA TRẬN §1. ĐỊNH THỨC CỦA MA TRẬN Cho một ma trận vuông cấp n. Ta cần tìm định thức của nó. Trước hết chúng ta nhắc lại một số tính chất quan trọng của định thức: - nếu nhân tất cả các phần tử của một hàng (hay cột) với k thì định thức được nhân với k - định thức không đổi nếu ta cộng thêm vào một hàng tổ hợp tuyến tính của các hàng còn lại. Ta sẽ áp dụng các tính chất này để tính định thức của một ma trận cấp 4 như sau(phương pháp này có thể mở rộng cho một ma trận cấp n) bằng phương pháp trụ: ⎛ a 11 a 12 a 13 a 14 ⎞ ⎜ ⎟ ⎜ a 21 a 22 a 23 a 24 ⎟ A =⎜ a 31 a 32 a 33 a 34 ⎟ ⎜ ⎟ ⎜a ⎟ ⎝ 41 a 42 a 43 a 44 ⎠ Lấy giá trị trụ là p1= a11.Ta chia các phần tử của hàng thứ nhất cho p1 = a11 thì định thức sẽ là D/p1 (theo tính chất 1) và ma trận còn lại là: ⎛ 1 a′ a′ a′ ⎞ ⎜ ⎟ 12 13 14 ⎜ a 21 a 22 a 23 a 24 ⎟ ⎜a a 32 a 33 a 34 ⎟ ⎜ ⎟ 31 ⎜a a 42 a 43 a 44 ⎟ ⎝ 41 ⎠ Lấy hàng 2 trừ đi hàng 1 đã nhân với a21, lấy hàng 3 trừ đi hàng 1 đã nhân với a31 và lấy hàng 4 trừ đi hàng 1 đã nhân với a41 (thay hàng bằng tổ hợp tuyến tính của các hàng còn lại) thì định thức vẫn là D/p1 và ma trận là: ⎛ 1 a′ a′ a′ ⎞ ⎜ ⎟ 12 13 14 ⎜ 0 a ′22 a ′23 a ′24 ⎟ ⎜ 0 a′ a′ a′ ⎟ ⎜ ⎜ 0 a′ a′ a′ ⎟ 32 33 34 ⎟ ⎝ 44 ⎠ 42 43 Lấy giá trị trụ là p 2 = a ′22 .Ta chia các phần tử của hàng thứ hai cho p2 thì định thức sẽ là D/(p1p2) và ma trận còn lại là: ⎛ 1 a′ a′ a′ ⎞ ⎜ ⎟ 12 13 14 0 1 a ′23 a ′24 ⎟ ′ ′ ⎜ ⎜ 0 a ′32 a ′33 a ′34 ⎟ ⎜ ⎜ 0 a′ a′ a′ ⎟ ⎟ ⎝ 44 ⎠ 42 43 Lấy hàng 1 trừ đi hàng 2 đã nhân với a ′ , lấy hàng 3 trừ đi hàng 2 đã nhân 12 với a ′32 và lấy hàng 4 trừ đi hàng 2 đã nhân với a ′42 thì thì định thức vẫn là 47
- D/(p1p2) và ma trận là: ⎛ 1 0 a ′′ a ′′ ⎞ ⎜ ⎟ 13 14 ⎜ 0 1 a ′23 a ′24 ⎟ ′ ′ ⎜ 0 0 a ′′ a ′′ ⎟ ⎜ ⎜ 0 0 a ′′ a ′′ ⎟ 33 34 ⎟ ⎝ 44 ⎠ 43 Tiếp tục lấy hàng 3 rồi hàng 4 làm trụ thì ma trận sẽ là: ⎛1 0 0 0⎞ ⎜ ⎟ ⎜ 0 1 0 0⎟ ⎜0 0 1 0⎟ ⎜ ⎜0 0 0 1⎟ ⎟ ⎝ ⎠ Định thức của ma trận này là D/(p1p2p3p4) = D/( a 11a ′22 a ′33 a ′44 ) = 1 nên định ′ ′′ thức của ma trận A là D = p1p2p3p4. Sau đây là chương trình tìm định thức của một ma trận: Chương trình 3‐1 //tinh dinh thuc #include #include #include #include void main() { int i,j,k,n,ok1,ok2,t; float d,c,e,f,g,h; float a[50][50]; char tl; clrscr(); printf(ʺ** TINH DINH THUC CAP n **ʺ); printf(ʺ\nʺ); printf(ʺ\nʺ); printf(ʺCho cap cua dinh thuc n = ʺ); scanf(ʺ%dʺ,&n); printf(ʺNhap ma tran a\nʺ); for (i=1;i
- printf(ʺDong %d:\nʺ,i); for (j=1;j
- for (j=1;j
- a[i][j]=a[i][j]/c; for (k=i+1;k
- ⎛ 2 1 1⎞ ⎜ ⎟ A = ⎜ 1 2 1⎟ ⎜ 1 1 2⎟ ⎝ ⎠ Ta viết lại ma trận A và ma trận đơn vị tương ứng với nó: ⎛ 2 1 1⎞ ⎛1 0 0⎞ ⎜ ⎟ ⎜ ⎟ A = ⎜ 1 2 1⎟ E = ⎜0 1 0⎟ ⎜1 1 2⎟ ⎜0 0 1⎟ ⎝ ⎠ ⎝ ⎠ Giai đoạn 1: Bước a: Nhân hàng 1 với 1/a11, nghĩa là a,1j = a1j/a11 đối với dòng thứ nhất, a,ij = aij đối với các dòng khác ⎛1 1 2 1 2 ⎞ ⎛1 2 0 0 ⎞ ⎜ ⎟ ⎜ ⎟ A = ⎜1 2 1 ⎟ E = ⎜ 0 1 0⎟ ⎜1 1 2⎟ ⎜ 0 0 1⎟ ⎝ ⎠ ⎝ ⎠ Bước b: Trừ hàng 3 và hàng 2 cho hàng 1, nghĩa là a(1)1j = aij ‐ ai1aij đối với i ≠ 1. ⎛1 1 2 1 2⎞ ⎛ 1 2 0 0⎞ ⎜ ⎟ ⎜ ⎟ A = ⎜0 3 2 1 2 ⎟ E = ⎜− 1 2 1 0⎟ ⎜0 1 2 3 2⎟ ⎜ − 1 2 0 1⎟ ⎝ ⎠ ⎝ ⎠ Giai đoạn 2: Bước a: Lấy hàng 2 làm chuẩn, nhân hàng 2 với 2/3, để nguyên các hàng khác ⎛1 1 2 1 2⎞ ⎛12 0 0⎞ ⎜ ⎟ ⎜ ⎟ A = ⎜0 1 1 3 ⎟ E = ⎜ − 1 3 2 3 0⎟ ⎜0 1 2 3 2⎟ ⎜ − 1 2 0 1⎟ ⎝ ⎠ ⎝ ⎠ Bước b: Lấy hàng 1 trừ đi hàng 2 nhân 1/2 và lấy hàng 3 trừ đi hàng 2 nhân 1/2 ⎛ 2 3 − 1 3 0⎞ ⎛1 0 1 3⎞ ⎜ ⎟ ⎜ ⎟ A = ⎜0 1 1 3 ⎟ E = ⎜− 1 3 2 3 0⎟ ⎜0 0 4 3⎟ ⎜ − 1 3 − 1 3 1⎟ ⎝ ⎠ ⎝ ⎠ Giai đoạn 3: Bước a: Lấy hàng 3 làm chuẩn, nhân hàng 3 với 3/4, để nguyên các hàng khác ⎛ 2 3 −1 3 0 ⎞ ⎛ 1 0 1 3⎞ ⎜ ⎟ ⎜ ⎟ A = ⎜0 1 1 3⎟ E = ⎜ − 1 3 2 3 0 ⎟ ⎜0 0 1 ⎟ ⎜− 1 4 − 1 4 3 4⎟ ⎝ ⎠ ⎝ ⎠ Bước b: Lấy hàng 1 trừ đi hàng 3 nhân 1/3 và lấy hàng 2 trừ đi hàng 3 nhân 1/3 52
- ⎛ 3 4 − 1 4 − 1 4⎞ ⎛ 1 0 0⎞ ⎜ ⎟ ⎜ ⎟ A = ⎜0 1 0⎟ E = ⎜− 1 4 3 4 − 1 4⎟ ⎜0 0 1⎟ ⎜− 1 4 − 1 4 3 4 ⎟ ⎝ ⎠ ⎝ ⎠ Như vậy A‐1 là: ⎛ 3 / 4 − 1/ 4 − 1/ 4⎞ ⎜ ⎟ A −1 = ⎜ − 1 / 4 3 / 4 − 1 / 4 ⎟ ⎜− 1/ 4 − 1/ 4 3 / 4 ⎟ ⎝ ⎠ Áp dụng phương pháp này chúng ta có chương trình sau: Chương trình 3‐2 #include #include #include #include #include void main() { int i,j,k,n,t,t1; float c,a[50][50],b[50][50]; char tl; clrscr(); printf(ʺ **MA TRAN NGHICH DAO** \nʺ); printf(ʺCho bac cua ma tran n = ʺ); scanf(ʺ%dʺ,&n); printf(ʺVao ma tran ban dau a\nʺ); for (i=1;i
- printf(ʺMa tran ban da nhap\nʺ); printf(ʺ\nʺ); for (i=1;i
- else a[i][j]=0; } i=1; t1=1; while (t1&&(i
- { if (k!=i) { c=a[k][i]; for (j=i;j
- #include #include #include #include #include #define max 50 void main() { int n,l,m,i,j,k,t; float a[max][max],b[max][max],c[max][max]; char tl; clrscr(); printf(ʺCho so hang cua ma tran a : ʺ); scanf(ʺ%dʺ,&n); printf(ʺCho so cot cua ma tran a : ʺ); scanf(ʺ%dʺ,&l); printf(ʺCho so cot cua ma tran b : ʺ); scanf(ʺ%dʺ,&m); printf(ʺ\nNHAP MA TRAN A\nʺ); for (i=1;i
- printf(ʺCo sua ma tran khong(c/k)?ʺ); scanf(ʺ%cʺ,&tl); if (toupper(tl)==ʹCʹ) { printf(ʺCho chi so hang can sua : ʺ); scanf(ʺ%dʺ,&i); printf(ʺCho chi so cot can sua : ʺ); scanf(ʺ%dʺ,&j); printf(ʺa[%d][%d] = ʺ,i,j); scanf(ʺ%fʺ,&a[i][j]); } if (toupper(tl)==ʹKʹ) t=0; } printf(ʺMa tran a ban dauʺ); printf(ʺ\nʺ); for (i=1;i
- t=1; while (t) { printf(ʺCo sua ma tran khong(c/k)?ʺ); scanf(ʺ%cʺ,&tl); if (toupper(tl)==ʹCʹ) { printf(ʺCho chi so hang can sua : ʺ); scanf(ʺ%dʺ,&i); printf(ʺCho chi so cot can sua : ʺ); scanf(ʺ%dʺ,&j); printf(ʺb[%d][%d] = ʺ,i,j); scanf(ʺ%fʺ,&b[i][j]); } if (toupper(tl)==ʹKʹ) t=0; } printf(ʺMa tran b ban dauʺ); printf(ʺ\nʺ); for (i=1;i
- getch(); } Dùng chương trình tính tính hai ma trận ta nhận được kết quả − 1⎞ ⎛ 2 1⎞ ⎛5 0 ⎜ ⎟ ⎜ ⎟ − 1 3 ⎟ ⎛ 1 2 − 2 ⎞ ⎜ 8 − 14 11 ⎟ ⎜ ⎜ 1 0⎟×⎜3 − 4 3 ⎟ = ⎜ 1 ⎜ ⎟ − 2⎟ 2 ⎝ ⎠⎜ ⎜ ⎜ 5 3⎟ ⎜ 14 − 2 − 1 ⎟ ⎟ ⎟ ⎝ ⎠ ⎝ ⎠ §4. GIÁ TRỊ RIÊNG VÀ VEC TƠ RIÊNG CỦA MA TRẬN 1.Khái niệm chung: Trong nghiên cứu lí thuyết và ứng dụng, ta gặp bài toán về ma trận cấp n. Cho một ma trận A cấp n, giá trị λ được gọi là giá trị riêng và vectơ X được gọi là vectơ riêng của ma trận A nếu: AX = λX (1) Vectơ riêng phải là vectơ khác không.Tương ứng với một giá trị riêng có vô số vectơ riêng. Nếu X là một véc tơ riêng tương ứng với giá trị riêng λ thì cX cũng là vec tư riênh ứng với λ. Có nhiều thuật toán tìm giá trị riêng và vectơ riêng của một ma trận. Giả sử ta có ma trận A, gọi E là ma trận đơn vị thì theo (1) ta có: (A‐λE)X = 0 (2) và (A ‐ λE) là ma trận có dạng: ⎛ a11 − λ ⋅⋅⋅ a 1n ⎞ a12 ⎜ ⎟ a 22 − λ ⋅ ⋅ ⋅ ⎜ a2n ⎟ a 21 ⎟ (3) ⎜ ⋅⋅⋅ ⎜ ⎟ ⎜a ⋅ ⋅ ⋅ a nn − λ ⎟ an2 ⎝ n1 ⎠ Như vậy do (2) là hệ phương trình tuyến tính thuần nhất nên điều kiện cần và đủ để λ là giá trị riêng của ma trận trên là định thức của nó bằng không: det(A ‐ λE) = 0 (4) Phương trình (4) được gọi là phương trình đặc trưng của ma trận A. Định thức det(A ‐ λE) được gọi là định thức đặc trưng của ma trận A. Định thức PA(λ) của ma trận trên được gọi là đa thức đặc trưng của ma trận vuông A. Ví dụ tìm vec tơ riêng và trị riêng của ma trận: −3 ⎞ ⎛3 1 ⎜ ⎟ −1 ⎟ ⎜3 1 ⎜2 −2 0⎟ ⎝ ⎠ Trước hết ta tính đa thức đặc trưng của ma trận A: 60
- ⎛3 − λ − 3⎞ 1 ⎜ ⎟ PA (λ ) = ⎜ 3 1 − λ − 1 ⎟ = ( 4 − λ)(λ2 + 4) ⎜2 − 2 − λ⎟ ⎝ ⎠ Nghiệm của PA(λ) = 0 là λ1 = 4, λ2 = 2j và λ3 = ‐2j. Vì trường cơ sở là số thực nên ta chỉ lấy λ = 4. Để tìm vec tơ riêng tương ứng với λ = 4 ta giải hệ ⎛3 − λ − 3 ⎞ ⎛ ξ1 ⎞ 1 ⎜ ⎟⎜ ⎟ 1 − λ − 1 ⎟ × ⎜ ξ2 ⎟ = 0 ⎜ 3 ⎜2 − 2 − λ ⎟ ⎜ ξ3 ⎟ ⎝ ⎠⎝ ⎠ ta nhận được các giá trị của ξ,chúng tạo thành vec tơ riêng ứng với λ. Như vậy khi khai triển định thức ta có một đa thức bậc n có dạng: Pn(λ) = λn ‐ p1λn‐1 ‐ p2λn‐2 ‐ ∙∙∙ ‐ pn = 0 Muốn xác định các hệ số của đa thức đặc tính này ta dùng phương pháp Fadeev‐Leverrier. Ta xét ma trận A: ⎛ a 11 a 12 ⋅ ⋅ ⋅ a 1n ⎞ ⎜ ⎟ ⎜ a 21 a 22 ⋅ ⋅ ⋅ a 2 n ⎟ A=⎜ ⋅⋅⋅ ⋅⋅⋅ ⋅⋅⋅ ⋅⋅⋅ ⎟ ⎜ ⎟ ⎜a a n 2 ⋅ ⋅ ⋅ a nn ⎟ ⎝ n1 ⎠ Ta gọi vết của ma trận A là số: vet(A)= a11 + a22 + ∙∙∙ + ann Khi đó tham số pi của Pn(λ) được các định như sau: p1 = vet(B1) ới B1 = A v p2 = (1/2)vet(B2) với B2 = A(B1‐p1E) p3 = (1/3)vet(B3) với B3 = A(B2‐p2E) ...... Chương trình tính các hệ số pi như sau: Chương trình 3‐4 // Faddeev_Leverrier; #include #include #include #define max 50 void main() { 61
- int i,j,k,m,n,k1,t; float vet,c1,d; char tl; float p[max]; float a[max][max],b[max][max],c[max][max],b1[max][max]; clrscr(); printf(ʺCho bac cua ma tran n = ʺ); scanf(ʺ%dʺ,&n); printf(ʺCho cac phan tu cua ma tran a : \nʺ); for (i=1;i
- scanf(ʺ%fʺ,&a[i][j]); flushall(); } if (toupper(tl)==ʹKʹ) t=0; } printf(ʺMa tran ban dauʺ); printf(ʺ\nʺ); for (i=1;i
- for (i=1;i
- Tương tự ta có: p+1 p+1 p+1 ⎡ ⎤ ⎛ λ2 ⎞ ⎛ λ3 ⎞ ⎛ λn ⎞ A V = λ ⎢ v 1X 1 + v 2 ⎜ ⎟ X 2 + v 3 ⎜ ⎟ X 3 + ⋅ ⋅ ⋅ + v n ⎜ ⎟ X n ⎥ p+1 p+1 ⎜λ ⎟ ⎜λ ⎟ ⎜λ ⎟ 1 ⎝ 1⎠ ⎝ 1⎠ ⎝ 1⎠ ⎢ ⎥ ⎣ ⎦ Khi p rất lớn,vì λ1 > λ2 > λ3 >,..., λn nên: ⎛ λi ⎞ ⎜ ⎟ → 0 khi p → ∞ ⎜λ ⎟ ⎝ 1⎠ Do đó: lim A p V = λp v 1X 1 (6) 1 p→∞ lim A p + 1V = λp + 1v 1X 1 1 p→∞ nghĩa là khi p đủ lớn thì: A p V = λp v 1X 1 1 A V = λp + 1v1X 1 p+1 1 do đó: A p + 1V = λ 1A p V hay: A(A p V ) = λ 1A p V Như vậy A p V là véc tơ riêng của A ứng với λ1 còn giá trị riêng λ1 sẽ là: A p + 1V lim p = λ 1 p→∞ A V Trong thực tế để tránh vượt quá dung lượng bộ nhớ khi λ1 khá lớn, các vectơ Vk được chuẩn hoá sau mỗi bước bằng cách chia các phần tử của nó cho phần tử lớn nhất mk và nhận được vectơ V’k Như vậy các bước tính sẽ là: ‐ cho một vec tơ V bất kì (có thể là V = { 1, 1, 1,..., 1}T) ‐ tính V1 = AV và nhận được phần tử lớn nhất là m1j từ đó tính tiếp V′1 = V1/m1j Một cách tổng quát, tại lần lặp thứ p ta nhận được vectơ Vp và phần tử lớn nhất mpj thì V’p = Vp/ mpj. ′ ‐ tính Vp + 1 = AVp với vp+1,j là phần tử thứ j của Vp+1. Ta có: ′ ⎧lim Vp = X 1 ⎪ p→∞ ⎨ lim v p + 1, j = λ 1 ⎪ p→∞ ⎩ Ví dụ: Tìm giá trị riêng lớn nhất và vec tơ riêng tương ứng của ma trận: ⎛ 17 17 ⎞ 24 30 ⎜ ⎟ ⎜8 7⎟ 13 20 A=⎜ 6⎟ 2 10 8 ⎜ ⎜ − 23 − 43 − 54 − 26 ⎟ ⎟ ⎝ ⎠ Chọn V= {1, 1, 1, 1}T ta tính được 65
- V V1 = V’1 V2 = V’2 AV AV’1 1 88 ‐0.6027 ‐6.4801 ‐0.5578 1 48 ‐0.3288 ‐5.6580 ‐0.4870 1 26 ‐0.1781 0.0818 0.0070 1 ‐146 1 11.6179 1 λ 11.6179 V3 = V’3 V4 = AV’3 V’4 V5 = AV’2 AV’4 ‐3.9594 ‐0.5358 ‐3.6823 ‐0.5218 ‐3.5718 ‐3.6526 ‐0.4942 ‐3.5196 ‐0.4987 ‐3.4791 0.0707 0.0096 0.0630 0.0089 0.0408 7.3902 1 7.0573 1 6.9638 λ 7.3902 7.0573 6.9638 V’5 V6= V’6 V7= V’7 AV’5 AV’6 ‐0.5129 ‐3.5341 ‐0.5075 ‐3.5173 ‐0.5043 ‐0.4996 ‐3.4809 ‐0.4999 ‐3.4868 ‐0.5000 0.0059 0.0250 0.0036 0.0147 0.0021 1 6.9634 1 6.9742 1 λ 6.9634 6.9742 Dùng thuật toán trên ta có chương trình sau: Chương trình 3‐5 #include #include #include #include #include #define max 50 void main() { int i,j,k,n,t; 66
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Thực hành hóa học thực phẩm
23 p | 410 | 84
-
LẬP CÔNG THỨC PHÂN TỬ
3 p | 151 | 32
-
Giáo trình phân tích các tính chất của tích phân phức và quá trình hình thành công thức tính tích phân cauchy p5
5 p | 176 | 12
-
[Toán Học Cao Cấp] Rút - Tối Ưu Phương Trình Phần 3
19 p | 106 | 12
-
Giáo trình hình thành lý thuyết trường và phương thức sử dụng toán tử hamilton p4
5 p | 99 | 10
-
ĐỀ THI THỬ LẦN I - 2012 MÔN SINH MÃ121
6 p | 91 | 9
-
Khảo sát tối ưu hóa điều kiện chiết xuất cao lá Nhàu (Morinda citrifolia L.) bằng phương pháp đáp ứng bề mặt
8 p | 133 | 8
-
Tách chiết và tinh sạch các acid béo không bão hòa từ sinh khối vi tảo biển dị dưỡng schizochytrum mangrovel PQ6
7 p | 113 | 6
-
Nghiên cứu thử nghiệm phương pháp thu nhận chế phẩm axít ribonucleic từ nấm men
3 p | 101 | 4
-
Sinh tổng hợp enzyme β-1,3-Glucanase ở dịch thể nấm hương (Lentinus edodes) và tiềm năng điều chế chất hoạt tính sinh học tăng cường miễn dịch
8 p | 57 | 3
-
Nghiên cứu quá trình thu nhận và bán tinh sạch chitosanase từ nấm mốc Aspergillus toxicarius
10 p | 62 | 3
-
Xác định hàm lượng chì trong một số loại cá ở khu vực sông Kiến Giang huyện Quảng Ninh tỉnh Quảng Bình bằng phương pháp quang phổ hấp thụ nguyên tử
8 p | 83 | 3
-
Nghiên cứu hiệu chỉnh sản phẩm dự báo mưa hạn nội mùa cho khu vực Bắc Trung Bộ bằng phương pháp phân vị với xấp xỉ Gamma (QM–G)
13 p | 6 | 3
-
Sử dụng Rietveld trong phân tích cấu trúc Fe3O4 được tổng hợp bằng phương pháp thủy nhiệt
5 p | 65 | 2
-
Tạo dòng, biểu hiện, tinh sạch và đánh giá khả năng tương tác của 30 amino acid vùng đầu C của độc tố vi khuẩn Clostridium perfringens với thụ thể Claudin-4
9 p | 40 | 2
-
Nghiên cứu ảnh hưởng của tỷ phần pha tạp Co(II) lên kích thước và từ tính của vật liệu nano YFe1-xCoxO3 tổng hợp bằng phương pháp đồng kết tủa
6 p | 52 | 1
-
Nghiên cứu carbon hữu cơ tích lũy trong đất dưới tán rừng phục hồi sau khai thác kiệt (IIb) tại tỉnh Thái Nguyên
5 p | 52 | 1
-
Tổng hợp bột huỳnh quang Y3Al5O1: Eu (iii) phát xạ ánh sáng đỏ xa bằng phương pháp đồng kết tủa
8 p | 84 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn