Professional Documents
Culture Documents
CHƯƠNG 0. MỞ ĐẦU
1
Giáo trình MATLAB - SIMULINK
MATLAB là công cụ tính toán rất mạnh dễ dùng, trực quan dễ mở rộng và phát
triển.
MATLAB có khả năng liên kết đa môi trường, liên kết dễ dàng với ngôn ngữ lập
trình C++, Visual C, FORTRAN, JAVA, ...
MATLAB có khả năng xử lý đồ hoạ mạnh trong không gian hai chiều và ba chiều.
Các TOOLBOX trong MATLAB rất phong phú, đa năng là công cụ nghiên cứu, thiết
kế cực kỳ hiệu quả trong các lĩnh vực chuyên ngành.
Công cụ mô phỏng trực quan SIMULINK chạy trong môi trường MATLAB giúp cho
bài toán phân tích thiết kế dễ dàng, sinh động hơn.
MATLAB có kiến trúc mở, dễ dàng trong việc xây dựng thêm các module tính toán
kỹ thuật theo tiêu chuẩn công nghiệp và truyền thông.
MATLAB xây dựng sẵn các phép tính xử lý ma trận, các hàm toán học, các phép xử
lý đồ hoạ với thư viện phong phú. Từ đó cho phép người dùng viết các chương trình
(m-files), xây dựng các hàm chuyên tính toán cho mỗi lĩnh vực (gọi là các TOOLBOXS)
như: Điều khiển tự động, Kỹ thuật điện, Điện tử, truyền thông, xử lý ảnh, xử lý tín
hiệu số, tối ưu hoá, mô phỏng các quá trình thực tế ...
Trên cơ sở các thư viện có sẵn, người dùng lập nên các chương trình ứng dụng
riêng theo nhu cầu riêng với cấu trúc chương trình dễ hiểu, rõ ràng và tận dụng sức
2
Giáo trình MATLAB - SIMULINK
mạnh các công cụ có sẵn, đặc biệt công cụ xử lý ma trận để viết nên các ứng dụng mà
thời gian lập trình tiết kiệm rất nhiều. Ngoài ra MATLAB cho phép viết ngôn ngữ
C/C++, FORTRAN trong cửa sổ MATLAB và biên dịch chương trình viết bằng
MATLAB sang C/C++, FORTRAN. Từ đó ta có thể biên dịch sang chương trình ứng
dụng (*.exe) chạy độc lập (stand-alone application).
Đặc biệt, ta có thể viết chương trình C/C++, Fortran, LabView, ... gọi MATLAB
chạy ngầm để tính toán sau đó trả kết quả về chương trình.
Ngoài ra MATLAB có thể chạy trên các máy tính khác nhau, với các hệ điều hành
khác nhau như: MS Windows, X Windows (Unix/Linux) và Macintosh mà vẫn giữ
nguyên các chương trình và dữ liệu, không cần một sự biến đổi nào.
1.2 Giới thiệu SIMULINK và TOOLBOXS trong MATLAB
SIMULINK là công cụ mô phỏng trực quan trong môi trường MATLAB, kết hợp với
thư viện TOOLBOXS rất phong phú cho các ngành, các lĩnh vực kỹ thuật, giúp cho bài
toán phân tích thiết kế dễ dàng, sinh động hơn. Do đó rất thích hợp cho sinh viên nghiên
cứu khoa học, làm báo cáo đồ án môn học, đặc biệt đồ án tốt nghiệp, Các kỹ sư làm
việc trong các lĩnh vực nghiên cứu, điều khiển các hệ thống kỹ thuật, phân tích hệ
thống, ...
Các Toolboxs:
- Control System Toolbox cho lĩnh vực điều khiển - Tự động hoá, Điện tử, Cơ
khí.
- Power System Toolbox cho chuyên ngành Hệ thống điện, Thiết bị điện, Tự
động hoá, Cơ khí.
- Nonlinear control Design blocksets để mô phỏng, phân tích, thiết kế tối ưu hệ
thống điều khiển phi tuyến.
- Signal Processing Toolbox và Image procesing Toolbox dành cho ngành ngành
Điện tử viễn thông, Công nghệ thông tin và Cơ điện tử.
- Communication Toolbox dành cho ngành điện tử viễn thông- TĐH Đo lường
- Data acquisition Toolbox thu thập dữ liệu, xây dựng hệ thu thập dữ liệu vào/ra
với thiết bị bên ngoài.
- Fuzzy logic và Neural Network Toolbox phân tích thiết kế hệ thống trên cơ sở
logic mờ và mạng nơ ron nhân tạo.
- Aerospace Toolbox và Math Toolbox cho ngành Cơ khí - Cơ điện tử.
3
Giáo trình MATLAB - SIMULINK
4
Giáo trình MATLAB - SIMULINK
Hình 2.2 Cửa sổ path Browser soạn đường dẫn tìm kiếm tệp M-file.
5
Giáo trình MATLAB - SIMULINK
»ver hiển thị version của MATLAB, Simulink và Toolboxes
»help <tênlệnh> hướng dẫn sử dụng <tênlệnh> sau help
»helpwin danh sách các lệnh và hướng dẫn sử dụng
»helpdesk cửa sổ trợ giúp trong môi trường Internet Explorer
»demo chạy các chương trình demo cho nhiều lĩnh vực
6
Giáo trình MATLAB - SIMULINK
save fname X Y Z -ASCII -DOUBLE lưu dạng ASCII 16 bit nhị phân.
save fname X Y Z -APPEND bổ sung các biến vào tệp MAT-file đã có.
Hàm save('fname','var1','var2') khi 'fname','var1','var2' là xâu ký tự.
5. load tải giá trị các biến được lưu ở Files trên đĩa vào workspace.
Các cú pháp:
load FNAME tải các biến từ MAT-file 'fname.mat' đã có. Nếu không có fname thì
mặc nhiên là file matlab.mat.
load FNAME X Y Z ... chỉ tải các biến đá chỉ ra (có thể sử dụng ký tự đại diện '*').
load FNAME.EXT tải file ASCII, trong file có thể có chú thích (bắt đầu bởi %).
Kết quả gán cho biến có tên FNAME (không có phần mở rộng)
load FNAME -ASCII hoặc load FNAME -MAT.
Hàm load('fname') sử dụng khi fname được gán dạng xâu ký tự.
6. pwd hiển thị thư mục hiện hành
7. quit hoặc exit thoát khỏi MATLAB
2.1.4 Các phím thao tác trên cửa số dòng lệnh
Home đưa con trỏ về đầu dòng
End đưa con trỏ về cuối dòng
↑ hiển thị lại các lệnh đã xoá trước đó
↓ hiển thị lại các lệnh đã nhập trước đó
←, → di chuyển con trỏ
Ctrl+k xoá từ vị trí con trỏ đến cuối dòng
2.2 Dữ liệu, hàm và cấu trúc lệnh trong MATLAB
2.2.1 Khái niệm dữ liệu và biến
Trong Matlab có các kiểu dữ liệu: (kiểu số, kiểu xâu, kiểu cấu trúc và kiểu files)
Dữ liệu kiểu số: dưới dạng mảng hoặc vectơ các số phức (dạng đại số: a +
jb)
Dữ liệu kiểu xâu: dưới dạng các xâu (char) và mảng các xâu ký tự
Dữ liệu kiểu đối tượng: dạng đối tượng hình ảnh, đồ hoạ, ...
Dữ liệu kiểu cấu trúc: dạng các thành phần (bản ghi và mảng cấu trúc)
Dữ liệu kiểu tệp (files): là các tệp lưu thông tin trên đĩa
Với mỗi kiễu dữ liệu, cần chú ý khi làm việc:
7
Giáo trình MATLAB - SIMULINK
8
Giáo trình MATLAB - SIMULINK
4 5 6
7 8 9
»a = [1 2 3; 4 5 6; 7 8 9]
a=
1 2 3
4 5 6
7 8 9
( ) khai báo tham số vào của hàm hoặc truy cập phần tử ma trận.
Ví dụ: A(1,2) truy cập phần tử a12
... dùng để tiếp tục dòng lệnh dài khi xuống hàng.
9
Giáo trình MATLAB - SIMULINK
Ví dụ: »set(h,’facecolor’,[0 1], ...
‘EdgeColor’,’k’,’Linewidth’,2)
: Tạo vector hoặc ma trận phụ và lặp đi lặp lại các giá trị.
Trong đó:
Khai báo Công dụng
j:k Tạo ra chuỗi j, j+1, j+2,…., k-1, k
j:i:k Tạo ra chuỗi j, j+i, j+2i,….,k-i, k
A(: , j) Chỉ cột thứ j của ma trận A
A(i , :) Chỉ hàng thứ i của ma trận
A(: , :) Chỉ toàn bộ ma trận A
A(j : k) Chỉ phần tử A(j), A(j+1)…A(k) (ưu tiên theo
cột)
A(: , j , k) Chỉ các phần tử A(:, j), A(:, j+1)…A(:, k)
A(:) Chỉ tất cả các thành phần của ma trận A
% đứng trước các lời chú giải trong các câu lệnh.
' đặt sau trên biến ma trận để chuyển vị phức ma trận.
.’ đặt sau trên biến ma trận để chuyển vị ma trận.
Ví dụ: nếu A= [ 4.0000 + 2.0000i 3.0000
5.0000 - 7.0000i 3.0000 + 4.0000i]
thì A’=
4.0000 - 2.0000i 5.0000 + 7.0000i
3.0000 3.0000 - 4.0000i
và A.’=
4.0000 + 2.0000i 5.0000 - 7.0000i
3.0000 3.0000 + 4.0000i
10
Giáo trình MATLAB - SIMULINK
./ hoặc .\ chia phải hay chia trái từng phần tử của ma trận
* nhân hai ma trận với nhau
.* nhân các phần tử tương ứng. Ví dụ: C=A.*B tức là cij =aij*bij
^ luỹ thừa ma trận hay số vô hướng. Ví dụ: a^2 tức là a2
.^ luỹ thừa từng phần tử của ma trận
11
Giáo trình MATLAB - SIMULINK
0 0 0.5000 0.5000
0.5000 0.5000
x/2 1.0000 x./ 2 1.0000
1.5000 1.5000
1
x^y không thực hiện được x.^ y 32
729
1
x^2 không thực hiện được x.^ 2 4
9
2
2^x không thực hiện được 2.^ x 4
8
2.2.2.3 Các phép toán quan hệ và logic
Trong đó: Các toán tử quan hệ thực hiện so sánh từng thành phần của 2 ma trận. Chúng
tạo ra một ma trận có cùng kích thước với 2 ma trận, so sánh với các phần tử là 1 nếu
phép so sánh là đúng và là 0 nếu phép so sánh là sai.
Phép quan hệ ưu tiên thấp hơn phép toán đại số, cao hơn phép toán logic.
12
Giáo trình MATLAB - SIMULINK
6
»A=[1 2 3;4 5 6;7 8 9]
A=
1 2 3
4 5 6
7 8 9
»x>=A
ans =
1 1 1
1 1 1
0 0 0
»x=A
x=
1 2 3
4 5 6
7 8 9
»x==A
ans =
1 1 1
1 1 1
1 1 1
»x=2
x=
2
»x==A
ans =
0 1 0
0 0 0
0 0 0
»x<A
ans =
13
Giáo trình MATLAB - SIMULINK
0 0 1
1 1 1
1 1 1
Phép toán logic có độ ưu tiên thấp nhất so với phép toán đại số và quan hệ.
Ví dụ: Cho phép toán 1>2 & 3+4 thì máy tính sẽ thực hiện 3+4 được 7, sau đó tới
1>2 được 0 rồi thực hiện 0 & 7 và cuối cùng ta được kết quả là 0. (thay 1<2 & 3-4 kết
quả vẫn là 0)
2.2.2.4 Các hàm logic (Logical function)
1. Hàm all Kiểm tra vector/cột ma trận có giá trị nào bằng 0 hay không.
Cú pháp:
y = all(x)
y = all(x,DIM)
Trong đó:
y biến chứa kết quả
y = 1 khi tất cả các phần tử khác 0
y = 0 khi có 1 phần tử bằng 0
x tên vector hay ma trận
DIM hướng kiểm tra ma trận,
DIM = 1 (mặc nhiên) kiểm tra theo cột,
DIM = 2 kiểm tra theo hàng,
DIM = 3 kiểm tra từng phần tử
Ví dụ: » a=[1 2 3]
a=
1 2 3
14
Giáo trình MATLAB - SIMULINK
» y=all(a)
y=
1
» a=[1 2 0]
a=
1 2 0
» y=all(a)
y=
0
» a=[1 2 3;4 5 6;7 -8 9]
a=
1 2 3
4 5 6
0 -8 9
» y=all(a)
y=
0 1 1
» a=[1 2 3; 4 5 0;7 0 9]
a=
1 2 3
4 5 0
7 0 9
» y=all(a)
y=
1 0 0
2. Hàm any Kiểm tra vector/cột ma trận có giá trị nào khác 0 hay không.
Cú pháp:
y = any(x)
y = any(x,DIM)
Trong đó:
y biến chứa kết quả.
y = 1 khi có 1 phần tử khác 0.
15
Giáo trình MATLAB - SIMULINK
y = 0 khi tất cả các phần tử bằng 0.
x tên vector, hay ma trận.
DIM hướng kiểm tra ma trận,
Ví dụ:
» a=[1 2 3];
» y=any(a)
y=
1
» b=[1 0 3 0];
» y=any(b)
y=
1
» c=[1 2 0 4;0 2 0 4;1 2 3 4;3 4 5 6]
c=
1 2 0 4
0 6 7 8
1 2 3 0
5 0 7 8
» y=any(c)
y=
1 1 1 1
» d=[0 0 0 0;0 1 3 0]
d=
0 0 0 0
0 1 3 0
» y=any(d)
y=
0 1 1 0
3. Hàm exist Kiểm tra biến hay file có tồn tại hay không.
Cú pháp:
e = exist(‘name’)
16
Giáo trình MATLAB - SIMULINK
Trong đó:
name: là tên file hay tên biến.
e: biến chứa giá trị trả về.
e Ý nghĩa
0 name không tồn tại trong vùng làm việc
1 name là biến đang tồn tại trong vùng làm việc
2 name đang tồn tại trên đĩa (m-file hoặc file không xác định kiểu)
3 name là MEX-file
4 name là file dịch từ phần mềm Simulink (.mdl)
5 name là hàm của Matlab
6 name là p-file
7 name là thư mục
Ví dụ: »e = exist(‘dir’)
e=
5
4. Hàm find Tìm phần tử trong vector/cột ma trận theo yêu cầu.
Cú pháp:
i = find(x)
[i,j] = find(x)
[i,j,V] = find(x)
Trong đó:
i: chỉ vị trí của phần tử cần tìm trong vector.
i,j: chỉ số hàng và số cột tương ứng của phần tử cần tìm.
V: chứa giá trị của phần tử cần tìm.
x: tên vector, ma trận hay yêu cầu đề ra.
Nếu không nêu ra yêu cầu thì mặc nhiên là tìm các phần tử khác 0.
Yêu cầu thường có mặt các phép toán so sánh và logic.
Ví dụ: » x=[1 8 0 2 3 0]
x=
1 8 0 2 3 0
» k=find(x)
k=
1 2 4 5
17
Giáo trình MATLAB - SIMULINK
» a=[5 0 0;8 0 3]
a=
5 0 0
8 0 3
» [i,j,k]=find(a)
i=
1
2
2
j=
1
1
3
k=
5
8
3
2.2.2.5 Các giá trị đặc biệt MATLAB tự định nghĩa:
pi : hằng số π
i, j : ký hiệu đơn vị ảo.
Nếu biến đặt trùng tên i hoặc j thì nó đè lên ký hiệu i, j (sau đó không sử dụng
được)
inf : đại diện cho giá trị vô cực ∝ (infinite)
NaN: giá trị vô định 0 chia 0 (Not a Number)
eps : độ chính các tương đối
(khi sử dụng định dạng format long, eps = 2.220446049250313e-016)
2.2.3 Các lệnh tương tác vào/ra (Interactive Input/Output)
= lệnh gán (tương tự lệnh gán trong các ngôn ngữ khác)
input nhập dữ liệu từ bàn phím.
Cú pháp: Có 2 dạng:
R = input('How many apples:')
R = input('What is your name:','s') % nhập dữ liệu vào dạng string
18
Giáo trình MATLAB - SIMULINK
R giá trị nhập từ bàn phím
fprintf cho phép in thông số ra theo định dạng.
Cú pháp:
fprintf(định dạng, tham số cần in)
Giải thích: (xem thêm lệch sprintf)
Định dạng bao gồm cả text và các ký tự định dạng đặc biệt (%e, %f, %g, \n,
...,các số và dấu chấm) được ghi trong dấu nháy đơn để điều khiển in các giá trị.
%e : in ra dưới dạng số phảy động
%f : in ra dưới dạng số phảy tĩnh
%g : in ra dưới dạng số phảy tĩnh/động tuỳ thuộc bản thân giá trị
%s : in ra dạng xâu ký tự
\n, \r : xuống dòng (xuống dòng và lùi về đầu dòng)
\t : thêm khoảng tab trống
\\ : đưa ra \
%% : đưa ra %
%o, %x, %u in ra dạng cơ số 8 (o), 16 (x), 10 không dấu
19
Giáo trình MATLAB - SIMULINK
2.2.4 Các lệnh, cấu trúc điều khiển chương trình (Control Flow)
Cấu trúc if, else, elseif: Lệnh điều kiện. Cho phép if lồng nhau
Cú pháp:
if <biểu thức điều kiện>
lệnh; lệnh;
elseif <biểu thức điều kiện>
lệnh; lệnh;
else
lệnh; lệnh;
end;
Ví dụ:
if I = = J
A(I,J) = 2;
elseif abs(I-J) = = 1
A(I,J) = -1;
else
A(I,J) = 0;
end;
Lệnh end kết thúc câu lệnh for, while, switch, try, và if
Cấu trúc switch Dùng trong câu lệnh lựa chọn nhiều trường hợp. Giống như câu
lệnh CASE.. OF trong Pascal
Cú pháp:
switch <biểu thức>
case <giá trị>,
lệnh; ..., lệnh;
case <giá trị1, giá trị2, giá trị3,...>
lệnh; ..., lệnh;
otherwise,
lệnh; ..., lệnh;
end;
Cấu trúc for vòng lặp xác định. Cho phép nhiều vòng for lồng nhau
20
Giáo trình MATLAB - SIMULINK
Cú pháp:
for <biến = biểu thức>,
lệnh; ..., lệnh;
end;
Ví dụ:
for i = 1:n,
for j = 1:n,
a(i,j) = 1/(i+j-1);
end
end
for s = 1.0: -0.1: 0.0; end % steps s with increments of -0.1
Cấu trúc while vòng lặp không xác định. Cho phép lồng nhau.
Cú pháp:
while <biểu thức điều kiện> ,
lệnh; ..., lệnh; end
Lệnh continue quay lại đầu vòng lặp WHILE hoặc FOR
Lệnh break nhảy vô điều kiện ra khỏi lặp WHILE hoặc FOR
Ví dụ:
while 1,
input(‘nhap so duong, thoat khi n<0:’);
if n<=0,
break;
end;
end;
Lệnh global khai báo các biến toàn cục trong chương trình và hàm (dạng .m
files)
Lệnh local khai báo các biến cục bộ trong chương trình và hàm (dạng .m files)
Lệnh echo on/off có/không hiển thị các lệnh M-files trong khi thi hành lệnh.
Lệnh try dùng để bẫy lỗi. Nếu xảy ra lỗi khi thực hiện các lệnh trong TRY thì
chương trình nhảy sang thực hiện các lệnh sau CATCH
21
Giáo trình MATLAB - SIMULINK
Cú pháp: try statement; ...; statement; catch statement; ...; statement; end
2.3 Cách viết chương trình và hàm dạng m-files trong MATLAB
Files chứa mã chương trình MATLAB gọi là m-files. M-files có thể là functions
(hàm) yêu cầu phải trả về các tham số đầu ra, hoặc dạng scripts (chương trình) thi
hành chuỗi các lệnh của MATLAB.
MATLAB nhận biết file là M-file qua tên tập tin mở rộng *.m
Cách tạo function M-files
Định nghĩa hàm: function y = average(x)
tham số hàm (arguments)
tên hàm (function name)
đầu ra (output argument)
từ khoá (keyword)
Cấu trúc hàm m-file
22
Giáo trình MATLAB - SIMULINK
c = sqrt((a.^2)+(b.^2)); c=
8.2109
So sánh chương trình viết bằng script M-Files và function M-Files
script M-Files function M-Files
• Không có tham số đầu vào và đầu ra • Có thể có tham số đầu vào và đầu ra
• Làm việc với dữ liệu trong workspace • Làm việc với dữ liệu, các biến (local/
global) bên trong function và các tham
số vào, ra
• Thuận lợi cho việc thực hiện trình tự
• Thuận lợi cho việc mở rộng ngôn ngữ
các dãy lệnh cần thiết một cách tự động
MATLAB cho ứng dụng của bạn
tại nhiều thời điểm khác nhau
Ví dụ: tính trung bình
function y = average(x)
% AVERAGE Mean of vector elements (tinh gia tri trung binh cua cac phan
tu)
% AVERAGE(X), where X is a vector, is the mean of vector elements.
% Non-vector input results in an error.
[m,n] = size(x);
if (~((m == 1) | (n == 1)) | (m == 1 & n == 1))
error(’Input must be a vector’)
end
y = sum(x)/length(x); % Actual computation
- Cách làm việc khi gọi m-files trong MATLAB theo trình tự sau:
+ Tìm xem đó có phải là biến không
+ Kiểm tra có phải là dạng chương trình đã biên dịch sẵn hay không (*.mex file)
+ Tìm trong thư mục hiện hành
+ Tìm trong các thư mục trong search path
Chú ý: có thể chuyển script file sang function file bằng cách thêm vào:
function <tenham> mà không cần có tham số đầu vào và tham số đầu ra
2.4 Các bài tập ứng dụng **
23
Giáo trình MATLAB - SIMULINK
24
Giáo trình MATLAB - SIMULINK
25
Giáo trình MATLAB - SIMULINK
Ví dụ: »x = [-1.9000 -0.2000 3.4000 5.6000 7.0000];
»y = ceil(x)
y=
-1 0 4 6 7
24. floor làm tròn số về phía số nguyên nhỏ hơn.
Ví dụ: »x = [-1.9000 -0.2000 3.4000 5.6000 7.0000];
»y = floor(x)
y= -2 -1 3 5 7
25. mod mod(x,y): phần dư phép chia x/y có dấu trùng dấu của y
26. rem rem(x,y): phần dư phép chia x/y có dấu trùng dấu của x
27. sign xác định dấu của một biến hoặc phần tử của véc tơ/ma trận.
sign(x) có kết quả bằng 1 nếu x>0, bằng 0 nếu x=0 và bằng –1 nếu x<0
28. gcd ước số chung lớn nhất của các phần tử (Greatest common divisor).
29. lcm bội số chung nhỏ nhất (Least common multiple).
Ví dụ: lcm(A,B) cho bội số chung nhỏ nhất của từng phần tử tương ứng hai ma trận A,
B.
3.2 Các hàm xử lý ma trận và vector
Ký hiệu A là ma trận, X là vectơ, MATLAB cung cấp các hàm sau:
1. length(X) cho ta kích thước vectơ X
2. linspace tạo vector tuyến tính giới hạn trong một khoảng.
Cú pháp:
y = linspace(x1, x2)
y = linspace(x1, x2, n)
Trong đó:
y: tên của vector.
x1, x2: giá trị lớn nhất và nhỏ nhất của vector y.
n: số phần tử của vector y, nếu không có thì mặc định n = 100.
Ví dụ: »y = linspace(1, 10, 7)
y=
1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000
3. logspace tạo vector có giá trị tỷ lệ logarithm trong một khoảng.
Cú pháp:
26
Giáo trình MATLAB - SIMULINK
y = logspace(x1, x2)
y = logspace(x1, x2, n)
Trong đó:
y: tên của vector.
x1, x2: giới hạn giá trị lớn nhất 10^x2 và nhỏ nhất 10^x1 của vector y.
n: số phần tử của vector y. Nếu không có n thì mặc định n = 50.
Ví dụ: »y = logspace(1, 2, 7)
y=
10.0000 14.6780 21.5443 31.6228 46.4159 68.1292 100.0000
4. A=diag(X) nếu X là vectơ thì A là ma trận vuông với đường chéo chính là X
5. X=diag(A,k) lấy các phần tử trên đường chéo (chính khi k=0) lưu vào vec tơ cột
6. det(A) tính định thức ma trận vuông
7. inv(A) tìm ma trận nghịch đảo
8. [m,n] = size(A) : cho kích thước mxn của ma trận A
9. rank(A) hạng ma trận
10. expm(A) hàm eA với A là ma trận
Ví dụ: »kq = expm(3)
kq = 20.0855
11. logm(A) ln(A) với A là ma trận
12. sqrtm(A) A với A là ma trận
13. eye(m,n) tạo ma trận đơn vị mở rộng mxn, eye(n) tạo ra ma trận vuông nxn
14. zeros(m,n) tạo ma trận mxn có các phần tử bằng 0
15. ones((m,n) tạo ma trận mxn có các phần tử bằng 1
16. rand tạo ma trận các phần tử ngẫu nhiên chuẩn ([0 1]).
Cú pháp:
y = rand(n)
y = rand(m,n)
Trong đó:
y: tên ma trận.
n: ma trận có n hàng, n cột.
m, n: ma trận có m hàng, n cột.
Ví dụ: »y = rand(3)
27
Giáo trình MATLAB - SIMULINK
y=
0.9340 0.0920 0.7012
0.8462 0.6539 0.7622
0.5269 0.4160 0.7622
»y = rand(3,5)
y=
0.2625 0.3282 0.9910 0.9826 0.6515
0.0475 0.6326 0.3653 0.7227 0.0727
0.7361 0.7564 0.2470 0.7534 0.6316
17. Xem thêm các hàm randn, sprand, sprandn, ...
18. magic tạo ma trận vuông có tổng của các phần tử trên hàng, cột, đường chéo
bằng nhau (ma phương). Giá trị của mỗi phần tử là dãy số nguyên từ 1 đến n2.
Cú pháp:
A = magic(n)
Trong đó:
n: kích thước ma trận.
Ví dụ: »A = magic(3)
A=
8 1 6
3 5 7
4 9 2
30. max cho giá trị lớn nhất của véc tơ/ma trận.
Cú pháp:
m = max(x)
[m,i] = max(x)
v = max(x,y)
v = max(x,[],DIM)
Trong đó:
x,y: tên vector/ma trận.
v : tên véc tơ.
m: giá trị lớn nhất.
i: vị trí của m. DIM: hướng thực hiện phép toán
28
Giáo trình MATLAB - SIMULINK
Ví dụ: x = [3 5 2 1 4]
»m= max(x)
m=
5
»[m,i] = max(x)
m=
5
i =
2
Cho y = [1 6 8 -5 3]
»v =max(x,y)
v= 3 6 8 1 4
Cho b =[3 6 2
1 7 9
2 8 1]
»m = max(b)
m=
3 8 9
»[m,i] = max(b)
m=
3 8 9
i =
1 3 2
a=
0 3 6
7 1 1
4 6 8
»v = max(a,b)
v=
3 6 6
29
Giáo trình MATLAB - SIMULINK
7 7 9
4 8 8
31. min cho giá trị nhỏ nhất của véc tơ/ma trận.
Cú pháp:
m = min(x)
[m,i] = min(x)
v = min(x,y)
Trong đó:
x,y: Tên ma trận/véc tơ.
v: tên vector.
m: là giá trị nhỏ nhất.
i: là vị trí của m.
DIM: hướng thực hiện phép toán (x là ma trận) DIM=1(mặc nhiên) theo cột, 2: hàng
Ví dụ: x =[ 3 5 2 1 4]
»m = min(x)
m=
1
Cho y =[1 6 8 -5 3]
»v = min(x,y)
v=
1 5 2 -5 3
b= [3 6 2
1 7 9
2 8 1]
»[m,i] = min(b)
m=
1 6 1
i =
2 1 3
a= [0 3 6
7 1 1
30
Giáo trình MATLAB - SIMULINK
4 6 8]
»v = min(a,b)
v=
0 3 2
1 1 1
2 6 1
32. minmax cho giá trị nhỏ nhất và lớn nhất của véc tơ/hàng ma trận.
Cú pháp:
V = minmax(A)
Trong đó:
A: véc tơ/ma trận cần tìm giá trị nhỏ nhất và lớn nhất.
V: véc tơ/ma trận có hai cột chứa giá trị nhỏ nhất và lớn nhất của các hàng.
33. fmin tìm điểm có giá trị nhỏ nhất của hàm số.
Cú pháp:
x = fmin(‘function’,x1,x2)
Trong đó:
x: biến chứa kết quả.
function: tên hàm số.
x1, x2: khoảng khảo sát.
Ví dụ: Tìm giá trị nhỏ nhất của hàm số: x3-2x-5 trong khoảng [0 2]
»x =fmin(‘x.^3-2*x-5’,0,2);
x=
0.8165
»y = x.^3-2*x-5
y=
-6.0887
34. fzero tìm điểm 0 của hàm số.
Cú pháp:
fzero(‘fun’,x0)
Trong đó:
Điểm 0 của hàm số là điểm (0,x), đây cũng chính là nghiệm của hàm số. Nếu hàm
có nhiều nghiệm thì sẽ tìm nghiệm gần giá trị x0.
31
Giáo trình MATLAB - SIMULINK
fun: tên hàm số dạng .m file. Nếu hàm toán học thì thêm @ trước tên hàm.
Ví dụ: Tìm giá trị 0 của hàm số: x2-5x+3.
Trước tiên ta khai báo hàm số f trong tập tin f.m
function y = f(x);
y = x.^2-5*x+3;
Sau đó, tạo tập tin gt0.m:
x = 0:10;
% Giá trị x0 = 0
z = fzero(‘f’,0);
sprinf(‘z = %3f’,z) %z = 0.382
% Giá trị x0 = 2
z = fzero(‘f’,2);
sprintf(‘z = %.3f’,z)
%z = 2.618
z = fzero(‘f’,0); % Vẽ đồ thị hàm số minh họa:
fplot(‘f’,[0,5];
grid;
hold on;
plot(z,0,‘o’);
hold off
3.3 Các thao tác trên dữ liệu chuỗi (STRING)
3.3.1 Khái niệm
Biến chứa dữ liệu string trong MATLAB giống như các biến số thông thường, tức là
biến được nhập, thao tác và lưu trong các vectơ với mỗi phần tử của vectơ là một ký
tự. Việc xác định vị trí của mỗi phần tử biến string thông qua chỉ số của nó. Ma trận
string cũng được sử dụng nhưng các string phải có kích thước bằng nhau.
Ví dụ: nếu a=’toi’ thì a(1)=t và a(1:3)=toi
»b=[‘toi’ ; ‘ten’] thì b(1,1)=t ; b(2,2)=e ; b(1,:)=toi
Kết hợp các chuỗi tạo ra string mới bằng cách:
newst =[str1,str2,str3]
3.3.2 Các hàm xử lý chuỗi
1. isstr/ischar kiểm tra nội dung biến là chuỗi ký tự không.
32
Giáo trình MATLAB - SIMULINK
Cú pháp:
kq = ischar(n)
kq = isstr(n) % chỉ có đến phiên bản MATLAB 5.3
Trong đó:
kq: biến chứa kết quả.
n: tên biến cần kiểm tra.
kq = 1 nếu n là chuỗi ký tự, 0 nếu n không là chuỗi ký tự.
Ví dụ: » n='MATLAB';
» kq=isstr(n)
kq =
1
» m=[1 2 3 4];
» kq=isstr(m)
kq = 0
2. isspace(st) trả lại véc tơ giá trị 0 tại các ký tự trống (1 tại ký tự khác)
3. strcat(st1,st2,...) nối các xâu st1 st2 ... thành dòng
4. strvcat(st1,st2,...) nối các xâu st1 st2 ... thành cột
5. strrep(st1,st2,st3) thay thế xâu st2 trong st1 thành st3
6. findstr(st1,st2) trả về véc tơ vị trí bắt đầu của xâu st2 trong st1
7. strcmp so sánh 2 chuỗi ký tự.
Cú pháp: l = strcmp(s1, s2)
Trong đó:
l: biến chứa kết quả.
s1, s2: chuỗi cần so sánh.
Ví dụ: »a = ‘MatLab WoRkS’
»b = ‘MatLab WoRkS’
»strcmp(a,b)
ans =
1
8. upper cho ra chuỗi ký tự viết hoa.
Cú pháp:
b = upper(s)
33
Giáo trình MATLAB - SIMULINK
Trong đó:
b: biến chứa kết quả.
s: tên biến chứa chuỗi ký tự.
Ví dụ: »a = ‘MaTlab WORks’
»b = upper(a)
b=
MATLAB WORKS
»b = upper(‘MaTlab WORks’)
b=
MATLAB WORKS
9. lower cho ra chuỗi ký tự viết thường.
Cú pháp:
b = lower(s)
Trong đó:
b: biến chứa kết quả.
s: tên biến chứa chuỗi ký tự hay chuỗi ký tự.
10. str2mat tạo ma trận có các phần tử dạng chuỗi.
Cú pháp:
s = str2mat(‘s1’, ‘s2’, …)
Trong đó:
s: tên ma trận kết quả.
s1, s2: chuỗi ký tự.
Ví dụ: »s = str2mat(‘mat’, ‘lab’)
s=
mat
lab
11. blanks tạo khoảng trắng giữa hai hay nhiều chuỗi ký tự theo mong muốn.
Cú pháp:
[S1 blanks(b1) S2 blanks(b2) …blanks(bn) Sn]
Trong đó:
S1, S2, …, Sn: các chuỗi ký tự.
b1, b2: số khoảng trắng.
34
Giáo trình MATLAB - SIMULINK
3.4 Các hàm chuyển đổi dữ liệu
1. abs(str) trả lại giá trị là vectơ với các phần tử là mã ASCII của các ký tự.
Ví dụ: a='abc' thì X=abs(a)= [97 98 99]
2. double(str) chuyển str sang dạng số ( ASCII t.tự hàm abs)
3. char(x) chuyển véc tơ/các dòng ma trận x dạng mã ASCII thành xâu
4. eval chuyển đổi chuỗi ký tự thành biểu thức.
Cú pháp:
kq = eval(‘string’)
Trong đó:
kq: biến chứa kết quả.
‘string’ là các ký số: chuyển thành những con số, là câu lệnh thi hành được.
Ví dụ: » a='199999999';
» eval(a)+1
ans =
200000000
5. setstr(X) chuyển vectơ X với các phần tử là các số nguyên trong khoảng 0
đến 255 thành chuỗi string tương ứng.
Ví dụ: với X = [97 98 99] thì setstr(X)=’abc’
6. num2str(f) chuyển đổi đại lượng vô hướng f thành chuỗi string (dùng hiển thị
ra màn hình các dữ liệu số như lệnh disp)
7. num2str(f,k) chuyển đổi đại lượng vô hướng f thành chuỗi string với k chữ số
8. str2num chuyển chuỗi (dạng số) sang số thực.
Cú pháp:
n = str2num(s)
Trong đó:
s: chuỗi dạng số.
n: số thực.
Ví dụ: »n = str2num(‘456456’)
n= 456456
9. int2str(n) chuyển đổi số nguyên n thành chuỗi string
10. rats(x,strlen) chuyển số thực thành chuỗi string với strlen chiều dài của chuỗi
11. hex2num(hstr) chuyển đổi số theo hệ hexa thành chuỗi string
35
Giáo trình MATLAB - SIMULINK
12. hex2dec(str) chuyển đổi hệ hexa dưới dạng string str thành sô nguyên.
Ví dụ: hex2dec('0f')=15
13. dec2hex(num) chuyển đổi số nguyên sang hexa.
Ví dụ: dec2hex(2748) = 'ABC'.
14. dec2bin(num) chuyển số thập phân num thành số nhị phân.
Ví dụ: dec2bin(23) = '10111'
15. bin2dec(num) chuyển số nhị phân num thành số nguyên.
Ví dụ: bin2dec('010111') returns 23
3.5 Các thao tác trên dữ liệu cấu trúc
3.5.1 Dữ liệu kiểu cấu trúc (Struct)
Mỗi dữ liệu cấu trúc (bản ghi: record) bao gồm nhiều thành phần dữ liệu (các
trường: fields) có kiểu khác nhau, ví dụ thông tin về quản lý con người:
Họ tên tuổi giới tính bậc lương số con bảng chấm công ...
xâu số nguyên logic số thực số nguyên mảng số ...
3.5.1.1 Tạo cấu trúc (Có 2 cách):
36
Giáo trình MATLAB - SIMULINK
type
color
x
• Tạo cấu trúc trực tiếp: Sử dụng dấu chấm ’.’ truy cập các trường của cấu
trúc
Cú pháp:
recname.fielname = value
Trong đó:
recname: tên biến cấu trúc.
fielname: tên biến trường cần tạo.
value : giá trị của fielname.
Ví dụ: »nguoi.hoten = ’Nguyen Van A’;
»nguoi.tuoi = 20;
»nguoi.gtinh = 0;
»nguoi.bluong = 1.52;
»nguoi.ngaycong = [1 1 1 0 1 0 0;1 0 1 0 1 0 0;1 0 0 1 1 0 0;0 1 1 1 0 0 0];
» nguoi
nguoi =
hoten: 'Nguyen Van A'
tuoi: 20
gtinh: 0
bluong: 1.5200
ngaycong: [4x7 double]
3.5.1.2 Các hàm làm việc với cấu trúc
1. fieldnames trả về biến mảng cấu trúc chứa tên các trường.
Cú pháp:
NAMES = fieldnames(S)
Trong đó:
S: biến cấu trúc đã tạo.
NAMES: biến mảng cấu trúc chứa tên các trường của S.
2. rmfield loại bỏ một trường ra khỏi cấu trúc.
Cú pháp:
37
Giáo trình MATLAB - SIMULINK
S = rmfield(S,'field') loại bỏ trường field khỏi cấu trúc S.
S = rmfield(S,FIELDS) loại bỏ một số trường, với FIELDS là mảng các ký tự.
3. isfield kiểm tra biến là một trường của cấu trúc hay không.
Cú pháp:
F = isfield(S,'field') trả về giá trị đúng (1) nếu 'field' là tên một trường của S.
4. getfield lấy nội dung một trường của cấu trúc.
Cú pháp:
F = getfield(S,'field') trả về nội dung của field trong cấu trúc S. tương tự
F=S.field.
Ví dụ: F = getfield(S,{i,j},'field',{k}) %tương tự với lệnh F = S(i,j).field(k).
5. setfield thiết lập nội dung cho các trường.
Cú pháp:
S = setfield(S,'field',V) đặt giá trị V cho trường field của S, tương tự S.field=V.
Ví dụ: S = setfield(S,{i,j},'field',{k},V) %tương tự S(i,j).field(k) = V;
3.5.2 Dữ liệu kiểu mảng cấu trúc (Cell Array)
Có thể tổ chức các cấu trúc thành mảng với mỗi cấu trúc là một phần tử mảng
3.5.2.1 Tạo mảng cấu trúc (Có 2 cách):
38
Giáo trình MATLAB - SIMULINK
Ví dụ1: »lop{1,1}=‘00D’;
»lop{1,2}=55;
»lop{1,3})=[0 1 2;3 4 5];
Ví dụ2: »clear
»lop{1,1}.hoten=‘Nguyen Van A’;
»lop{1,1}.tuoi=20;
»lop{1,2}.hoten=‘Tran B’;
3.5.2.2 Làm việc với mảng cấu trúc
1. sử dụng { } để truy cập đến từng phần tử mảng cấu trúc (cách 1)
và ( ) để truy cập đến từng phần tử mảng cấu trúc (cách 2)
2. celldisp hiển thị nội dung của mảng cấu trúc.
Cú pháp:
celldisp(C) hiển thị nội dung của mảng cấu trúc C
celldisp(C,NAME) hiển thị nội dung cấu trúc C và thay thế tên xâu NAME cho C
Ví dụ: »celldisp(lop)
lop{1} =hoten: 'Nguyen Van A'
tuoi: 20
lop{2} =
hoten: 'Tran B'
» celldisp(lop,'ten')
ten{1} =
hoten: 'Nguyen Van A'
tuoi: 20
ten{2} =
hoten: 'Tran B'
3. cellplot(C) hiển thị bằng đồ hoạ cấu trúc của mảng cấu trúc C
4. cellstr(S) chuyển xâu S sang dạng mảng cấu trúc
5. char(B) chuyển mảng cấu trúc B sang dạng xâu
3.6 Các hàm giao tiếp với tệp dữ liệu (FILES)
Ngoài tệp mat-file đã biết, để tương thích với ngôn ngữ C, MATLAB còn định nghĩa
hai loại tệp dạng văn bản (text) và nhị phân (ASCII) với các cách làm việc khác nhau.
1. fopen mở file hoặc truy xuất dữ liệu của file đang mở.
39
Giáo trình MATLAB - SIMULINK
Cú pháp:
fid = fopen(‘fn’, ‘p’)
Trong đó:
fid: tên biến kiểu số nguyên (0, 1, 2, ...) trỏ đến file đang mở.
fn: tên file (có thể đặt đường dẫn).
Tham số p có các định dạng sau (mặc nhiên là dạng nhị phân):
‘r’: chỉ đọc.
‘r+’: đọc và ghi.
‘w’: xóa tất cả nội dung của file, tạo file mới và mở để ghi.
‘w+’: xóa tất cả nội dung của file, tạo file mới để ghi và đọc.
‘a’ : mở file để bổ sung thông tin (khởi tạo nếu file chưa có)
‘a+’ : mở file để đọc và bổ sung thông tin (tạo nếu chưa có)
'W' : mở file để ghi mà không tự động làm tươi
'A' : mở file để bổ sung mà không tự động làm tươi
‘t’ : mở file dạng văn bản (text). Ví dụ: ‘rt’, ‘wt+’, ...
2. fread đọc dữ liệu dạng nhị phân từ file.
Cú pháp:
[A, COUNT] = fread(FID)
[A, COUNT] = fread(FID,SIZE,PRECISION)
Trong đó:
A: tên biến chứa dữ liệu được đọc vào.
COUNT: số phần tử được đọc vào.
FID: tên biến trỏ đến file cần đọc.
SIZE: kích thước dữ liệu đọc vào, được định dạng bởi:
n: chỉ đọc n phần tử vào cột vector a.
inf: đọc đến hết file.
[m,n]: chỉ đọc vào m cột và n hàng, n có thể bằng inf còn m thì không.
PRECISION: là xâu ký tự (thường ít sử dụng thông số này).
Ví dụ 1: fid = fopen('fread.m','r');
F = fread(fid);
s = setstr(F')
Ví dụ 2: file vd.txt có nội dung:
40
Giáo trình MATLAB - SIMULINK
ABC
1 2 3
fid = fopen(‘vd.txt’,’r’);
[a,c] = fread(fid);
disp(a);
disp(c);
a= 65
32
66
32
67
13
10
49
32
50
32
51
c= 12
Ví dụ 3:
fid = fopen(‘vd1.txt’,’r’);
[a,c] = fread(fid, 4);
disp(a);
disp(c);
a= 65
32
66
32
c= 4
41
Giáo trình MATLAB - SIMULINK
ABCDE
FGHIJ
KLMNO
fid = fopen(‘vd3.txt’,’r’);
[a,c] = fread(fid, [7, inf]);
disp(a);
disp(c);
a= 65 70 75
66 71 76
67 72 77
68 73 78
69 74 79
13 13 13
10 10 10
c=
21
»a’= 65 66 67 68 69 13 10
70 71 72 73 74 13 10
75 76 77 78 79 13 10
3. fwrite ghi đoạn dữ liệu dạng nhị phân thành file.
Cú pháp:
COUNT = FWRITE(FID,A,PRECISION)
Trong đó:
FID: tên biến trỏ đến file cần ghi.
A: tên biến ma trận chứa dữ liệu cần ghi.
COUNT: nhận số phần tử ghi được.
PRECISION: tương tự lệnh FREAD.
Ví dụ 1: fid = fopen('magic5.bin','wb')
fwrite(fid,magic(5),'integer*4')%file nhị phân có 25 phần tử magic 5x5 số nguyên.
Ví dụ 2: Ghi đoạn dữ liệu của biến a thành file a.txt: a = [65 66 67]
42
Giáo trình MATLAB - SIMULINK
43
Giáo trình MATLAB - SIMULINK
0.00 1.00000000
0.10 1.10517092
...
1.00 2.71828183
Ví dụ 2: Tạo file exp.txt có nội dung:
x = 0:2:10;
y = [x, x/2];
fid = fopen(‘exp.txt’, ‘w’);
fprintf(fid, ‘%d’, [2, inf]);
Gán file exp.txt và biến a để xem nội dung:
fid = fopen(‘exp.txt’)
a = fscanf(fid, ‘%d’, [2,inf]);
disp(a);
fclose(fid);
Kết quả 0 2 4 6 8 10
0 1 2 3 4 5
6. sscanf đọc chuỗi ký tự và định dạng lại chuỗi ký tự đó.
Cú pháp:
[a,count] = sscanf(s, ‘format’, size)
Trong đó:
a: tên biến chứa chuỗi ký tự sau khi được định dạng.
count: đếm số phần tử được đọc vào.
size: kích thước sẽ được đọc vào.
format: phần định dạng giống như lệnh sprintf.
Ví dụ: s = ‘3.12 1.2 0.23 2.56’;
»[a, count] = sscanf(s, ‘%f’,3)
a= 3.1200
1.2000
0.2300
count = 3
7. sprintf hiển thị thông tin lên màn hình.
Cú pháp:
44
Giáo trình MATLAB - SIMULINK
s = sprintf(‘ts’,ds)
Trong đó:
s: biến chứa chuỗi số hiển thị trên màn hình.
ts: các tham số định dạng.
ds: danh sách các đối số.
Tham số định dạng thuộc 1 trong 2 kiểu sau:
(1) Chuỗi ký tự: chuỗi sẽ được hiển thị lên màn hình giống như trong câu lệnh.
(2) Chuỗi các tham số định dạng: chuỗi này sẽ không được hiển thị lên màn
hình, nhưng tác dụng điều khiển việc chuyển đổi và cách hiển thị các đối số
được đưa ra trong danh sách các đối số.
Ví dụ các tham số định dạng:
1) %d: đối số là số nguyên được viết dưới dạng thập phân.
s = sprintf(‘Đây là số: %d’,-24)
s = Đây là số: -2
2) %u: đối số là số nguyên viết dưới dạng thập phân không dấu.
s = sprintf(‘Đây là số: %u’,24)
s = Đây là số: 24
3) %o: đối số là số nguyên viết dưới dạng cơ số 8 không dấu.
s = sprintf(‘Đây là số: %o’,9)
s = Đây là số: 11
4) %x: đối số là số nguyên được viết dưới dạng cơ số 16.
s = sprintf(‘Đây là số: %x’,255)
s = Đây là số:ff
5) %f: đối số là số nguyên được viết dưới dạng cơ số 10.
s = sprintf(‘Đây là số: %f’,255)
s = Đây là số: 255.000000
Để định dạng phần thập phân thì thêm vào con số chứa số thập phân cần lấy.
s = sprintf(‘Đây là số: %.3f’, 2.5568)
s = Đây là số: 2.557
6) %c: đối số là 1 ký tự riêng đặc biệt.
s = sprintf(‘Đây là chữ: %c’,’M’)
s = Đây là chữ: M
45
Giáo trình MATLAB - SIMULINK
7)%s: đối số là chuỗi ký tự.
s = sprintf(‘Đây là chuỗi: %s’, ‘Matlab’)
s = Đây là chuỗi: Matlab
8. fclose đóng file đang mở sau khi truy xuất xong.
Cú pháp:
st = fclose(fid)
st = fclose('all') đóng tất cả các file, ngoại trừ fid = 0, 1 và 2.
Trong đó:
fid: tên biến trỏ đến file đang mở. Nếu đóng thành công st=0, nếu không st = -1.
3.7 Các thao tác vẽ và xử lý đồ thị
3.7.1 Các lệnh xử lý trên cửa sổ đồ thị
MATLAB cung cấp thư viện hàm xử lý đồ hoạ rất mạnh và phong phú trong không
gian 2-D và 3-D. Cùng lúc trên 1 trục toạ độ có thể vẽ nhiều đồ thị hoặc phân chia
thành các đồ thị con. Sau đây ta nghiên cứu một số lệnh cơ bản nhất
1. figure(n) tạo ra cửa sổ đồ thị mới với số thứ tự là n. Nếu cửa sổ đã tồn tại thì
chọn đến đồ thị hiện hành để cho các lệnh khác tác dụng lên cửa sổ được chọn.
2. sublot(m,n,p) chia một trang đồ hoạ làm nhiều ô nhỏ để vẽ các đồ thị lên mỗi ô.
Với mxn là số ô sẽ vẽ, p là số thứ tự của ô hiện hành. Lệnh subplot luôn đi trước
lệnh plot để chỉ cho lệnh plot biết sẽ vẽ lên ô nào. Khi cần trở về màn hình đồ
hoạ bình thường (màn hình đơn có một đồ thị) ta gọi lệnh: subplot không có
tham số. Trường hợp có nhiều cửa sổ đồ thị, nên dùng biến để nhận kết quả từ
lệnh plot.
3. hold on/off giữ lại đồ thị hiện hành trong khung màn hình đồ thị để gán thêm
thuộc tính đồ thị hoặc vẽ thêm đồ thị khác mà không xoá đồ thị cũ/có xoá đồ thị
cũ
4. axis([xmin xmax ymin ymax]) xác định khoản giới hạn vẽ cho trục x và y
5. axis([xmin xmax ymin ymax zmin zmax]) xác định khoản giới hạn vẽ cho trục x ,
y và z trong đồ thị 3D
6. axis(‘ij’) quay trục y với hướng dưới theo chiều dương, trên theo chiều âm
7. axis(‘xy’) xét lại trục y với hướng ban đầu
8. axis('square') thay đổi toạ độ trục x,y để có cửa sổ vuông
9. axis('auto') tự động thay đổi kích thước
46
Giáo trình MATLAB - SIMULINK
10. title(‘string’) in tiêu đề chương trình
11. xlabel(‘string’) gán nhãn cho trục x
12. ylabel(‘string’) gán nhãn cho trục y
13. zlabel(‘string’) gán nhãn cho trục z (đối với đồ thị 3-D)
14. legend(‘string1’,’ string2’,...) ghi chú cho đồ thị
15. legend(‘off’) loại bỏ chú thích
16. text(x1,y1, ‘string’) vẽ dòng string lên màn hình đồ hoạ tại toạ độ (x1,y1)
17. gtext(‘string’) vẽ dòng string lên màn hình đồ hoạ tại vị trí bấm chuột
18. zoom on/off cho phép sử dụng nút trái chuột để phóng to đồ thị, nút phải chuột
để thu nhỏ/loại bỏ lệnh zoom
19. [x,y]= ginput(n) đọc n điểm dữ liệu trên màn hình đồ hoạ. Toạ độ [x,y] nhận
được từ vị trí con chuột đang trỏ trên màn hình đồ hoạ.
20. box on/off hiển thị/không hiển thị đường viền hộp đồ thị
21. grid on/off vẽ lên các ô lưới trên mặt phẳng toạ độ/bỏ chức năng vẽ lưới
1. clf : xoá các đối tượng trong cửa sổ figure
2. cla : xoá đồ thị trong ô
22. close, close all xoá màn hình đồ hoạ (xem thêm hướng dẫn trên help)
23. Các thao tác trực tiếp thuộc tính trên màn hình đồ hoạ
Các thao tác này giúp người sử dụng chỉnh sửa lại đồ thị trực tiếp trên màn hình đồ
hoạ. Có 3 thuộc tính với nội dung như sau:
48
Giáo trình MATLAB - SIMULINK
4. plot(x1,y1,’str1’,x2,y2,’str2’,...)
với str1, str2,... là các định dạng theo quy định trên.
Ví dụ: plot(x1,y1,’y-‘,x2,y2,’g--‘)
Có thể cho phép gán thuộc tính đồ thị trong câu lệnh plot
Ví dụ: plot(x1,y1,’y-‘,’LineWidth’,2,’MarkerSize’,10,x2,y2,’g--‘,...
’LineWidth’,1,’MarkerSize’,5)
Trong đó: LineWidth là thuộc tính chiều dày nét vẽ và MarkerSize là chiều cao ký tự
đánh dấu. (Chú ý các ký tự in HOA và in thường).
5. fplot vẽ đồ thị của hàm số dạng function.
Cú pháp:
fplot(‘fun’,[xmin,xmax]
Trong đó:
fun: tên hàm số.
xmin, xmax: xác định khoảng cần vẽ.
Ví dụ:
»fplot(‘x.^3-2*x-5’,[0,2]);
»grid;
Các ví dụ tổng hợp:
Ví dụ1: vẽ đồ thị áp 3 pha hình sin trên cùng một hệ toạ độ
x = linspace(0,4*pi,500); % cho x chay tu o den 4pi voi 500 mau
y1 = 5*sin(x);
y2 = 5*sin(x+2*pi/3);
y3 = 5*sin(x-2*pi/3);
plot(x,y1,x,y2,x,y3);
% Set axis limits and grid lines
grid on
xlabel('Time')
ylabel('Amplitude')
legend('First','Second','Third')
title('3 phase_sin plot')
Ví dụ2: vẽ đồ thị áp 3 pha hình sin trên cùng một cửa sổ với 3 ô đồ thị nhỏ
49
Giáo trình MATLAB - SIMULINK
50
Giáo trình MATLAB - SIMULINK
51
Giáo trình MATLAB - SIMULINK
3. bar(x,y,’width’,0.5) vẽ đồ thị có đặt thuộc tính chiều rộng thanh
Ví dụ:
% Bar plot of a bell shaped curve
x = -2.9:0.2:2.9;
bar(x,exp(-x.*x));
3.7.2.4 Đồ thị dạng hình tròn theo kiểu phần trăm (PIE).
1. pie(x) cho đồ thị hình pie dưới dạng tỉ lệ phần trăm theo các giá trị của
véc tơ thành phần của x.
2. pie(x,tach) tach là véc tơ có giá trị 1/0 để tách/không tách giá trị đồ thị ra khỏi
pie (có cùng kích thước với x).
3. pie(x,nhan) nhan là véc tơ kiểu mảng xâu cấu trúc biểu thị nhãn của các giá trị.
4. pie(x,tach,nhan)
Ví dụ:
x= [1 4 6 7 9]
pie(x)
3.7.2.5 Đồ thị trong toạ đồ cực (POLAR):
1. polar(theta,r) vẽ đồ thị quan hệ bán kính r theo góc theta
Ví dụ:
% Polar plot
t=0:0.01:2*pi;
polar(t,abs(sin(2*t).*cos(2*t)));
3.7.2.6 Đồ thị theo trục toạ độ logarithm (LOG)
1. semilogx(x,y) vẽ đồ thị với thang đo theo trục x là log10 của x, tương đương
plot(log10(x),y)
2. semilogy(x,y) vẽ đồ thị với thang đo theo trục y là log10 của y, tương đương
plot(x,log10(y))
3. loglog(x,y) vẽ đồ thị với thang đo theo trục x và y đều là log10, tương đương
plot(log10(x),log10(y))
Ví dụ:
x=linspace(0,7,100)
y=exp(x)
52
Giáo trình MATLAB - SIMULINK
subplot(2,1,1) ; plot(x,y)
subplot(2,1,2) ; semilogy(x,y)
Ví dụ: tìm nghiệm của phương trình bậc 3 bằng đồ thị
x=linspace(-100,100,1000);
y=x.^3+2*x.^2+3*x-6;
plot(x,y)
[r1,r2]=ginput
% nghiem phuong trinh trong doan [-100 100] la
r1
% kiem ta lai bang lenh roots
r=roots([1 2 3 –6])
3.7.3 Lệnh vẽ trong không gian 3-D **
Bao gồm nhiều lệnh phong phú, xin nêu ra một số lệnh tiêu biểu. Chi tiết hãy nghiên
cứu phần DEMO/visualization và graphic.
3.7.3.1 Đồ thị dạng đường, điểm
1. plot3 (x,y,z) vẽ đồ thị trong toạ độ xyz theo các giá trị các phần tử các véc tơ
2. plot3 (x,y,z, ‘str’) vẽ đồ thị trong toạ độ xyz theo giá trị các phần tử các véc tơ
với định dạng quy định như lệnh plot
3.7.3.2 Đồ thị dạng hoạt cảnh
1. comet3(z) : vẽ đồ thị hệ toạ độ xyz với thời gian kéo dài 0.1
2. comet3(x,y,z) : vẽ đồ thị hệ toạ độ xyz với thời gian kéo dài 0.1
3. comet3(x,y,z,t) : vẽ đồ thị hệ toạ độ xyz với thời gian kéo dài t
3.7.3.3 Đồ thị dạng thanh
1. bar3(x,y,z): vẽ đồ thị thanh với mỗi thanh theo giá trị nằm trong trục z tăng dần.
Ví dụ:
% Bar plot of a bell shaped curve
x = -2.9:0.2:2.9;
bar3(x,exp(-x.*x),sin(x));
3.7.3.4 Đồ thị dạng hình tròn theo kiểu phần trăm
1. pie3(x,y,z) cho đồ thị hình pie dưới dạng tỉ lệ phần trăm theo các giá trị của véc
tơ. Xem thêm cú pháp ở phần 2D.
53
Giáo trình MATLAB - SIMULINK
3.7.3.5 Đồ thị dạng lưới
1. meshgrid(x,y) tạo mảng xấp xỉ hoá hai chiều trong miền khảo sát
2. mesh(z) vẽ mặt lưới trong không gian 3D
Ví dụ: »[X,Y] = meshgrid(-2:.1:2, -2:.1:2);
»Z = X .* exp(-X.^2 - Y.^2);
»mesh(Z)
3. waterfall(z) tương tự mesh nhưng chỉ vẽ theo một hướng.
3.7.3.6 Đồ thị dạng mặt
1. surf(X,Y,Z,C) tạo bề mặt 3 chiều
2. Xem thêm surfl và surfc.
Ví dụ: Vẽ đồ thị lưới của hàm sin(x)/x:
» x=linspace(-10,10);
» y=x;
» [p,q]=meshgrid(x,y);
» R=sqrt(p.^2+q.^2)+eps;
» z=sin(R)./R;
» figure(1);
» mesh(z);
» figure(2);
» waterfall(z);
» figure(3);
» surf(z);
3.8 Các thủ tục in ấn và lưu trữ kết quả
+ Lưu mã nguồn chương trình (dạng m-file, mdl-file của Simulink)
1. Mở và chọn phần chương trình cần copy
2. Copy vào vùng nhớ đệm: Từ menu Edit -> Copy (Ctrl+C)
3. Dán vào báo cáo: Mở báo cáo và chọn Edit -> Paste (Ctrl+V)
+ Lưu đồ thị kết quả:
Chú ý: Đặt tình trạng kết quả đồ thị về dạng wmf-file bằng cách:
Từ đồ thị chọn menu:Edit->Copy Options -> Windows Metafile.
1. Copy đồ thị vào bộ nhớ đệm: Menu Edit -> Copy Figure
2. Dán nội dung bộ nhớ đệm vào báo cáo (xem tương tự trên)
54
Giáo trình MATLAB - SIMULINK
hoặc
2. Copy đồ thị vào file: (Lưu đồ thị dưới dạng tập tin định kiểu)
Menu File-> Export...
Sử dụng các nút thanh công cụ để vẽ, ghi chú trên đồ thị sau đó chèn vào báo cáo
3.9 Các ví dụ và bài tập **
55
Giáo trình MATLAB - SIMULINK
56
Giáo trình MATLAB - SIMULINK
57
Giáo trình MATLAB - SIMULINK
compose(h,p,x,y,z) trả về exp(-z/u)^t
compose(h,p,t,u,z) trả về x^exp(-y/z)
8. finverse tìm nghịch đảo của một biểu thức
Ví dụ: finverse(1/tan(x)) trả về atan(1/x).
f = x^2+y;
finverse(f,y) trả về -x^2+y.
finverse(f) trả về (-y+x)^(1/2) và chú ý phép nghịch đảo không
duy nhất
9. symsum tìm tổng đặc trưng của một biểu thức
10. sym2poly chuyển đa thức đặc trưng thành véc tơ hệ số của nó
Ví dụ: sym2poly(x^3 - 2*x - 5) trả về [1 0 -2 -5]
11. poly2sym chuyển véc tơ hệ số thành đa thức đặc trưng
Ví dụ: poly2sym([1 0 -2 -5]) trả về x^3-2*x-5
poly2sym([1 0 -2 -5],'t') và
t = sym('t')
poly2sym([1 0 -2 -5],t) % cả hai đều trả về
t^3-2*t-5
12. horner đưa đa thức về dạng horner
13. taylor mở rộng chuỗi taylor
14. pretty hiển thị biểu thức đặc trưng tương tự kiểu toán học
15. collect gom tất cả các mục giống nhau
16. factor biểu diễn dưới dạng một đa thức
17. expand mở rộng tất cá các mục
18. simplify đơn giản hoá các biểu thức
Ví dụ: »x = sym(‘x’);
»f = (x^2-1)*(x-2)*(x-3);
»collect(f)
ans =
x^4 - 5*x^3 + 5*x^2 + 5*x - 6
»horner(ans)
ans =
-6 + (5 + (5 + (-5 + x)*x)*x)*x
58
Giáo trình MATLAB - SIMULINK
»factor(ans)
ans =
(x-1)*(x-2)*(x-3)*(x+1)
»expand(f)
ans =
x^4 - 5*x^3 + 5*x^2 + 5*x - 6
»syms x y a
»simplify(sin(x)^2 + 3*x + cos(x)^2 - 5)
ans =
-4+3*x
»simplify(log(2*x/y))
ans =
log(2)+log(x/y)
»simplify((-a^2 + 1)/(1 - a))
ans =
a+1
19. simple tìm biểu thức tương đương có chuỗi ký tự ngắn nhất
Cú pháp: simple(S)
[R,H] = simple(S)
Ví dụ: Nếu sử dụng [R,H] = simple(S) sẽ có tương ứng như sau:
S R H
cos(x)^2+sin(x)^2 1 combine(trig)
2*cos(x)^2-sin(x)^2 3*cos(x)^2-1 simplify
cos(x)^2-sin(x)^2 cos(2*x) combine(trig)
cos(x)+(-sin(x)^2)^(1/2) cos(x)+i*sin(x) radsimp
cos(x)+i*sin(x) exp(i*x) convert(exp)
(x+1)*x*(x-1) x^3-x collect(x)
x^3+3*x^2+3*x+1 (x+1)^3 factor
cos(3*acos(x)) 4*x^3-3*x expand
syms x y positive
log(x) + log(y) log(x*y) combine
20. ezplot vẽ đồ thị hàm đặc trưng
59
Giáo trình MATLAB - SIMULINK
21. Các hàm biến đổi Z, Laplace, Fourier.
4.2 Đa thức và nội suy
4.2.1 Đa thức
1. roots tìm nghiệm của đa thức.
Cú pháp:
r = roots(p)
Trong đó:
r: biến chứa kết quả. p: tên biểu thức.
Ví dụ: Tìm nghiệm của phương trình: x2-1 =0
»p = [1 0 -1];
»r = roots(p)
r=
-1.0000
1.0000
2. poly tạo ra đa thức từ các nghiệm được chỉ định.
Cú pháp:
p = poly(A)
p = poly(r)
Trong đó:
p = poly(A), A là ma trận nxn với các phần tử là các hệ số của đa thức đặc trưng det
(sI-A) (đa thức vế trái phương trình |λI-A|=0), tạo ra vector hàng có n+1 phần tử xếp
theo thứ tự giảm dần số mũ của s. Vậy nếu X = roots(P) thì P = poly(X) với P là vectơ.
p = poly(r), tạo ra vector hàng với các phần tử là các hệ số của đa thức có nghiệm là
các phần tử của vector ngõ ra.
Ví dụ 1: Cho ma trận
A=
1 2 3
4 5 6
7 8 0
»p = poly (A)
p= 1 -6 -72 -27
3. polyval tính giá trị đa thức
60
Giáo trình MATLAB - SIMULINK
Cú pháp:
Y = polyval(P,X),
Trong đó:
P là véc tơ chứa các hệ số của đa thức,
X là giá trị của biến. Nếu x là ma trận/véc tơ, sẽ tính cho toàn bộ giá trị trong X.
4. polyvalm tính giá trị đa thức với tham số là ma trận
Cú pháp:
polyvalm(V,X)
Trong đó:
V là véc tơ chứa các hệ số của đa thức cần tìm,
X là ma trận vuông.
5. residue chuyển đổi giữa dạng khai triển phân số từng phần và dạng đa
thức.
Cú pháp:
[r,p,k]= residue(b,a)
[b,a]= residue(r,p,k)
Trong đó:
[r,p,k]= residue(b,a) tìm giá trị thặng dư, các cực, và các số hạng khai triển phân
số từng phần của 2 đa thức b(s) và a(s) dạng:
−1 −2 −m
b( s ) b1 + b2 s + b 3 s + ..... + b m +1 s
=
a( s ) a1 + a 2 s −1 + a 3 s − 2 + ..... + a n +1 s − n
[b,a]= residue(r,p,k) chuyển dạng khai triển phân số từng phần về dạng đa thức
với các hệ số trong vector a và b.
b( s ) r1 r r
= + 2 + ...... + n + k ( s )
a( s ) s − p1 s − p1 s − pn
Ví dụ: Xác định thành phần tối giản của hàm truyền: F(s)= (2s3+9s+1)/(s3+s2+4s+4)
a=[1 1 4 4]
b=[2 0 9 1]
[r,p,k]=residue(b,a) %Kết quả:
b=
2 0 9 1
61
Giáo trình MATLAB - SIMULINK
a=
1 1 4 4
r=
0.0000 - 0.2500i
0.0000 + 0.2500i
-2.0000
p=
-0.0000 + 2.0000i
-0.0000 - 2.0000i
-1.0000
k=
2
Từ đó hàm truyền tối giản là:
2 + (-2/(s+1)) + (0,25i/(s -j2)) + (-0,25i/(s -j2)) = 2 + (-2/(s+1))+ 1/(s2+4)
6. conv(p1,p2) nhân 2 đa thức p1, p2 thành đa thức tích p1*p2 (rút gọn đa thức)
7. deconv chia hai đa thức.
Cú pháp:
[q,r] =deconv(a,b)
Trong đó:
a,b: véc tơ chứa đa thức.
q: thương số của a, b.
r: số dư (véc tơ có cùng kích thước với a).
Cách khai báo: sắp xếp các hệ số theo thứ tự bậc luỹ thừagiảm dần.
Ví dụ:
Chia 2 đa thức (2x2+3x+6)/(2x+3)
»a = [2 3 6];
»b = [2 3];
»[q,r] = deconv (a,b)
q=
1 0
r=
0 0 6
62
Giáo trình MATLAB - SIMULINK
8. polyder tính đạo hàm đa thức
Cú pháp:
polyder(P)
polyder(A,B)
Trong đó:
P là véc tơ chứa đa thức.
A,B véc tơ chứa tích các đa thức A*B
4.2.2 Nội suy và xấp xỉ
1. polyfit xấp xỉ bảng số liệu bằng đa thức theo phương pháp bình phương bé
nhất
Cú pháp:
P = polyfit(X,Y,N)
Trong đó:
X, Y véc tơ chứa dãy số liệu cần xấp xỉ
N bậc đa thức cần xấp xỉ
P Véc tơ chứa kết quả xấp xỉ đa thức (bậc N)
Ví dụ: »x=[1:.1:3];
»y=rand(1,21);
»p=polyfit(x,y,3) % bậc N=3
p=
-0.3374 2.3974 -5.2936 4.1091
2. interp1,interp2,interp3,interpn nối điểm theo các phương pháp
4.3 Tính vi phân (Differentiation)
4.3.1 Vi phân số
Sử dụng hàm diff để tính vi phân (sai phân) các bậc khác nhau của hàm số bất kỳ.
Các cú pháp:
diff(X) X: véc tơ, kết quả [X(2)-X(1) X(3)-X(2)...X(n)-X(n-1)].
diff(X) X: ma trận, kết quả ma trận hàng [X(2:n,:) - X(1:n-1,:)].
diff(X,N) vi phân bậc N theo t
diff(X,N,DIM) vi phân bậc N theo hướng DIM. 1: cột, 2: hàng.
(Nếu N >= size(X,DIM), DIFF trả về ma trận rỗng).
Ví dụ:
63
Giáo trình MATLAB - SIMULINK
»h = .001; x = 0:h:pi;
»diff(sin(x.^2))/h xấp xỉ đến 2*cos(x.^2).*x
»diff((1:10).^2) có kết quả là 3:2:19
Nếu X = [3 7 5 4 8
0 9 2 6 3
1 6 2 8 7
4 2 8 6 9
3 4 0 8 6]
»diff(X,1,1)
ans =
-3 2 -3 2 -5
1 -3 0 2 4
3 -4 6 -2 2
-1 2 -8 2 -3
»diff(X,1,2)
ans =
4 -2 -1 4
9 -7 4 -3
5 -4 6 -1
-2 6 -2 3
1 -4 8 -2
»diff(X,2,1)
ans =
4 -5 3 0 9
2 -1 6 -4 -2
-4 6 -14 4 -5
»diff(X,2,2)
ans =
-6 1 5
-16 11 -7
-9 10 -7
8 -8 5
64
Giáo trình MATLAB - SIMULINK
-5 12 -10
»diff(X,3,1)
ans =
-2 4 3 -4 -11
-6 7 -20 8 -3
»diff(X,3,2)
ans =
7 4
27 -18
19 -17
-16 13
17 -22
»diff(X,3,3) trả về ma trận rỗng do mảng chỉ có 2 chiều
4.3.2 Sử dụng symbolic
Trong symbolic, cũng dùng hàm diff tính vi phân hàm số bất kỳ.
Cú pháp:
diff(s) vi phân hàm s đối với một biến độc lập được xác định bởi hàm findsym
diff(s,’v’) hoặc diff(s,sym(‘v’)) vi phân hàm s đối với biến v
diff(s,n) vi phân bậc n theo thời gian , với n là số nguyên
diff(s,’v’,n) hoặc diff(s,n,’v’) vi phân bậc n của s theo biến v
Xét các ví dụ sau:
Ví dụ 1: »x = sym(‘x’);
»t = sym(‘t’);
»syms a b
»df=diff(sin(x^2))
df=
2*cos(x^2)*x
»d6f=diff(t^6,6) % đạo hàm bậc 6
d6f =
720
»f= exp(a*x + b)
»diff(f,x); % đạo hàm f theo x
65
Giáo trình MATLAB - SIMULINK
»diff(f,a); đạo hàm f theo a
»diff(f,b,2) % đạo hàm bậc 2 f theo b
Đối với một hàm, A là một vec tơ/ma trận thì diff(A) sẽ vi phân cho từng phần
tử.
Ví dụ 2: »syms a x
»A = [cos(a*x) sin(a*x) ; –sin(a*x) cos(a*x)]
A= [ cos(a*x) sin(a*x)]
[ –sin(a*x) cos(a*x)]
»dy = diff(A)
dy = [ –sin(a*x)*a cos(a*x)*a]
[ –cos(a*x)*a –sin(a*x)*a]
4.4 Tính tích phân (Integration)
4.4.1 Tích phân số
1. trap tính tích phân số theo phương pháp hình thang
Cú pháp:
Z = trapz(Y)
Z = trapz(X,Y)
Z = trapz(X,Y,DIM) hoặc trapz(Y,DIM)
Trong đó:
Y là véc tơ/ma trận hoặc hàm cần tính tích phân. Nếu Y là ma trận thì tính
cho cột.
X véc tơ chỉ vùng cận lấy tích phân (có cùng kích thước với Y)
DIM hướng lấy tích phân (DIM = 1 hoặc 2)
Ví dụ: Nếu Y = [0 1 2
3 4 5]
thì trapz(Y,1) là [1.5 2.5 3.5] và
trapz(Y,2) là [ 2
8 ];
2. quad tính tích phân số theo phương pháp thích nghi cầu phương của
Simpson sử dụng đệ quy.
Cú pháp:
Q = quad(FUN,A,B)
66
Giáo trình MATLAB - SIMULINK
Q = quad(FUN,A,B,TOL)
[Q,FCNT] = quad(...)
quad(FUN,A,B,TOL,TRACE)
quad(FUN,A,B,TOL,TRACE,P1,P2,...)
Trong đó:
FUN hàm cần tính tích phân dạng Y = FUN(X), nếu X là véc tơ thì Y cũng véc tơ.
Nếu hàm .m file thì thêm @ trước tên hàm.
A, B cận lấy tích phân (lớn hơn 1.e-6)
TOL Bước tăng của cận (mặc nhiên là 1.e-3 hoặc 1.e-6 với MATLAB 6.0).
TRACE khác 0 hiển thị giá trị [fcnt a b-a Q].
P1,P2,... các tham số của hàm (nếu có)
Ví dụ: Q = quad('1./(x.^3-2*x-5)',0,2);
F = inline('1./(x.^3-2*x-5)');
Q = quad(F,0,2);
Q = quad(@myfun,0,2);
với myfun.m là M-file:
function y = myfun(x)
y = 1./(x.^3-2*x-5);
3. quad8 tích phân số có kết quả chính xác hơn quad và thực hiện nhanh hơn
4. quadl tích phân số theo phương pháp thích nghi cầu phương của Lobatto
4.4.2 Sử dụng Symbolic
Gọi f là một hàm trong symbolic thì :
int(f) tích phân bất định của hàm f theo một biến độc lập ngầm định
int(f,x) tích phân bất định của hàm f theo biến độc lập x
int(f,a,b) tích phân xác định của hàm f theo biến độc lập trong khoảng [a b]
int(f,x,a,b) tích phân xác định của hàm f theo biến độc lập x trong khoảng [a b]
67
Giáo trình MATLAB - SIMULINK
68
Giáo trình MATLAB - SIMULINK
vars là các biến symbolic.
Ví dụ: »solve(‘p*sin(x) = r’); % sẽ tự chọn biến là ‘x’ và kết quả
ans =
asin(r/p)
»[x,y] = solve(‘x^2 + x*y + y = 3’,’x^2 - 4*x + 3 = 0’) % kết quả là
x=
[ 1]
[ 3]
y=
[ 1]
[ -3/2]
»S = solve(‘x^2*y^2 -2*x- 1=0’,’x^2 - y^2 - 1=0’) % sẽ trả về cấu trúc
S=
x: [8x1 sym]
y: [8x1 sym]
»[u,v] = solve(‘a*u^2 + v^2 = 0’,’u - v = 1’) % sẽ xem ‘a’ là tham số và hai biến u và v.
»S = solve(‘a*u^2 + v^2’,’u - v = 1’,’a,u’) % sẽ xem ‘v’ là tham số, kết quả là S.a và S.u.
»[a,u,v] = solve(‘a*u^2 + v^2’,’u - v = 1’,’a^2 - 5*a + 6’)
% có ba phương trình cho ba biến a, u và v.
»syms a b c x
»S = a*x^2 + b*x + c;
»solve(S)
ans =
[1/2/a*(–b+(b^2–4*a*c)^(1/2))]
[1/2/a*(–b–(b^2–4*a*c)^(1/2))]
»b = solve(S,b)
b=
–(a*x^2+c)/x
Xác định nghiệm và vẽ
»syms x
»s = solve(tan(x)+sin(x)–2);
69
Giáo trình MATLAB - SIMULINK
»X = double(s)
X=
0.8863
–1.8979
2.0766– 1.5151i
2.0766+ 1.5151i
»ezplot(tan(x)+sin(x)–2)
»hold on
»w = –2*pi:pi/2:2*pi;
»plot(w,0*w,’r-.’);
% vẽ điểm trên màn hình
»RX = [X(1), X(2)]
»plot(RX, 0*RX,’gO’)
»text(–1.8,–0.4,’X(2)’)
»text(1.0,–0.4,’X(1)’)
Ví dụ: Tiếp ví dụ trên
»f = cos(2*x) + sin(x) – 1;
»s = solve(f);
% plotting s and f, using
»ezplot(f)
»hold on;
»plot(w,0*w,’r-.’)
»plot(double(s),0*double(s),’gO’)
4.6 Giải phương trình vi phân và hệ phương trình vi phân
4.6.1 Phương pháp số:
Dùng các hàm ODE45, ODE23, ODE113
1. ode45 giải phương trình và hệ phương trình vi phân bậc cao.
Cú pháp:
[T,Y] = ode45(ODEFUN,TSPAN,Y0)
[T,Y] = ode45(ODEFUN,TSPAN,Y0,OPTIONS)
[T,Y] = ode45(ODEFUN,TSPAN,Y0,OPTIONS,P1,P2...)
70
Giáo trình MATLAB - SIMULINK
Trong đó:
TSPAN = [T0 TFINAL] khoảng lấy tích phân của phương trình vi phân y' = f(t,y)
hoặc hệ phương trình vi phân M(t,y)*y' = f(t,y) với M là ma trận. TSPAN = [T0 T1 ...
TFINAL] có thể là véc tơ (luôn tăng hoặc luôn giảm).
Y0 giá trị khởi đầu (tại t = T0)
ODEFUN(T,Y) xâu tên hàm trả về véc tơ cột f(t,y0). Nếu hàm .m file thì thêm @.
Y mảng lưu kết quả (theo hàng)
T véc tơ cột chỉ các thời điểm t.
OPTIONS các giá trị tình trạng (xem thêm hàm ODESET). Giá trị mặc định gồm
sai lệch liên kết 'RelTol' = 1e-3 và véc tơ sai lệch tuyệt đối 'AbsTol' = 1e-6 (tất cả các
thành phần). Nếu không thì OPTIONS=[].
P1, P2, ... các tham số của hàm ODEFUN(T,Y,P1,P2,...) nếu có.
Ví dụ: »[t,y]=ode45(@vdp1,[0 20],[2 0]);
»plot(t,y(:,1));
2. ode23 giải các phương trình và hệ phương trình vi phân.
3. ode113 giải các phương trình và hệ phương trình vi phân.
4.6.2 Sử dụng symbolic **
Dùng hàm dsolve trong toolbox symbolic
Cú pháp:
dsolve('eqn1','eqn2', ...)
Trong đó:
‘eqn1’,’eqn2’,... các phương trình vi phân.
Cách biểu diễn hàm dựa trên cú pháp D:
Dy biểu diễn đạo hàm bậc 1 của hàm y (mặc nhiên)
D2y, D3y, ..., DNy đạo hàm bậc 2,3, ..., N của hàm y (không được dùng t)
Vậy ký hiệu: D2y biểu diễn của d 2 y//dt 2; Dy là biểu diễn của dy/dt
Biến độc lập mặc nhiên là 't'. Nếu muốn thay đổi biến độc lập phải thêm tên
biến đó vào cuối cùng của biểu diễn hàm (không được dùng tên D).
Các điều kiện đầu cũng ở dạng phương trình như là 'y(a)=b' hoặc 'Dy(a) = b' với
y là biến độc lập và a, b là các hằng số.
Nếu thiếu điều kiện đầu thì các hằng số tích phân mặc nhiên thêm vào C1, C2, ...
Với hệ phương trình vi phân, kết quả (nghiệm) là một cấu trúc.
71
Giáo trình MATLAB - SIMULINK
Ví dụ 1: »dsolve('Dx = -a*x')
ans =
exp(-a*t)*C1
»x = dsolve('Dx = -a*x','x(0) = 1','s')
x=
exp(-a*s)
»y = dsolve('(Dy)^2 + y^2 = 1','y(0) = 0')
y=
[ sin(t)]
[ -sin(t)]
»S=dsolve('Df=f+g','Dg=-f+g','f(0)=1','g(0)=2') % trả về cấu trúc S
S.f =
exp(t)*cos(t)+2*exp(t)*sin(t)
S.g =
-exp(t)*sin(t)+2*exp(t)*cos(t)
»Y = dsolve('Dy = y^2*(1-y)') % Kết quả
Y=
t+1/y-log(y)+log(-1+y)+C1=0
Ví dụ 2: phương trình vi phân bậc 1:
»y = dsolve('Dy= y0*y') % giai phuong trinh dy/dt=y0*y %ket qua
y=
C1*exp(y0*t)
Chú ý: phương trình sau cho kết quả khác
»y = dsolve(‘Dyt= y0*y’) % giai phuong trinh dy/dt=y0*y % ket qua
y=
y0*y*t+C1
Ví dụ 3: giải hệ phương trình vi phân đơn giản
»[u,v] = dsolve('Du = v', 'Dv = u')
u=
1/2*C1*exp(t)-1/2*C1*exp(-t)+1/2*C2*exp(-t)+1/2*C2*exp(t)
v=
1/2*C1*exp(-t)+1/2*C1*exp(t)+1/2*C2*exp(t)-1/2*C2*exp(-t)
72
Giáo trình MATLAB - SIMULINK
Ví dụ 4: hệ pt vi phân 3 ẩn với kết quả dạng cấu trúc với 3 ẩn f, g, h
»S = dsolve('Df=g','Dg=h','Dh=-f')
S=
f: [1x1 sym]
g: [1x1 sym]
h: [1x1 sym]
Để hiển thị giá trị lệnh dạng cấu trúc, ta dùng cách gọi S.f để biểu diễn nghiệm
f, tương tự với các nghiệm S.g, S.h.
»S.h
ans =
-1/3*C1*3^(1/2)*exp(1/2*t)*sin(1/2*t*3^(1/2))-
1/3*C1*exp(1/2*t)*cos(1/2*t*3^(1/2))+1/3*C1*exp(-t)-
1/3*C2*3^(1/2)*exp(1/2*t)*sin(1/2*t*3^(1/2))+1/3*C2*exp(1/2*t)*cos(1/2*t*3^(1/2))-
1/3*C2*exp(-t)+1/3*C3*exp(-t)+2/3*C3*exp(1/2*t)*cos(1/2*t*3^(1/2))
4.7 Các ví dụ ứng dụng **
Giải phương trình vi phân với điều kiện đầu
d3u/dx3 =u
u(0) = 1, u'(0) = –1, u''(0) = pi
Ta có câu lệnh:
»u = dsolve('D3u=u','u(0)=1','Du(0)=–1','D2u(0) = pi','x')
Giải hệ phương trình vi phân có điều kiện đầu
[f,g] = dsolve('Df=3*f+4*g, Dg =–4*f+3*g', 'f(0) = 0, g(0) = 1')
dsolve('Df = f + sin(t)', 'f(pi/2) = 0')
dsolve('D2y = -a^2*y', 'y(0) = 1, Dy(pi/a) = 0')
S = dsolve('Dx = y', 'Dy = -x', 'x(0)=0', 'y(0)=1')
S = dsolve('Du=v, Dv=w, Dw=-u','u(0)=0, v(0)=0, w(0)=1')
w = dsolve('D3w = -w','w(0)=1, Dw(0)=0, D2w(0)=0')
y = dsolve('D2y = sin(y)'); pretty(y)
73
Giáo trình MATLAB - SIMULINK
74
Giáo trình MATLAB - SIMULINK
uimenu(H,...) tạo một đối tượng menu mới với H là đối tượng cha ‘Parent’. H có
thể là figure handle, menu handle, hoặc context menu handle. Nếu H là figure handle,
UIMENU tạo menu trên menu bar tại đỉnh của cửa sổ. Nếu H là handle menu trên menu
bar, một menu item mới đổ xuống trên menu bar. Nếu H là context menu, sẽ tạo ra menu
item trên context menu.
Các properties có thể thiết lập cặp tham số PropertyName/PropertyValue cho đối
tượng hoặc được thay đổi sau đó bằng lệnh SET.
Lệnh get(H) lấy danh sách và giá trị các thuộc tính của đối tượng (H) trong
UIMENU.
Lệnh set(H) đặt danh sách và giá trị các thuộc tính của đối tượng (H) trong
UIMENU.
5.1.2 Phương pháp sử dụng GUIDE (GUI design)
Sử dụng tiện ích có sẵn mà MATLAB cung cấp. Đó là chương trình GUIDE
(GUI design). GUIDE cung cấp cho lập trình viên một giao diện trực quan gồm các nút
chức năng (ví dụ: nút bấm Push, văn bản tĩnh text, dữ liệu nhập edit, nút chọn radio,
nút kiểm check, ... như hình 5.1) và giao diện Menu Editor trên cửa sổ figure để thiết
kế giao diện vào ra như hình 5.4 và từ đó tạo các cấu trúc chương trình, gọi các lệnh,
hàm (chương trình con) giải quyết các bài toán đặt ra theo yêu cầu. Sau khi tạo xong,
ngôn ngữ sẽ tự động sinh ra mã nguồn (m-file) tương ứng với từng thao tác (như ta viết
lệnh theo cách 1). Ngoài ra, phương pháp còn tạo ra một file *.mat để lưu cấu hình giao
diện.
Để thực hiện, tại dấu nhắc lệnh MATLAB gõ lệnh:
»guide % ta có các cửa sổ giao diện như sau:
nút công cụ
soạn và đặt
thuộc tính
75
Giáo trình MATLAB - SIMULINK
Hình 5.1 Cửa sổ giao diện người dùng trực quan
Trong cửa sổ này có các công cụ để thiết kế menu, các nút bấm, soạn và đặt
thuộc tính, canh lề các nút bấm, đặt chế độ kiểm tra trực tiếp công việc thiết kế, bổ
sung thêm các figure vào thiết kế, ...
- Cửa sổ Graphics Property Editor soạn thảo các thuộc tính các đối tượng như hình
5.2.
Danh sách
đối tượng
Các thuộc
tính
Cửa sổ Guide Callback Editor soạn thảo các hàm/ thực hiện các lệnh như hình 5.3.
Kiểu đối
tượng
Vùng soạn,
sửa Callback
76
Giáo trình MATLAB - SIMULINK
- Cửa sổ Guide Menu Editor soạn thảo các hàm hoặc thực hiện các lệnh như hình 5.3.
77
Giáo trình MATLAB - SIMULINK
elseif hang==2
plot(x,y1,'b-',x,y2,'r-.')
elseif hang==3
plot(x,y1,'b-',x,y2,'r-.',x,y3,'k:')
end
• khối ‘xoa do thi’ có:
‘Tag’ : ‘xoá’
‘String’ : ‘xoa do thi’
‘Callback’ : ‘cla’
78
Giáo trình MATLAB - SIMULINK
79
Giáo trình MATLAB - SIMULINK
3. gcbf lấy giá trị handle callback của figure hiện hành
4. gca lấy giá trị handle của đồ thị (axes) hiện hành
5. gco lấy giá trị handle của object hiện hành
5.4 Ví dụ ứng dụng
• Mã chương trình *.m file cho chương trình ở ví dụ trên khi viết chương trình theo
kiểu dùng tham số action
function fig = actiongui(action)
% This is the machine-generated representation of a Handle Graphics object
% and its children. Note that handle values may change when these objects
% are re-created. This may cause problems with any callbacks written to
% depend on the value of the handle at the time the object was saved.
% This problem is solved by saving the output as a FIG-file.
%
% To reopen this object, just type the name of the M-file at the MATLAB
% prompt. The M-file and its associated MAT-file must be on your path.
%
% NOTE: certain newer features in MATLAB may not have been saved in this
% M-file due to limitations of this format, which has been superseded by
% FIG-files. Figures which have been annotated using the plot editor tools
% are incompatible with the M-file/MAT-file format, and should be saved as
% FIG-files.
load actiongui
if nargin < 1,
action = 'initialize';
end;
if strcmp(action,'initialize') ;
h0 = figure('Color',[0.8 0.8 0.8], ...
'Colormap',mat0, ...
'FileName','D:\MATLABR11\work\actiongui.m', ...
'PaperPosition',[18 180 576 432], ...
'PaperUnits','points', ...
'Position',[255 39 508 420], ...
80
Giáo trình MATLAB - SIMULINK
'Tag','Fig1', ...
'ToolBar','none');
h1 = uimenu('Parent',h0, ...
'Label','Plot', ...
'Tag','Plot1');
h2 = uimenu('Parent',h1, ...
'Label','plot1', ...
'Tag','Plotplot11');
h2 = uimenu('Parent',h1, ...
'Callback',mat1, ...
'Label','plot2', ...
'Tag','Plotplot21');
h1 = uicontrol('Parent',h0, ...
'Units','points', ...
'BackgroundColor',[1 0.501960784313725 1], ...
'Callback','actiongui plotting', ...
'ListboxTop',0, ...
'Position',[288 246 45 21.75], ...
'String','PLOT1', ...
'Tag','plot1');
h1 = axes('Parent',h0, ...
'Box','on', ...
'CameraUpVector',[0 1 0], ...
'CameraUpVectorMode','manual', ...
'Color',[1 1 1], ...
'ColorOrder',mat2, ...
'NextPlot','add', ...
'Position',mat3, ...
'Tag','Axes1', ...
'XColor',[0 0 0], ...
'XGrid','on', ...
'YColor',[0 0 0], ...
'YGrid','on', ...
'ZColor',[0 0 0], ...
'ZGrid','on');
81
Giáo trình MATLAB - SIMULINK
h2 = text('Parent',h1, ...
'Color',[0 0 0], ...
'HandleVisibility','off', ...
'HorizontalAlignment','center', ...
'Position',[0.4983606557377049 -0.06760563380281681 9.160254037844386], ...
'Tag','Axes1Text4', ...
'VerticalAlignment','cap');
set(get(h2,'Parent'),'XLabel',h2);
h2 = text('Parent',h1, ...
'Color',[0 0 0], ...
'HandleVisibility','off', ...
'HorizontalAlignment','center', ...
'Position',[-0.09508196721311477 0.4957746478873241 9.160254037844386], ...
'Rotation',90, ...
'Tag','Axes1Text3', ...
'VerticalAlignment','baseline');
set(get(h2,'Parent'),'YLabel',h2);
h2 = text('Parent',h1, ...
'Color',[0 0 0], ...
'HandleVisibility','off', ...
'HorizontalAlignment','right', ...
'Position',[-0.1278688524590164 1.047887323943662 9.160254037844386], ...
'Tag','Axes1Text2', ...
'Visible','off');
set(get(h2,'Parent'),'ZLabel',h2);
h2 = text('Parent',h1, ...
'Color',[0 0 0], ...
'HandleVisibility','off', ...
'HorizontalAlignment','center', ...
'Position',[0.4983606557377049 1.019718309859155 9.160254037844386], ...
'Tag','Axes1Text1', ...
'VerticalAlignment','bottom');
82
Giáo trình MATLAB - SIMULINK
set(get(h2,'Parent'),'Title',h2);
h1 = uicontrol('Parent',h0, ...
'Units','points', ...
'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
'ListboxTop',0, ...
'Position',[291 183 45 20.25], ...
'String',['1 pha';'2 pha';'3pha ';' '], ...
'Style','popupmenu', ...
'Tag','chon', ...
'Value',3);
h1 = uicontrol('Parent',h0, ...
'Units','points', ...
'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
'ListboxTop',0, ...
'Position',[291 206.25 45 15], ...
'String','Popupmenu', ...
'Style','text', ...
'Tag','StaticText1');
h1 = uicontrol('Parent',h0, ...
'Units','points', ...
'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
'Callback','actiongui dong', ...
'ListboxTop',0, ...
'Position',[299.25 36.75 45.75 16.5], ...
'String','close', ...
'Tag','Pushbutton3');
h1 = uicontrol('Parent',h0, ...
'Units','points', ...
'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
'Callback','actiongui xoa', ...
'ListboxTop',0, ...
'Position',[298.5 76.5 51.75 21.75], ...
'String','xoa do thi', ...
'Tag','xoa');
83
Giáo trình MATLAB - SIMULINK
%set(h0, 'Visible','on');
else
switch action
case 'dong'
close(gcbf)
case 'xoa'
cla
case 'plotting'
x=linspace(0,3*pi,1000);
y1=sin(x);
y2=sin(x-2*pi/3);
y3=sin(x+2*pi/3);
% Lay thuoc tinh chon trong popupmenu
handle_chon=findobj(gcbf,'Tag','chon');
% lay thuoc tinh Value cua chon
hang=get(handle_chon,'Value')
% ve do thi theo tinh huong
grid on
if hang==1 plot(x,y1,'b-')
elseif hang==2 plot(x,y1,'b-',x,y2,'r-.')
elseif hang==3 plot(x,y1,'b-',x,y2,'r-.',x,y3,'k:')
end
end
end
84
Giáo trình MATLAB - SIMULINK
85
Giáo trình MATLAB - SIMULINK
Hình 1. Thư viện SIMULINK 3
Khởi động SIMULINK hiển thị thư viện chi tiết bằng cách gõ lệnh:
»similink
6.1.2 Giới thiệu thư viện SIMULINK
các khối để mô
phỏng hệ liên
t ục
Khối khuyếch
đại
86
Giáo trình MATLAB - SIMULINK
87
Giáo trình MATLAB - SIMULINK
tạo ra các giá trị thời gian theo bước lấy mẫu
Tạo ra tín hiệu step (hàm 1(t)) dùng làm tín hiệu đặt
trong các hệ điều khiển tự động
Thư viện NCD blocksets : gồm 3 khối phục vụ thiết kế hệ phi tuyến
88
Giáo trình MATLAB - SIMULINK
89
Giáo trình MATLAB - SIMULINK
Controller Clock1
1
PID
Step 2 +2s+50
s
XY Graph
®èi t îng
Gain
1
Scope
Mux simout
Clock
To Workspace
90
Giáo trình MATLAB - SIMULINK
Trong ví dụ trên, sử dụng khối PID là khối điều khiển theo luật PID dạng hàm
truyền: WPID(s)= P+I/s+D.s, đó là hàm truyền của đối tượng là khối Transfer Fcn.
Các bước thực hiện như sau:
Bước 1: Rê và thả các khối cần xây dựng mô hình từ các thư viện SIMULINK.
Nếu có các khối giống nhau cần xây dựng trong một mô hình thì dùng lệnh
COPY và PAST (dán) để tạo nhanh các khối, có thể copy từ một mô hình khác.
Có thể sử dụng Menu Format của SIMULINK để định dạng mô hình như: Chọn
lại font, màu sắc, nét vẽ, quay khối (rotate), ...
Bước 2: Nhập thông số hợp lý cho các khối bằng cách kích đúp chuột lên đối tượng
khối sau đó nhập các tham số từ cửa sổ hội thoại.
Bước 3: Chú thích các dòng text lên đối tượng như hình trên.
Bước 4: Khai báo các lựa chọn tham số trong Menu Simulation -> parametter... để
chọn các tham số tính toán mô phỏng. (xem hình trang sau).
Bước 5: Chạy chương trình bằng cách chọn nút Run trên thanh công cụ hoặc chọn
Menu Simulation ->Run
Quan sát kết quả đánh giá và hiệu chỉnh tham số sau mỗi lần chạy.
Các chú ý:
+ Muốn vẽ nhiều đồ thị trên một trục toạ độ, phải sử dụng khối ghép kênh (MUX)
trước khi cho tín hiệu đến bộ quan sát. Nếu dùng khối To Workspace thì sau khi chạy
xong ta nhận được biến out là biến toàn cục trong không gian Workspace của
MATLAB. (biến out sẽ là biến toàn cục trong bộ nhớ). Lúc này để vẽ được nhiều đồ
thị trên một hệ toạ độ, ta dùng hàm plot như sau:
plot(out(:,1), out(:,2),out(:,1), out(:,3)...)
sẽ vẽ nhiều đồ thị biến đổi theo thời gian trên chung 1 trục toạ độ.
+ Chương trình chạy đến hết thời gian (stop time) thì tự động ngừng. Để chương
trình dừng trước khi kết thúc, ấn nút STOP trên thanh công cụ (hoặc Menu Simulation
-> Stop). Có thể ấn nút tạm dừng (PAUSE) để chương trình tạm nghỉ và sau đó chạy
lại tiếp tục từ bước trước khi dừng.
+ Đối với hệ thống lớn, có thể Module hoá chương trình bằng cách sử dụng khối
SUBSYSTEM để chứa nhóm khối chức năng lại với nhau và hệ thống sẽ được xây
dựng từ nhiều hệ thống con hợp thành (xem phần sau).
91
Giáo trình MATLAB - SIMULINK
Ví dụ: Mô phỏng một hệ thống điều khiển tốc độ động cơ điện một chiều. Với bộ
điều khiển PID theo luật PI được tổng hợp theo phương pháp module tối ưu. Hãy thành
lập mô hình và mô phỏng đánh giá kết quả
Tai Ic
Cu
Ic
E
1
w
0.625 1
1
88000000
PID 0.125s+1 I s
U ®i (s+400)(s+10000) Ud Gain Integrator
R I:PI p ®éng c¬
chØnh l
Ui 0.61
0.002s+1
dßng ®iÖn
ph¶n håi dßng
C lock
M ux out
To W orkspace1
92
Giáo trình MATLAB - SIMULINK
6.3 Cách tạo ra thư viện riêng (một subsystem) từ các khối đã có
Ý nghĩa cách làm này là tạo ra một khối con trên cơ sở các khối đã có để phân hệ
thống lớn thành nhiều hệ thống con (subsystem). Nếu một khối con được sử dụng
nhiều lần trong các chương trình thì ta có thể đóng gói khối con, tức là che mặt nạ cho
nó (mask subsystem) để biến nó thành một khối chức năng như những khối đã được tạo
ra trong SIMULINK. Trong thư viện SIMULINK, có rất nhiều các khối đã tạo từ những
khối cơ bản. Ví dụ: khối PID controller được tạo ra từ các khối: Gian, Derivative,
Integrator, Sum.
P
Proportional
I
1 1
s
e(t) u(t)
Integral Sum
D du/dt
D Derivative
Để xem cấu trúc bên trong của subsystem đã che mặt nạ (masked), ta làm như
sau:
- Chọn khối cần xem cấu trúc bên trong
- Chọn menu Edit ->Look under Mask để mở cửa sổ simulink cho mô hình của
subsystem.
(có thể ấn nút phải chuột trên đối tượng để chọn chế độ trên)
6.4 Ví dụ ứng dụng **
Ta xét ví dụ sau đây, tạo ra một khối có tên là PID controller làm chức năng một
khối tích hợp là bộ điều khiển theo luật PID. Các trình tự tạo ra khối chức năng theo
trình tự sau:
Bước 1: Kéo và thả một khối Subsystem trong cửa số SIMULINK, đặt tên khối
này là PID Controller
Bước 2: Xây dựng mô hình bộ điều khiển PID tổng quát với hàm truyền dạng:
WPID(s)= P+I/s+D.s
Có cấu trúc sơ đồ như hình vẽ. Trong đó 3 thông số P, I, D là 3 tham số cần nhập vào
Bước 3: đóng gói hệ con này thành một khối riêng bằng cách: chọn menu Edit ->
Mask subsystem, xuất hiện một cửa sổ lựa chọn sau gồm 3 trang:
Trang 1: tạo ra biểu tượng (Icon)
93
Giáo trình MATLAB - SIMULINK
cho khối bằng cách dùng các lệnh vẽ trong khung Drawing Commands
Ví dụ: disp(‘PID’) : hiển thị nhãn trên biểu tượng khối.
Trang 2: Nhập và khai báo các biến. (Initialization)
Trang 3: Mô tả chức năng khối (Documetation)
Chức năng khối được mô tả bằng các dòng Text vào Block description.
Block Help: các mô tả khi ấn nút help nhập thông số khối.
Trong ví dụ trên, ta có 3 tham số cấn khai báo (P, I, D). Lần lượt khai báo từng
tham số trong các ô: Prompt và ô Variable. Sau khi khai báo xong một biến, chọn nút
Add để tạo thêm biến mới.
Cuối cùng, chọn OK để kết thúc. Khi đó khối con trở thành một khối thư viện
chức năng với các tham số cần nhập như hình bên phải (khi kích đúp chuột vào khối
này)
Khảo sát các mô hình hệ thống trên cơ sở các hệ thống con thông qua ví dụ sau:
VD: hệ thống điều khiển tốc độ một chiều dùng chỉnh lưu Thyristor.
94
Giáo trình MATLAB - SIMULINK
A
i
K +
-
B
i1
C
A
pulses
Pulse_generator
Va Vb Vc
PI curent regulator
Mux
.6 Ia(A)
& Reference
1
5
s
Reference
5
Trong đó: khối hệ con là 6-pulse Converter và Pulse_ Generator là hệ con được xây
dựng sẵn trong thư viện Power System Blocksets. Có thể xem cấu trúc bên trong của nó
bằng cách xem chế độ Look under Mask. Khối 6-pulse converter là subsystem có cấu
trúc như sau: 1
K
Hãy thành lập mô hình này và chạy quan sát kết quả?
m
k
m
k
th1
m
k
th3
th5
a
Demux
Demux1
Selector1
1 2 3
4
A B C
pulses
m
m
k
k
m
k
g
a
Demux
Demux2
Selector
2
A
95
Giáo trình MATLAB - SIMULINK
Ví dụ: phân tích quá trình quá độ hệ thống điện. Hãy thành lập mô hình và chạy mô
phỏng lấy kết quả. Cách xây dựng một mô hình như sau:
+
v
-
ub2
UB2
7 3 5 kV U_Cs
E q u iv a le n t i2
i I1
+ i 3 1 5 kV
- +
-
L in e 1 L in e 1 E q u iv a le n t
S e rie s i1 i2
1 5 0 km 1 5 0 km 1
C o m p e n sa tio n 1
B1 2
c
V s1 1 1 0 M va r B2
I_ S A R B re a ke r
1 1 0 M v a r1
F a u lt 250M VA
T im in g
96
Giáo trình MATLAB - SIMULINK
97
Giáo trình MATLAB - SIMULINK
MỤC LỤC
CHƯƠNG 0. MỞ ĐẦU.................................................................................................................1
CHƯƠNG 1. TỔNG QUAN VỀ MATLAB..................................................................................2
1.1 Cấu trúc chung và các lĩnh vực ứng dụng của MATLAB:.................................................2
1.2 Giới thiệu SIMULINK và TOOLBOXS trong MATLAB..................................................3
CHƯƠNG 2. CÁC THAO TÁC LẬP TRÌNH TRÊN MATLAB..................................................5
2.1 Các lệnh cơ bản quản lý MATLAB ...................................................................................5
2.1.1 Quản lý lệnh và các hàm...............................................................................................5
2.1.2 Quản lý biến, không gian workspace trên cửa sổ lệnh (Command window)..............6
2.1.3 Làm việc với Files môi trường làm việc.....................................................................6
2.1.4 Các phím thao tác trên cửa số dòng lệnh.......................................................................7
2.2 Dữ liệu, hàm và cấu trúc lệnh trong MATLAB .................................................................7
2.2.1 Khái niệm dữ liệu và biến............................................................................................7
2.2.2 Các ký hiệu và các toán tử.............................................................................................8
2.2.3 Các lệnh tương tác vào/ra (Interactive Input/Output).................................................18
2.2.4 Các lệnh, cấu trúc điều khiển chương trình (Control Flow)......................................20
2.3 Cách viết chương trình và hàm dạng m-files trong MATLAB.........................................22
2.4 Các bài tập ứng dụng **.....................................................................................................23
CHƯƠNG 3. CÁC HÀM TOÁN HỌC THÔNG DỤNG............................................................25
3.1 Các hàm toán học cơ bản....................................................................................................25
3.1.1 Các hàm xử lý số phức:...............................................................................................25
3.1.2 Các hàm lượng giác và hữu tỷ (thực hiện từng phần tử)..........................................25
3.1.3 Các hàm làm tròn số, ...................................................................................................25
3.2 Các hàm xử lý ma trận và vector........................................................................................26
3.3 Các thao tác trên dữ liệu chuỗi (STRING).........................................................................32
3.3.1 Khái niệm.....................................................................................................................32
3.3.2 Các hàm xử lý chuỗi ...................................................................................................32
3.4 Các hàm chuyển đổi dữ liệu..............................................................................................35
3.5 Các thao tác trên dữ liệu cấu trúc.......................................................................................36
3.5.1 Dữ liệu kiểu cấu trúc (Struct).....................................................................................36
3.5.2 Dữ liệu kiểu mảng cấu trúc (Cell Array)...................................................................38
3.6 Các hàm giao tiếp với tệp dữ liệu (FILES).......................................................................39
3.7 Các thao tác vẽ và xử lý đồ thị...........................................................................................46
3.7.1 Các lệnh xử lý trên cửa sổ đồ thị................................................................................46
3.7.2 Lệnh vẽ trong không gian 2-D....................................................................................48
3.7.3 Lệnh vẽ trong không gian 3-D **...............................................................................53
3.8 Các thủ tục in ấn và lưu trữ kết quả.................................................................................54
3.9 Các ví dụ và bài tập **.......................................................................................................55
CHƯƠNG 4. CÁC PHƯƠNG PHÁP TÍNH VÀ ỨNG DỤNG.................................................56
4.1 Khái niệm Symbolic và giới thiệu về Toolbox Symbolic.................................................56
4.1.1 Khái niệm Symbolic.....................................................................................................56
4.1.2 Cách khai báo biến symbolic ......................................................................................56
4.1.3 Các hàm trong Toolbox Symbolic **...........................................................................57
4.2 Đa thức và nội suy..............................................................................................................60
4.2.1 Đa thức.........................................................................................................................60
4.2.2 Nội suy và xấp xỉ.........................................................................................................63
4.3 Tính vi phân (Differentiation)..............................................................................................63
4.3.1 Vi phân số.....................................................................................................................63
4.3.2 Sử dụng symbolic........................................................................................................65
4.4 Tính tích phân (Integration).................................................................................................66
4.4.1 Tích phân số.................................................................................................................66
4.4.2 Sử dụng Symbolic........................................................................................................67
98
Giáo trình MATLAB - SIMULINK
4.5 Giải các phương trình và hệ phương trình........................................................................68
4.5.1 Phương pháp số...........................................................................................................68
4.5.2 Sử dụng Symbolic **...................................................................................................68
4.6 Giải phương trình vi phân và hệ phương trình vi phân ....................................................70
4.6.1 Phương pháp số: .........................................................................................................70
4.6.2 Sử dụng symbolic **...................................................................................................71
4.7 Các ví dụ ứng dụng **.......................................................................................................73
CHƯƠNG 5. LẬP TRÌNH TRỰC QUAN GIAO DIỆN NGƯỜI DÙNG (GUI: GRAPHIC
USER INTERFACE).....................................................................................................................74
5.1 Cách xây dựng các nút ấn và menu....................................................................................74
5.1.1 Phương pháp sử dụng UIMENU và UICONTROL ...................................................74
5.1.2 Phương pháp sử dụng GUIDE (GUI design)..............................................................75
5.2 Cách lập trình trên giao diện GUI......................................................................................77
5.3 Phương thức lập trình sự kiện thông qua truyền tham số “Action”.................................78
5.3.1 Khái niệm.....................................................................................................................78
5.3.2 Một số hàm thường dùng quản lý đối tượng.............................................................79
5.4 Ví dụ ứng dụng ..................................................................................................................80
CHƯƠNG 6. MÔ PHỎNG, THIẾT KẾ TRỰC QUAN (SIMULINK)......................................85
6.1 Tổng quan về SIMULINK..................................................................................................85
6.1.1 Khởi động SIMULINK................................................................................................85
6.1.2 Giới thiệu thư viện SIMULINK.................................................................................86
6.2 Cách xây dựng một chương trình SIMULINK..................................................................90
6.3 Cách tạo ra thư viện riêng (một subsystem) từ các khối đã có ........................................93
6.4 Ví dụ ứng dụng **..............................................................................................................93
99