1. Trang chủ
  2. » Công Nghệ Thông Tin

huong dan su dung malap

106 731 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 106
Dung lượng 8,23 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

hập ma trận Nhập trực tiếp danh sách các phần tử Phát sinh ma trận bằng các hàm sẵn có Nhập từ file Tạo ma trận bằng các file .m Dấu ; kết thúc một dòng.. Tạo ma trận bằng file .m Fi

Trang 1

Giới thiệu môn học

Matlab và Ứng dụng

Lớp 08TH1D, 08TH2D Học kỳ 2 năm học 2009

Học kỳ 2 năm học 2009 2010 2010

GV: ThS Nguyễn Thành Nhựt

1 ntnhut@hcmus.edu.vn

• Phần mềm Matlab 7.0 hoặc mới hơn

• Chủ động tự học với tài liệu cung cấp trước

2 ntnhut@hcmus.edu.vn

Trang 2

Nội dung môn học

1. Giới thiệu sơ lược về phần mềm Matlab

2. Tính toán trên Ma trận, vector

Trang 3

Cách tính điểm

2. Thi Thực hành giữa kỳThi Thực hành giữa kỳ 20%20%

• Tuần lễ 33 (19/04/2010) Tuần lễ 33 (19/04/2010)

3. Thi Thực hành cuối kỳ 70%

5 ntnhut@hcmus.edu.vn

1 Brian Hahn Brian Hahn Daniel T Valentine, Daniel T Valentine, Essential

2002.

2.

2 Các tài liệu khác tại Các tài liệu khác tại www.mathworks.com

4. Trang web môn học

6 ntnhut@hcmus.edu.vn

Trang 4

1 ntnhut@hcmus.edu.vn

Giới thiệu Matlab

Trang 5

3 ntnhut@hcmus.edu.vn

Maple

4 ntnhut@hcmus.edu.vn

Trang 6

5 ntnhut@hcmus.edu.vn

 Chạy file setup.exe từ CD phần mềm và theo

hướng dẫn tiếp theo của chương trình cài đặt.

Trang 7

Toolbox trong Matlab

 Toolboxlà các thư viện hàm sẵn có để hỗ trợ

Khởi động/Thoát chương trình Matlab

Trang 8

Giao diện Matlab

9 ntnhut@hcmus.edu.vn

backspace, delete xoá ký tự trước, sau

home, end về đầu, cuối dòng lệnh

Trang 9

Biểu thức

Biểu thức ((expression expression) trong Matlab ) trong Matlab

Trang 10

Một số ví dụ về biểu thức trong Matlab

Biến

Biến ((variable variable))

 Mỗi khi một cái tên mới xuất hiện với phép

gán, Matlab tạo biến và cấp phát bộ nhớ cho nó

Trang 11

 Tên biến:

 Bắt đầu bằng 1 chữ cái, tiếp theo là chữ cái, chữ

số hoặc dấu gạch dưới “_” Các chữ cái phân biệt

chữ hoa, chữ thường

 Ví dụ:

 Hợp lệ: “x”, “a_b1”, “v1”

 Không hợp lệ: “_a”, “1x”, “abc*”

 Biến đặc biệt “ans”:

 lưu giá trị phép toán vừa tính

 Lệnh “who” và “whos”:

 cho biết thông tin về các biến đang hiện hữu

15 ntnhut@hcmus.edu.vn

Trang 12

Độ ưu tiên phép toán

4 * , / , * , / , \\ trái qua phải

5 + , + , trái qua phải

HhQm thử: >> -2^3 + 4 * (5 – 7) \ 6 * 8

17 ntnhut@hcmus.edu.vn

Kiểu số trong Matlab

Trang 13

Hằng số

Hằng số ((constant constant) trong Matlab ) trong Matlab

eps Epsilon = 2^(Epsilon = 2^( 52)52)

realmax (2 – eps)*2^1023

HaH Not A Number Not A Number Vô định Vô định

19 ntnhut@hcmus.edu.vn

rat a/b (phân số) 2600/9

20 ntnhut@hcmus.edu.vn

Trang 14

Xoá giá trị của biến

 Xoá biến x là xoá vùng nhớ đã cấp phát cho

Hàm

Hàm ((function function))

hàm toán học, từ sơ cấp đến cao cấp

 Có 2 loại hàm trong Matlab

 Không thể thấy source code của các hàm built-in

Ngược lại, có thể xem và chỉnh sửa source code của

các hàm lưu trong các file m.

Trang 15

Xem trợ giúp (Help)

Tìm tên hàm Help \ Functions –

Alphabetical List hoặc tìm trong Index

Tìm hiểu về một vấn đề gì đó Chẳng hạn lĩnh vực toán Help \

Mathematics

23 ntnhut@hcmus.edu.vn

Trang 16

1 ntnhut@hcmus.edu.vn

Ma trận (matrix)

 Ma trận là một mảng hình chữ nhật các con số

 Ma trận gồm các dòng (row) và các cột (column) Các dòng hay cột gọi chung là vector.

Trang 17

hập ma trận

 Nhập trực tiếp danh sách các phần tử

 Phát sinh ma trận bằng các hàm sẵn có

 Nhập từ file

 Tạo ma trận bằng các file m

 Dấu ; kết thúc một dòng.

 Các phần tử cách nhau bằng khoảng trắng hoặc dấu ,

3 ntnhut@hcmus.edu.vn

Trang 18

Đường chéo của ma trận

5 ntnhut@hcmus.edu.vn

Trích một phần tử

 Phần tử Aijđược trích bằng biểu thức A(i,j)

ma trận là một vector cột dài)

 A(8) là phần tử thứ 8 duyệt theo cột từ trái qua phải, từ trên xuống dưới

Trang 19

Chỉ số vượt khỏi kích thước ma trận

Dấu hai chấm “:” (colon)

quan trọng nhất trong Matlab

Trang 20

Dùng dấu hai chấm trong chỉ số

 Ví dụ:

 A(1:k,j) gồm k số đầu tiên ở cột thứ j của ma trận A.

 sum(A(1:4,4)) tính tổng 4 số đầu tiên ở cột thứ 4 của ma trận A.

 Dấu hai chấm đứng một mình sẽ chỉ toàn bộ phần tử của dòng hoặc cột

 Từ khoá “end” chỉ chỉ số cuối cùng của dòng hoặc cột

 Ví dụ:

 A(:,end) chỉ toàn bộ phần tử ở cột cuối cùng.

9 ntnhut@hcmus.edu.vn

Trang 21

16.0 3.0 2.0 13.0 5.0 10.0 11.0 8.0 9.0 6.0 7.0 12.0 4.0 15.0 14.0 1.0

12 ntnhut@hcmus.edu.vn

Trang 22

Tạo ma trận bằng file m

 File m là một file văn bản ghi các dòng lệnh Matlab.

 Có thể soạn thảo bằng MATLAB Editor hoặc bất kỳ trình soạn thảo văn bản nào.

 Lưu file có đuôi m

 Gõ tên file để thực thi nội dung các dòng lệnh trong file.

Ví dụ:

 tạo một file có nội dung như sau:

A=[ 16.0 3.0 2.0 13.0 5.0 10.0 11.0 8.0 9.0 6.0 7.0 12.0 4.0 15.0 14.0 1.0];

 Lưu với tên magik.m Dòng lệnh

>>magik

sẽ đọc file và tạo biến A là ma trận như trên.

13 ntnhut@hcmus.edu.vn

Trang 23

 Không được xoá 1 phần tử kiểu như X(1,2) = []

 Dùng chỉ số với dấu : để xoá 1 hay nhiều phần tử

 X(2:2:10) = [] X  16 9 2 7 13 12 1

15 ntnhut@hcmus.edu.vn

Trang 24

Tiếp theo

1 ntnhut@hcmus.edu.vn

Trang 25

4 ntnhut@hcmus.edu.vn

Trang 26

Copyright © 2006 ntnhut@mathdep.hcmuns.edu.vn

ma trận đơn giản chỉ là một mảng 2 chiều

 Các phép toán cộng, trừ vẫn không đổi giữa

ma trận và mảng Nhưng các phép toán

mang tính nhân sẽ khác

toán (mang tính nhân) trên mảng

Mảng (Array or Vector)

5 ntnhut@hcmus.edu.vn

Phép toán trên vector (mảng 1 chiều)

vector cột [1

2 34]

Trang 28

 Khi thực hiện một phép

toán giữa ma trận và một

con số (vô hướng), nó

thực hiện phép toán trên

Trang 29

253

Trang 30

13 ntnhut@hcmus.edu.vn

Trang 31

Vẽ đồ thị trong

Matlab

1 ntnhut@hcmus.edu.vn

ĐỒ THỊ 2D

 Lệnh plot

>> plot(x,f(x))Với:

f(x)- hàm số cần vẽ

x– vectơ miền giá trị của hàm f

2 ntnhut@hcmus.edu.vn

Trang 34

Ví dụ vẽ đồ thị với các tham số

>> x = 0:pi/20:2*pi;

>> plot(x, sin(x),’-.*r’);

Trang 35

Lệnh hold on

Khi muốn vẽ thêm đồ thị trên đồ thị hiện có, ta sử dụng

lệnh hold on Để tắt chế độ này, sử dụng hold off

Ví dụ vẽ nhiều đồ thị với các tham số

>> x = 0:pi/20:2*pi;

>> plot(x, sin(x),’-.*r’);

>> hold on

>> plot(x, sin(x – pi/2),’ om’);

>> plot(x, sin(x – pi), ‘:bs’);

>> hold off

10 ntnhut@hcmus.edu.vn

Trang 36

11 ntnhut@hcmus.edu.vn

Các tham số khác

 LineWidth: độ rộng của nét vẽ, tính bằng pt

 MarkerEdgecolor: màu của đường viền marker

 MarkerFacecolor: màu bên trong marker

 Markersize: độ lớn của marker, tính bằng pt

Trang 37

14 ntnhut@hcmus.edu.vn

Trang 38

Xác định kiểu trục tọa độ

axis([xmin xmax ymin ymax])

Ví dụ về kiểu trục toạ độ

Trang 39

18 ntnhut@hcmus.edu.vn

Trang 40

Xác định các mốc ghi trên trục tọa độ

Trang 41

Bổ sung một số hàm

Matlab cơ bản

…help, workspace,phép toán tập hợp, vector, ma trận, các hàm toán học, số học, ngày, giờ,

đại số tuyến tính…

1 ntnhut@hcmus.edu.vn

Copyright © 2006 ntnhut@mathdep.hcmuns.edu.vn

Workspace

Cú pháp Ý nghĩa

help

help afunctionafunction xem chú thích một hàm

demo xem các demo của Matlab

ver xem phiên bản Matlab đang dùng

clear

clear var1 var2var1 var2 …… xoá biến xoá biến var1var1, , var2var2, …, …

quit thoát chương trình

2

Trang 42

ismember(A,B) xem phần tử nào của A nằm trong B

setdiff(A,B) liệt kê các phần tử thuộc A nhưng không

thuộc B

setxor(A,B) liệt kê các phần tử của cả 2 tập hợp nhưng

không thuộc phần giao

3

Các hàm Toán học

Cú pháp Ý nghĩa

sin(x), cos(x), tan(x) các hàm lượng giác

asin(y), acos(y), atan(y) các hàm lượng giác ngược

log(x), log10(x), log2(x) logarit cơ số e, 10, 2

2x>= y

4

Trang 43

Copyright © 2006 ntnhut@mathdep.hcmuns.edu.vn

Số học

primes(k) liệt kê tất cả các số nguyên tố nhỏ hơn k

perms(A) liệt kê tất cả các hoán vị của A

nchoosek(A,k) liệt kê tất cả tập con có k phần tử lấy từ A

5

Copyright © 2006 ntnhut@mathdep.hcmuns.edu.vn

Chuyển đổi cơ số

bin2dec(‘0,1’s string’) chuyển số nhị phân sang hệ 10

Trang 44

Copyright © 2006 ntnhut@mathdep.hcmuns.edu.vn

Vector, ma trận

Cú pháp Ý nghĩa

size(A) danh sách kích thước các chiều của A

length(A) kích thước lớn nhất của A

max(A) trị (các trị theo cột) lớn nhất của A

min(A) trị (các trị theo cột) nhỏ nhất của A

linspace(a,b) tạo 100 giá trị cách đều nhau từ a đến b

linspace(a,b,m) tạo m giá trị cách đều nhau từ a đến b

end chỉ số cuối trong mảng

trace(A) tổng các trị trên đường chéo chính của A

pascal(n) tam giác pascal dạng ma trận, đọc theo các

đường chéo phụ

roots(A) nghiệm của ptrình có mảng hệ số là A

polyval(P,x) định giá trị của phương trình ứng với mảng

hệ số A tại giá trị x (P(x))

8

Trang 45

Copyright © 2006 ntnhut@mathdep.hcmuns.edu.vn

?gày, giờ

Cú pháp Ý nghĩa

tic, đoạn lệnh; toc thời gian thực hiện đoạn lệnh

calendar(năm, tháng) in lịch một in lịch một thángtháng của của nămnăm nào đónào đó

eomday(năm, tháng) số ngày trong một số ngày trong một thángtháng của của nămnăm

nào đó

9

Trang 46

Lệnh điều kiện và vòng lặp

…if…elseif…else…end

Switch…end For…end While…end

1 ntnhut@hcmus.edu.vn

hắc lại file.m

 File mghi các dòng lệnh Matlab

 Soạn thảo các file.m bằng MATLAB Editor hoặc bất

kỳ trình soạn thảo văn bản nào

 Gõ tên file để thực thi nội dung các dòng lệnh trong

file

 Có 2 loại file.m:

 Scripts , chỉ thực thi các dòng lệnh, không có tham số

truyền vào hay trả về một giá trị nào cả.

 Functions , có thể nhận tham số truyền vào và trả về giá trị

Trang 47

thi Doan_lenh nếu bieu_thuc_logic là true

Doan_lenh cuối cùng.

4

Trang 48

if a > 0disp(‘dương’)

Biểu thức logic với ma trận

 Nếu A, B là con số , A==B trả về true hay

false theo đúng nghĩa của nó

 Nếu A, B là các ma trận , A==B trả về ma trận

0/1 các vị trí bằng nhau hoặc khác nhau tương

ứng giữa các phần tử của hai ma trận.

6

Trang 49

Biểu thức logic với ma trận

8

Trang 50

case2, if nhuan(nam), ngay=29, else ngay=28, end

otherwise, disp(‘thang khong hop le')

Trang 51

4 6

12

Trang 52

 break dùng để thoát ngang vòng lặp hiện tại

 Ví dụ: Ví dụ: cho n lớn hơn 2, đoạn lệnh sau kiểm tra cho n lớn hơn 2, đoạn lệnh sau kiểm tra

Trang 53

Viết hàm trong Matlab

…nhập, xuất …

…function…

1 ntnhut@hcmus.edu.vn

hắc lại file script m

 Ví dụ: soạn thảo script sau lưu vào file ‘timso.m’

disp('chuong trinh tim mot so trong mot mang so')

a = input('nhap vao mang so : ');

key = input('nhap vao so can tim: ');

fprintf('so can tim o vi tri %d

fprintf('so can tim o vi tri %d \ \n', k) n', k)

else

disp('khong co trong mang ')

end

2

Trang 54

 Khi thực thi file ‘timso.m’ trên cửa sổ dòng lệnh Matlab:

>>timso

chuong trinh tim mot so trong mot mang so

nhap vao mang so : [5 2 1

nhap vao mang so : [5 2 1 - -1 0 5] 1 0 5]

nhap vao so can tim: 5

so can tim o vi tri 1

 fprintf(‘chuoi co dinh dang’)

 Định dạng của Định dạng của fprintffprintf::

Trang 55

Disp và fprintf

 Ví dụ 1:

a = input(‘So thu nhat = ’);

b = input(‘So thu hai = ’);

a = input(‘So thu nhat = ’);

b = input(‘So thu hai = ’);

 Tên hàm phải trùng với tên file.m Gọi lệnh bằng cách

gõ tên hàm (tên file.m)

Trang 58

text

legend

Trang 59

plotyy - Vẽ đồ thị trên 2 tung độ khác

z = (sin(x).^2)-(cos(y).^2);

plot(t,z) axis([0 2*pi -1 1])

Trang 63

Ví dụ biểu đồ quạt

Y = [12 20 15 25 78]

pie(Y)

pie(Y,{‘Giai tich’,’Dai so’,’Xac suat’,…

’Co hoc’,’Tin hoc’})

pie3(Y)

pie(Y,[0 0 1 0 1])

Trang 66

 Đồ thị của dữ liệu rời rạc

stem / stem3 : đồ thị dạng rời rạc trong 2D / 3D

Trang 71

Một số lệnh vẽ đồ thị trong 3 - D

 plot3

 contour / contourf / contour3

 mesh / meshc / meshz

print -dtiff -r200 mygraph.tiff

print –deps2 mygraph.eps

Trang 72

 Sử dụng Plotting Tools

Trang 73

 Tính toán hình thức.

Trang 74

 Khai báo biến:

Khai báo biểu thức:

Trang 75

 Lệnh findsym: tìm biến hình thức trong

Trang 77

 Đạo hàm theo x: diff(f,x)

 Đạo hàm theo y: diff(f,y)

 Đạo hàm cấp 2 theo x: diff(f,x,2)

 Đạo hàm cấp 2 theo y: diff(f,y,2)

 Nếu x là biến mặc định của f thì diff(f,2) tương

đương với diff(f,x,2).

 syms s t

 f = sin(s*t)

 diff(f,t) => ans = cos(s*t)*s

 diff(f,s)=> ans = cos(s*t)*t

 diff(f,t,2) => ans = -sin(s*t)*s^2

 findsym(f,1) => ans = t

Suy ra biến mặc định là t do đó diff(f,2) = diff(f,t,2)

Trang 78

o Đạo hàm đối với ma trận

Trang 79

x a− f x

Trang 81

 collect(f) – f = f(x)

• Đơn giản hàm f bằng các nhóm các biến x có

cùng số mũ

• Trường hợp f có nhiều biến collect(f,y) sẽ chỉ

định gom nhóm theo biến y

• collect(f) gom nhóm theo biến mặc định được

Trang 82

 expand(f) : phân tích biểu thức f.

› expand(h) => ans = exp(a)*exp(b)

› cos(3*x) => ans = 4*cos(x)^3 – 3*cos(x)

Trang 83

 simplify(f): đơn giản biểu thức f.

› f = (1/a^3 + 6/a^2 + 12/a + 8)^1/3

› simplify(f) => ans = ((2*a + 1)^3/a^3)^1/3

› simple(f) => ans = (2*a + 1)/a

› syms x y positive

› h = log(x*y)

› simplify(h) => ans = log(x) + log(y)

› simple(h) => ans = log(x*y)

Trang 84

 subs(expr,old,new): thay thế old bằng new

trong biểu thức expr

Trang 85

 poly2sym(a,x): tạo một đa thức theo biến x

với các hệ số được lấy lần lượt từ mảng a

Trang 87

› K = [a+b, a-b;b-a, a+b]

› G = [cos(s) sin(s);-sin(s) cos(s)]

Trang 88

 solve(f) : giải phương trinh f(x) = 0.

định được chỉ ra trong hàm findsym(f), ở đây

findsym(f) -> ans = x solve(f,a): giải theo

biến được chỉ định là a (tương tự cho b, c)

› solve(f,b)

› ans = -(a*x^2 + c)/x

g(x) Lưu ý: phải đặt trong dấu nháy

Trang 91

f t g t g dt

Trang 94

1 Chọn

3 Đồ thị

Tạo một chương trình GUI đơn

giản

Trang 95

Đặt tên file của chương trình

GUIDE Layout editor Bước 2 Chọn và đặt pushbutton

Trang 96

Chuỗi hiển thị trên button

Tên hàm xử

lý Callback

Chạy thử lần 1 Nothing happen!

Chưa cài đặt xử

Trang 97

Thêm code xử lý Đặt tên cho chương trình

• Nhấn phải chuột vào khoảng trống.

• Chọn Property Inspector

• Chỉnh Name:

Trang 99

Thêm button ‘Plot’ Cài đặt Callback cho button ‘Plot’

Trang 100

Cài đặt callback cho Grid on/off Cài đặt callback cho Clear

Trang 102

Giao diện người dùng (GUI)

Viết lệnh cho các thành phần GUI

Hàm xử lý Callback của Push Button

• Khi nhấn chuột vào một nút nhấn, hàm sau được gọi

Huỳnh Văn Kha

Tên tag của button

VD: nhấn nút thì thay tên của nút (thuộc tính ‘String’ của nút)

Tên tag của button

Một số thuộc tính quan trọng của Button

• Enable: cho phép nhấn (on/off)

• String: chuỗi hiển thị trên nút

5/5/2010 Huỳnh Văn Kha

4

• String: chuỗi hiển thị trên nút

• Tag: tên đối tượng nút phân biệt với các đối tượng khác trong chương trình

• Value: giá trị của nút

Trang 103

hoặc được chọn, ngược lại sẽ bằng thuộc tính Min function togglebutton1_Callback(hObject, eventdata, handles)

eventdata, handles) button_state = get(hObject,'Value');

if button_state == get(hObject,'Max')

% Toggle button ñược nhấn

elseif button_state == get(hObject,'Min')

% Toggle button không ñược nhấn

end

Toggle Button, Radio Button và Check Box

(Nút bật tắt, Nút chọn và Ô check)

• Mặc định Max=1, Min=0

• Cũng có thể thay đổi trạng thái cho các Toggle Button, Radio

Button và Check Box bằng cách đặt lại các thuộc tính

Value, Max, Min

5/5/2010 Huỳnh Văn Kha

togglebutton1 sang trạng thái được nhấn

Edit Text (Ô nhập văn bản)

5/5/2010 Huỳnh Văn Kha

8

Trang 104

• Thuộc tính String chứa chuỗi mà người dùng nhập vào

• Nếu thuộc tính Max, Min được đặt sao cho Max–

Min>1 thì người dùng có thể nhập nhiều hàng

• Callback được gọi khi đang thay đổi nội dung của Edit

Text mà nhấp chuột ra bên ngoài (nhưng vẫn bên trong

GUI), hoặc khi người dùng nhấn Enter (với Edit Text một

hàng), Ctrl+Enter (với Edit Text nhiều hàng)

• Thuộc tính String trả về một chuỗi Muốn nhận dữ liệu số thì sử dụng hàm str2double Nếu người dùng không nhập

số thì str2double trả về NaN function edittext1_Callback(hObject, function edittext1_Callback(hObject, eventdata, handles)

user_entry = str2double(get(hObject,'string'));

if isnan(user_entry) errordlg('You must enter a numeric value','Bad Input','modal')

return end

% Proceed with callback

Slider (thanh trượt)

5/5/2010 Huỳnh Văn Kha

11

• Thuộc tính Value xác định trạng thái của Slider

• Thuộc tính Max và Min xác định cực đại và cực tiểu cho

thuộc tính Value của Slider

List Box và Pop-up Menu

5/5/2010 Huỳnh Văn Kha

12

Trang 105

mục đầu tiên là 1

• Thuộc tính String là mảng cell chứa danh sách các mục

chọn của List Box và Pop-up Menu

chọn của List Box và Pop-up Menu

• Ví dụ dưới đây cho phép lấy giá trị của chuỗi được chọn trong

% Convert from cell array to string

• Khi các phím mũi tên thay đổi thuộc tính Value của List Box, callback Callback được gọi đồng thời đặt thuộc tính SelectionType của figure thành normal

• Phím Enter và Space không làm thay đổi thuộc tính Value

• Phím Enter và Space không làm thay đổi thuộc tính Value của List Box, nhưng Callback vẫn được gọi, đồng thời đặt thuộc tính SelectionType của figure thành open

• Nếu người dùng nhấp đúp chuột thì Callback được gọi sau mỗi lấn nhấp MatLab đặt thuộc tính SelectionType của figure thành normal ở lần thứ nhất và thành open ở lần thứ hai

• Do đó ta có thể biết được người dùng nhấp đúp chuột hay không dựa vào việc truy vấn thuộc tính SelectionType của figure

Button Group

5/5/2010 Huỳnh Văn Kha

5/5/2010 Huỳnh Văn Kha

Ngày đăng: 21/09/2016, 09:03

HÌNH ẢNH LIÊN QUAN

ĐỒ THỊ 2D - huong dan su dung malap
2 D (Trang 31)
ĐỒ THỊ 3D - huong dan su dung malap
3 D (Trang 68)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w