Bài giảng Giải tích mạch và mô phỏng trên máy tính
TRƢỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG
KHOA KỸ THUẬT-CÔNG NGHỆ
------
BÀI GIẢNG
GIẢI TÍCH MẠCH VÀ
MÔ PHỎNG TRÊN MÁY TÍNH
(BẬC: CAO ĐẲNG)
GV:
BỘ MÔN: Điện-Điện tử
KHOA: Kỹ thuật-Công nghệ
Trƣơng Quang Sanh
Quảng Ngãi, 2014
TRƢỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG
KHOA KỸ THUẬT-CÔNG NGHỆ
------
BÀI GIẢNG
GIẢI TÍCH MẠCH VÀ
MÔ PHỎNG TRÊN MÁY TÍNH
BẬC: CAO ĐẲNG
(45 tiết)
GV:
BỘ MÔN: Điện-Điện tử
KHOA: Kỹ thuật-Công nghệ
Trƣơng Quang Sanh
Quảng Ngãi, 2014
1
LỜI NÓI ĐẦU
Điều khiển tự động hóa đóng vai trò quan trọng trong sự phát triển của khoa
học và kỹ thuật. Lĩnh vực này sử dụng rất rộng rãi từ hệ thống phi thuyền không
gian, hệ thống điều khiển tên lửa, máy bay không ngƣời lái, robot, ngƣời máy tay,
máy trong các quá trình sản xuất hiện đại và ngay cả trong đời sống hàng ngày:
Điều khiển nhiệt độ, độ ẩm, …
Khi các máy móc hiện đại ngày nay càng phức tạp hơn nhiều tín hiệu vào và
ra thì việc mô tả hệ thống điều khiển đòi hỏi cần phải tính toán nhanh và xử lý một
lƣợng lớn các lệnh phức tạp.
Nhằm tạo kỹ năng lập trình và mô phỏng để giải quyết các bài toán đại số,
phƣơng trình vi phân, ma trận, các bài toán về phƣơng trình toán lý, trong kỹ thuật
điện, điện tử, tự động… Bài giảng “GIẢI TÍCH MẠCH VÀ MÔ PHỎNG TRÊN
MÁY TÍNH” sẽ giúp cho chúng ta tìm hiểu những nội dung cơ bản nhất về Matlab
và Simulink cũng nhƣ ứng dụng giải quyết những bài toán kỹ thuật điện đơn giản.
Nội dung của bài giảng gồm 8 chƣơng:
Chương 1: Các khái niệm cơ bản
Chương 2: Tính toán trên các mảng số
Chương 3: Nhập - xuất dữ liệu trong MATLAB
Chương 4: Các lệnh điều khiển trong MATLAB
Chương 5: Hàm do người dùng tự lập
Chương 6: Đồ họa trong MATLAB
Chương 7: Các bài toán đại số tuyến tính và phương trình vi phân
Chương 8: Simulink
Do thời gian biên soạn có hạn nên không tránh đƣợc những sai sót, mong
những góp ý xin gửi về Bộ môn Điện - Điện tử, khoa Kỹ thuật - Công nghệ, Trƣờng
Đại học Phạm Văn Đồng. Trân trọng cảm ơn!
Tác giả!
2
MỤC LỤC
LỜI NÓI ĐẦU ............................................................................................................2
MỤC LỤC...................................................................................................................3
Chƣơng 1.....................................................................................................................7
CÁC KHÁI NIỆM CƠ BẢN ......................................................................................7
1.1. Giới thiệu phần mềm matlab ............................................................................7
1.2. Làm việc trong môi trƣờng Matlab...................................................................9
1.3. Các lớp dữ liệu..................................................................................................9
1.4.1. Biến...........................................................................................................10
1.4.2. Cấu trúc mảng của biến............................................................................11
Chƣơng 2...................................................................................................................15
2.1. Biểu thức tính toán số.....................................................................................15
2.1.1. Mảng đơn..................................................................................................15
2.1.2. Mảng nhiều chiều.....................................................................................16
2.2. Khởi tạo các mảng số......................................................................................18
2.3. Các phép tính trên mảng số ............................................................................21
2.3.1. Phép toán giữa mảng với số đơn ..............................................................21
2.3.2. Phép toán giữa mảng với mảng................................................................21
2.3.3. Mảng với lũy thừa ....................................................................................24
2.4. Các hàm toán học............................................................................................26
2.4.1. Các hàm toán học .....................................................................................26
2.4.2. So sánh mảng............................................................................................27
2.5. Xử lý tính toán các mảng số ...........................................................................28
Chƣơng 3...................................................................................................................34
3
3.1. Nhập dữ liệu từ bàn phím bằng hàm input .....................................................34
3.2. Nhập dữ liệu từ chuột bằng hàm menu...........................................................35
3.4. Xuất dữ liệu ra cửa sổ lệnh bằng hàm sprintf.................................................38
3.5. Xuất dữ liệu ra file bằng lệnh save .................................................................39
3.6. Nhập dữ liệu từ file bằng lệnh load ................................................................40
3.7.2. Hàm fprintf...............................................................................................41
Chƣơng 4...................................................................................................................44
4.1. Các lệnh rẽ nhánh: if ... end, switch ... end................................................44
4.1.1. Lệnh if … end...........................................................................................44
4.1.2. Lệnh switch ... end....................................................................................47
4.2. Các lệnh lặp: for ... end, while ... end .............................................................49
4.2.1. Lệnh lặp for … end ..................................................................................49
4.2.2. Lệnh lặp while … end ..............................................................................52
4.3. Các lệnh chuyển trong vòng lặp .....................................................................53
4.4. Lệnh chuyển đến cuối m-file..........................................................................54
4.5. Hàm tạm dừng ................................................................................................56
Chƣơng 5...................................................................................................................59
4
5.1. Hàm biểu thức inline.......................................................................................59
Chƣơng 6...................................................................................................................63
ĐỒ HỌA TRONG MATLAB...................................................................................63
6.1. Mở đầu............................................................................................................63
6.2. Đồ họa 2D.......................................................................................................65
6.3. Đồ họa 3D.......................................................................................................67
6.3.1. Các lệnh Plots...........................................................................................67
6.3.2. Phối cảnh trong đồ hoạ 3-D......................................................................69
6.4. Đồ họa chuyển động .......................................................................................70
6.5. Thiết kế giao diện đồ họa................................................................................72
Chƣơng 7...................................................................................................................76
7.1. Ma trận và ánh xạ tuyến tính ..........................................................................76
7.1.1. Ma trận .....................................................................................................76
7.1.2 Ánh xạ tuyến tính: .....................................................................................78
7.2 Hệ phƣơng trình đại số tuyến tính ...................................................................79
7.3 Giải thuật giải phƣơng trình vi phân................................................................86
Chƣơng 8...................................................................................................................90
8.1.1 Tổng quan về Simulink:............................................................................90
8.1.2. Mô phỏng bộ điều khiển PID.................................................................102
8.1.3 Mô phỏng mạch điện...............................................................................107
5
8.2.1 Đo dòng:..................................................................................................110
8.2.2 Đo áp .......................................................................................................111
TÀI LIỆU THAM KHẢO.......................................................................................115
6
Chƣơng 1
CÁC KHÁI NIỆM CƠ BẢN
1.1. Giới thiệu phần mềm matlab
Đối với lĩnh vực điều khiển - tự động hóa nói riêng và trong lĩnh vực khoa
học - kỹ thuật nói chung, mô phỏng là công cụ quan trọng cho phép khảo sát các đối
tƣợng, hệ thống hay quá trình kỹ thuật - vật lý, mà nhất thiết không phải có đối
tƣợng hay hệ thống thực. Matlab - simulink đƣợc trang bị công cụ mô phỏng mạnh
và các phƣơng pháp mô hình hóa.
Matlab là một bộ chƣơng trình phần mềm lớn của lĩnh vực tính toán số. Tên
bộ chƣơng trình chính là chữ viết tắt từ MATric LABoratory, thể hiện định hƣớng
chính của chƣơng trình là các phép toán vector và ma trận. Phần cốt lõi của chƣơng
trình bao gồm một số hàm toán, các chức năng nhập/xuất cũng nhƣ các khả năng
điều khiển chu trình mà nhờ đó ta có thể dựng nên các đoạn chƣơng trình để thực
thi.
Thêm vào phần cốt lõi là các Toolbox (bộ công cụ) với phạm vi chức năng
chuyên dụng mà ngƣời sử dụng cần. Trong phạm vi giáo trình này chỉ giới thiệu
một số Toolbox liên quan đến mô phỏng mạch, điều khiển - tự động hóa. Đặc biệt,
Simulink là một Toobox có vai trò đặc biệt quan trọng: Một công cụ mạnh phục vụ
mô hình hóa và mô phỏng các hệ thống kỹ thuật - vật lý trên cơ sở sơ đồ cấu trúc
dạng khối.
Trƣớc khi khởi động Matlab, thì ngƣời dùng phải tạo một thƣ mục làm việc
để chứa các file chƣơng trình của mình (ví dụ: E:/thuchanh_matlab).
Matlab sẽ thông dịch các lệnh đƣợc lƣu trong file có dạng *.m. Sau khi cài
đặt Matlab thì việc khởi động chạy chƣơng trình này chỉ đơn giản là nhấp vào biểu
tƣợng của nó trên desktop
, hoặc vào Start\All Programs\Matlab\Matlab
R2008b.
7
Sau khi đã khởi động Matlab xong, thì bƣớc kế tiếp là chỉ thƣ mục làm việc
của mình cho Matlab. Nhấn vào biểu tƣợng
làm việc của mình (ví dụ: E:/thuchanh_matlab).
trên thanh công cụ và chọn thƣ mục
Cửa sổ làm việc của Matlab sẽ nhƣ hình bên dƣới. Nó bao gồm 3 cửa sổ làm
việc chính: Cửa sổ lệnh (Command Window), cửa sổ thƣ mục hiện tại (Current
Directory) và cửa sổ chứa tập các lệnh đã đƣợc sử dụng (Command History).
Để tạo một file.m trong thƣ mục làm việc, ta có thể thực hiện:
Nhấn vào biểu tƣợng
hoặc vào File\New\M-file
Cửa sổ soạn thảo xuất hiện, gõ chƣơng trình cần thiết vào file. Sau khi
đã hoàn tất nhấn vào biểu tƣợng
để lƣu vào thƣ mục hiện tại
(E:/thuchanh_matlab).
8
Để thực thi tập lệnh có trong file.m trong thƣ mục làm việc thì ngƣời dùng chỉ
cần gõ tên file đó và Matlab sẽ tự động thực thi các dòng lệnh có trong file.m này.
1.2. Làm việc trong môi trƣờng Matlab
Matlab là một môi trƣờng tính toán số và lập trình. Giống nhƣ một máy tính
cơ bản, nó làm tất cả các phép tính toán học cơ bản nhƣ cộng, trừ, nhân, chia; giống
nhƣ máy tính kỹ thuật, nó bao gồm: số phức, căn thức, số mũ, logarit, các phép toán
lƣợng giác nhƣ: sin, cos, tang,…; nó cũng giống nhƣ máy tính có thể lập trình, có
thể lƣu trữ, tìm kiếm lại dữ liệu, cũng có thể tạo, bảo vệ và ghi trình tự các lệnh để
tự động phép toán khi giải quyết các vấn đề, có thể so sánh logic, điều khiển thực
hiện lệnh để đảm bảo tính đúng đắn của phép toán. Giống nhƣ các máy tính hiện đại
nhất, nó cho phép biểu diễn dữ liệu dƣới nhiều dạng nhƣ: biểu diễn thông thƣờng,
ma trận đại số, các hàm tổ hợp và có thể thao tác với dữ liệu thƣờng cũng nhƣ đối
với ma trận.
Matlab cung cấp một môi trƣờng phong phú cho biểu diễn dữ liệu và có khả
năng mạnh mẽ về đồ họa, tạo các giao diện riêng cho ngƣời sử dụng GUIs. Thêm
vào đó Matlab đƣa ra những công cụ để giải quyết những vấn đề đặc biệt, gọi là
Toolbox. Ngoài ra ta còn có thể tạo ra các Toolbox cho riêng mình.
1.3. Các lớp dữ liệu
Dữ liệu của Matlab thể hiện dƣới dạng ma trận (hoặc mảng) và có các kiểu dữ
liệu đƣợc liệt kê sau đây:
- Kiểu đơn single, kiểu này có lợi về mặt bộ nhớ nhƣng không đƣợc sử dụng
trong các phép tính toán học vì có độ chính xác kém.
- Kiểu double, kiểu này là kiểu thông dụng nhất của các biến trong Matlab.
- Kiểu sqarse.
- Kiểu uint8, uint16, …
- Kiểu char.
- MatLab còn có một số kiểu dữ liệu khác cao cấp hơn: kiểu cell,
kiểu struct (bản ghi).
9
1.4. Biến và cấu trúc mảng của biến trong MatLab
1.4.1. Biến
Thông thƣờng, kết quả của các biến đƣợc gán cho ans. Sử dụng dấu “=” ta có
thể định nghĩa một biến, đồng thời gán giá trị cho biến đó. Khi nhập tên của một
biến mà không gán giá trị, ta thu đƣợc giá trị hiện tại của biến. Tất cả các biến điều
là biến global trong Workspace.
Giống nhƣ những loại ngôn ngữ lập trình khác, Matlab có những quy định
riêng về tên biến. Trƣớc tiên tên biến phải là một từ, không chứa dấu cách, và tên
biến phải tuân thủ theo các quy tắc sau:
Tên biến có phân biệt chữ hoa và chữ thƣờng.
Ví dụ: Iterms, iterms, itErms và ITERMS là các biến khác nhau.
Tên biến có thể chứa nhiều nhất 31 kí tự, sau kí tự thứ 31 sẽ bị lờ đi.
Ví du: mophongvalaptrinhmatlab
Tên biến bắt đầu phải bằng chữ cái, tiếp theo có thể là chữ số, dấu
gạch dƣới.
Ví dụ: mo_phong_va_lap_trinh_matlab, X356a_b_c
Kí tự chấm câu không đƣợc phép dùng vì nó có những ý nghĩa đặc
biệt
Cùng với những quy định trên, Matlab có những biến đặc biệt trong bảng
sau:
Các biến đặt biệt Giá trị
Gán giá trị cho biến
=
Các phép tính
+ - * / ^
;
Nhập giá trị (còn giữ vai trò dấu cách khi nhập nhiều giá trị
trong cùng một dòng)
Dấu cách khi xuất nhiều giá trị trong cùng một dòng
,
10
Cấp chính xác tƣơng đối khi sử dụng giá trị dấu phẩy động
Eps
i j
Inf
Toán tử ảo
Vô cùng (∞)
Not a Number
Hằng số π
NaN
Pi
1.4.2. Cấu trúc mảng của biến
Để tiện cho việc quản lý và sử dụng, ta có thể tập hợp nhiều biến lại trong một
cấu trúc. Trong đó mỗi mảng có một tên riêng đặt giữa hai dấu ( „ „) có kèm theo giá
trị. Một cấu trúc đƣợc tạo nên bởi lệnh struct(‘name_1’, value_1, ‘name_2’,
value_2,…)
Cấu trúc móc vòng
Các cấu trúc đƣơng nhiên cũng có thể đƣợc tạo nên móc vòng với nhau. Ví dụ
sau đây minh họa khả năng đó: Ta khai báo một cấu trúc có tên componist với mảng
đầu tiên có tên là name, đƣợc gán giá trị là chuỗi kí tự ‘ Quang Ngai’. Một cấu trúc
thứ 2 có tên datum với 3 mảng Day, Month và Year để cất giữ ngày, tháng và năm
sinh. Sau đó ta gán cấu trúc datum vào mảng born của cấu trúc componist:
>> componist = struct('name','Quang Ngai')
componist =
name: 'Quang Ngai'
>> datum.day = 21;
>> datum.month = 'March';
>> datum.Year = 1989;
>> componist.born = datum;
>> componist
componist =
11
name: 'Quang Ngai'
born: [1x1 struct]
Ta gán cho mảng name của cấu trúc componist giá trị mới là chuỗi ký tự „
Pham Van Dong‟. Các giá trị của mảng born đƣợc gán trực tiếp:
>> componist(2).name = 'Pham Van Dong';
>> componist(2).born.Day = 18;
>> componist(2).born.Month = 5;
>> componist(2).born.Year = 2013;
>> componist(2)
ans =
name: 'Pham Van Dong'
born: [1x1 struct]
>> componist(2).born
ans =
Day: 18
Month: 5
Year: 2013
Cấu trúc componist lúc này mang đặc điểm cấu trúc của các vector và vì vậy
nên có thể xử lý các phần tử của cấu trúc đó nhƣ là các vector. Trong ví dụ vừa nêu,
các vector đó chính là hai mảng name và born:
>> componist
componist =
1x2 struct array with fields:
name
born
12
Tóm lại: Trong chƣơng 1: Các khái niệm cơ bản, chúng ta cần nắm vững
cách khởi tạo một file.m, hiểu đƣợc các loại dữ liệu trong Matbab, cũng nhƣ cách
đặt tên biến và các loại biến đặc biệt. Đồng thời để cho tiện cho việc quản lý và sử
dụng ta có khái niệm cấu trúc của biến, hiểu đƣợc cấu trúc móc vòng thông qua ví
dụ trên.
13
CÂU HỎI ÔN TẬP CHƢƠNG 1
Câu 1: Làm thế nào để khởi động Matlab?
Câu 2: Làm thế nào để định nghĩa một biến?
Câu 3: Các quy định khi đặt tên biến là gì?
Câu 4: Làm thế nào để khai báo một ma trận?
Câu 5: Cấu trúc mảng của biến là gì? Làm thế nào để khai báo một struct?
Câu 6: Trình bày các lớp dữ liệu trong Matlab?
14
Chƣơng 2
TÍNH TOÁN TRÊN CÁC MẢNG SỐ
2.1. Biểu thức tính toán số
2.1.1. Mảng đơn
2.1.1.1. Cấu trúc các mảng cơ bản
- Ðể tạo mảng, ta đặt các phần tử của mảng vào giữa hai dấu ngoặc vuông,
giữa hai phần tử của mảng có thể là dấu cách hoặc dấu phẩy.
- Với mảng có số lƣợng phần tử ít thì ta có thể nhập vào trực tiếp, nhƣng với
mảng có số lƣợng lớn các phần tử thì ta có thể dùng các cách sau:
x = first : last : tạo vectơ hàng x bắt đầu tại first, phần tử sau bằng phần tử trƣớc
cộng với 1, kết thúc là phần tử có giá trị bằng hoặc nhỏ hơn last.
x = first : increment : last : tạo vectơ hàng x bắt đầu tại first, giá trị cộng
là increment, kết thúc là phần tử có giá trị bằng hoặc nhỏ hơn last.
x = linspace(first,last,n): tạo vectơ hàng x bắt đầu tại first, kết thúc là last, có n
phần tử.
x = logspace(first,last,n): tạo vectơ hàng không gian logarithm x bắt đầu tại
10 first, kết thúc tại 10 last, có n phần tử.
Ví dụ:
>> a=1:5
a =
1 2 3 4 5
>> b = [6 7 8]
b =
6 7 8
>> c = [a b]
c =
1 2 3 4 5 6 7 8
15
2.1.1.2. Vectơ hàng và vectơ cột
Mảng chứa một hàng và nhiều cột, thƣờng gọi là vectơ hàng. Mảng có một cột
và nhiều hàng gọi là vectơ cột.
Ðể tạo vectơ cột, ta dùng dấu chấm phẩy để phân cách các phần tử. Ngoài ra,
ta cũng có thể dùng các hàm linspace, logspace, hay từ các vectơ hàng, sau đó dùng
phƣơng pháp chuyển vị.
Ví dụ:
>> x=linspace(0,pi,5)
x =
0 0.7854 1.5708 2.3562 2.1416
>> y= x'
y =
0
0.7854
1.5708
2.3562
2.1416
2.1.2. Mảng nhiều chiều
Đối với các MATLAB versions trƣớc 5.0, mảng chỉ có thể có một hoặc hai
chiều. Từ MATLAB 5.0 trở lên thì số chiều của mảng đã tăng lên. Ví dụ:
>> a = [1 0; 0 1]
a=
1
0
0
1
>> b = [2 2; 2 2]
b=
2
2
16
2
2
>> c = [0 3; 3 0]
c=
0
3
3
0
>> d = cat(3,a,b,c)
d(:,:,1)=
1
0
0
1
d(:,:,2)=
2
2
2
2
d(:,:,3)=
0
3
3
0
>> size(d)
ans=
2
2
3
Tạo các mảng hai chiều a, b, c, sau đó ghép chúng lai với nhau thành mảng ba
chiều bằng cách sử dụng hàm cat. Nhƣ vậy mảng d là mảng có hai hàng, hai cột, và
ba trang. Mảng a tạo trang thứ nhất, b là trang thứ hai, và c là trang thứ ba. Thông
số trang diễn tả chiều thứ ba của mảng, cung cấp một cách hình dung về mảng ba
chiều nhƣ mảng hai chiều, các trang xếp thứ tự từ một cho đến cuối nhƣ trong một
quyển sách. Đối với các mảng có số chiều cao hơn, không có tên chung, và nó cũng
rất khó tƣởng tƣợng!
17
Thao tác với mảng nhiều chiều cũng giống nhƣ các thủ tục đƣa ra ở trên đối
với mảng một chiều và hai chiều. Ngoài ra MATLAB còn cung cấp một số hàm
thao tác trực tiếp đối với mảng nhiều chiều:
s = size(A)
Cho n_số chiều của A, trả về vector hàng s với n
phần tử, phần tử thứ i là kích cỡ chiều thứ i của
mảng A
ndims(A)
Số chiều của A, tƣơng tự nhƣ hàm length(size(A))
permute(A, order)
n_số chiều, tƣơng đƣơng với toán tử chuyển vị
chấm.
ipermute(A, order)
shiftdim(A, n)
squeeze(A)
Ngƣợc với hàm permute(A, order)
Thay đổi số chiều của mảng A bằng số nguyên n.
Trả lại số chiều duy nhất của mảng, tƣơng đƣơng
với trả lại số chiều lớn hơn ba.
2.2. Khởi tạo các mảng số
Với mảng có số lƣợng phần tử ít thì ta có thể nhập vào trực tiếp, nhƣng với
mảng có số lƣợng lớn các phần tử thì ta dùng một trong hai cách sau:
- Tạo một mảng bắt đầu là phần tử 0, sau bằng phần tử trƣớc cộng với 0.1,
phần tử cuối là 1, tất cả các phần tử của mảng đƣợc nhân với pi:
>> x= (0:0.1:1)*pi
x=
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
- Tạo mảng gồm các phần tử của x bằng hàm linspace. Cú pháp của hàm này
nhƣ sau:
linspace(giá trị phần tử đầu, giá trị phần tử cuối, số các phần tử)
18
Ví dụ:
>> x = linspace(0,pi,11)
x=
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
Cách thứ nhất giúp ta tạo mảng mà chỉ cần vào khoảng cách giá trị giữa các
phần tử (không cần biết số phần tử), còn cách thứ hai ta chỉ cần vào số phần tử của
mảng (không cần biết khoảng cách giá trị giữa các phần tử).
Ngoài các mảng trên, MATLAB còn cung cấp mảng không gian theo
logarithm bằng hàm
logspace. Cú pháp của hàm logspace nhƣ sau:
logspace(số mũ đầu, số mũ cuối, số phần tử)
Ví dụ:
>> logspace(0,2,11)
ans=
Columns 1 through 7
1.0000 1.5849 2.5119 3.9811 6.3096 10.0000 15.8489
Columns 8 though 11
25.1189 39.8107 63.0957 100.0000
Tạo mảng, giá trị bắt đầu tại 100, giá trị cuối là 102, chứa 11 giá trị.
Các mảng trên là các mảng mà các phần tử của nó đƣợc tạo lên theo một quy
luật nhất định. Nhƣng đôi khi mảng đƣợc yêu cầu, nó không thuận tiện tạo các phần
tử bằng các phƣơng pháp trên, không có một mẫu chuẩn nào để tạo các mảng này.
Tuy nhiên ta có thể tạo mảng bằng cách vào nhiều phần tử cùng một lúc
19
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Giải tích mạch và mô phỏng trên máy tính", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_giai_tich_mach_va_mo_phong_tren_may_tinh.pdf

