Xử lý tín hiệu nâng cao - Chương 1: Tổng quan về công cụ Matlab

Giới thiệu Matlab

Tổng quan về lập trình Matlab

Cách sử dụng biến trong Matlab

Các lệnh và các hàm cơ bản

Cách thao tác với ma trận

Vẽ đồ thị trong Matlab

Làm việc với hàm và m-file

Lập trình GUI

pdf 139 trang dienloan 18860
Bạn đang xem 20 trang mẫu của tài liệu "Xử lý tín hiệu nâng cao - Chương 1: Tổng quan về công cụ Matlab", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Xử lý tín hiệu nâng cao - Chương 1: Tổng quan về công cụ Matlab

Xử lý tín hiệu nâng cao - Chương 1: Tổng quan về công cụ Matlab
Xử lý tín hiệu nâng cao
Chương 1
Tổng quan về công cụ MATLAB
-Advanced signal processing-
Tài liệu tham khảo
1. Xử lý tín hiệu nâng cao - Nguyễn Quốc Trung
2. Digital signal processing using MATLAB - Viney 
K.Ingle & John G.Proakis
3. Digital Signal and Image Processing Using MATLAB -
Gerard Blanchet & Maurice Charbit
4. Digital image processing using MATLAB - Gonzalez 
Woods & Eddins
5. Xử lý số tín hiệu - Hồ Văn Sung
Nội dung
Giới thiệu Matlab
Tổng quan về lập trình Matlab
Cách sử dụng biến trong Matlab
Các lệnh và các hàm cơ bản
Cách thao tác với ma trận
Vẽ đồ thị trong Matlab
Làm việc với hàm và m-file
Lập trình GUI
Giới thiệu Matlab
Matlab là viết tắt từ ‘MATrix LABoratory’
Matlab được phát triển bởi MathWorks
Là một ngôn ngữ lập trình thông dịch
Hỗ trợ lập trình hướng đối tượng
Ứng dụng rộng rãi
Có khả năng liên kết với nhiều ngôn ngữ lập 
trình khác
Lịch sử phát triển
 Cuối thập niên 1970, Matlab được Cleve Moler phát minh tại 
Đại học New Mexico. Matlab nguyên sơ được viết bởi ngôn 
ngữ Fortran
 đến 1980 Matlab vẫn chỉ là một bộ phận được dùng nội bộ của Đại học 
Stanford.
 Năm 1983, Jack Little, một người đã học ở MIT và Stanford, 
đã viết lại MATLAB bằng ngôn ngữ C, xây dựng thêm các thư 
viện phục vụ cho thiết kế hệ thống điều khiển, hệ thống hộp 
công cụ (tool box), mô phỏng... MATLAB trở thành mô hình 
ngôn ngữ lập trình trên cơ sở ma trận (matrix-based 
programming language).
Lịch sử phát triển
 Năm 1984: Phiên bản đầu tiên MATLAB 1.0 viết bằng C cho 
MS-DOS PC 
 Năm 1986, MATLAB 2 ra đời trong đó hỗ trợ UNIX.
 Năm 1987, MATLAB 3 phát hành.
 Năm 1990 Simulink 1.0 được phát hành gói chung với 
MATLAB.
Lịch sử phát triển
Năm 1992 MATLAB 4 thêm vào hỗ trợ 2-D và 3-D đồ họa 
màu và các ma trận truy tìm. Năm này cũng cho phát hành 
phiên bản MATLAB Student Edition (MATLAB ấn bản cho 
học sinh).
Năm 1993 MATLAB cho MS Windows ra đời. Đồng thời 
công ty này có trang web là www.mathworks.com
Năm 1995 MATLAB cho Linux ra đời. Trình dịch MATLAB 
có khả năng chuyển dịch từ ngôn ngữ MATLAB sang ngôn 
ngữ C cũng được phát hành trong dịp này.
Lịch sử phát triển
 Năm 1996 MATLAB 5 bao gồm thêm các kiểu dữ liệu, bộ sửa 
lỗi và bộ tạo dựng GUI
 Năm 2000 MATLAB 6 cho đổi mới môi trường làm việc 
MATLAB, thêm LAPACK và FFTW (Fastest Fourier Transform 
in the West - "biến đổi Fourier nhanh nhất của phương Tây").
 Năm 2002 MATLAB 6.5 phát hành đã cải thiện tốc độ tính 
toán, sử dụng phương pháp dịch JIT (Just in Time) và tái hỗ 
trợ MAC.
 Năm 2004 MATLAB 7 phát hành, có khả năng chính xác đơn 
và kiểu nguyên, hỗ trợ hàm lồng nhau, công cụ vẽ điểm, và có 
môi trường phân tích số liệu tương tác.
Lịch sử phát triển
12/2008, MATLAB 7.7 được phát hành với SP3 cải 
thiện Simulink cùng với hơn 75 sản phẩm khác.
Năm 2009 cho ra đời 2 MATLAB 7.8 (R2009a) và 
MATLAB 7.9 (R2009b).
Năm 2010 cho ra đời 2 MATLAB 7.10 (R2010a) và 
MATLAB 7.11 (R2010b).
Năm 2012 cho ra đời 2 MATLAB 7.12 (R2012a) và 
MATLAB 7.13 (R2012b)
Hệ thống Matlab
Gồm có 5 phần chính:
 Ngôn ngữ Matlab
 Môi trường làm việc Matlab
 Xử lý đồ hoạ
 Thư viện toán học Matlab
 Giao diện chương trình ứng dụng Matlab API (Application 
Program Interface) 
Hệ thống Matlab
 Ngôn ngữ Matlab: 
 là một ngôn ngữ ma trận/mảng cấp cao với các câu lệnh, 
hàm, cấu trúc dữ liệu, vào/ra, các tính năng lập trình hướng 
đối tượng. 
 Cho phép lập trình các ứng dụng từ nhỏ đến các ứng dụng 
lớn và phức tạp.
Môi trường làm việc Matlab: 
 các phương tiện cho việc quản lý các biến trong không 
gian làm việc Workspace cũng như xuất/nhập dữ liệu. 
 các công cụ phát triển, quản lý, gỡ rối và định hình M-file, 
ứng dụng của Matlab.
Hệ thống Matlab
 Xử lý đồ hoạ: 
 là hệ thống đồ hoạ của Matlab. 
 Bao gồm các lệnh cao cấp cho trực quan hoá dữ liệu hai chiều và ba 
chiều, xử lý ảnh, ảnh động,... 
 Cung cấp các lệnh cấp thấp cho phép tuỳ biến giao diện đồ hoạ cũng 
như xây dựng một giao diện đồ hoạ hoàn chỉnh cho các ứng dụng 
Matlab .
 Thư viện toán học Matlab: 
 là tập hợp khổng lồ các thuật toán tính toán từ các hàm cơ bản như 
cộng, sin, cos, số học phức,... tới các hàm phức tạp hơn như nghịch 
đảo ma trận, tìm trị riêng của ma trận, phép biến đổi Fourier nhanh.
 Giao diện chương trình ứng dụng Matlab API (Application 
Program Interface)
 là một thư viện cho phép viết các chương trình C và Fortran tương 
thích với Matlab.
Hệ thống Matlab
Simulink
 một chương trình đi kèm với Matlab
 là một hệ thống tương tác với việc mô phỏng các hệ thống 
động học phi tuyến. 
 Là một chương trình đồ hoạ sử dụng chuột để thao tác cho 
phép mô hình hoá một hệ thống bằng cách vẽ một sơ đồ 
khối trên màn hình. 
 Có thể làm việc với các hệ thống tuyến tính, phi tuyến, hệ 
thống liên tục theo thời gian, hệ gián đoạn theo thời gian, 
hệ đa biến,...
Màn hình chính
Tổng quan về lập trình trong Matlab
Lập trình hướng thủ tục
Cú pháp, từ khóa
Sử dụng các thư viện Toolbox
Lập trình trong Matlab
 Sử dụng hàng lệnh
 Lập trình m-file
 Thiết kế chương trình có GUI
Lập trình trong Matlab
Để tạo một tập tin .m
 Vào File chọn New → M-File hoặc
 nhấn vào biểu tượng nằm trên thanh MATLAB 
Toolbar.
Viết chú thích: đặt dấu phần trăm (%) ở đầu dòng.
 Ctrl+R: biến các hàngđược chọn trở thành chú thích 
 Ctrl+T: loại bỏ ký hiệu chú thích trước các hàngchú thích.
Để thực thi một tập tin .m
 nhấn vào biểu tượng nằm trên thanh Editor 
Toolbar 
 hoặc sử dụng phím tắt F5
Phép toán, biến, vector, ma trận
Biến
Không cần khai báo kiểu, số chiều, độ dài biến.
một biến (variable) được khai báo và khởi tạo thông 
qua câu lệnh gán.
 Mỗi khi một tên mới xuất hiện với phép gán, Matlab tạo 
biến và tự động cấp phát bộ nhớ cho nó.
Nếu đó là biến cũ, nó sẽ thay đổi nội dung mới nếu 
thực hiện phép gán. 
Biến
Cách đặt tên biến
Tên biến bao gồm các ký tự chữ, số và ký hiệu 
gạch dưới (_)
Tên biến tối đa là 63 ký tự
Tên biến bắt đầu bằng chữ cái
Matlab luôn phân biệt chữ in và chữ thường 
khi đặt tên biến hoặc tên chương trình.
Cách đặt tên biến
Ví dụ các tên biến hợp lệ: 
 arg1, no_name, vars, Vars
Khi tên biến được đặt không hợp lệ, Matlab sẽ 
xuất hiện thông báo
Các biến đặc biệt
Các biến đặc biệt Giá trị
ans biến mặc định trả về kết quả
pi số pi
eps Số nhỏ nhất lớn hơn 0
inf Để chỉ số vô cùng
NaN hoặc nan Để chỉ số ko xác định như kết quả của 0/0
i và j Số phức, i=j=sqrt(-1)
realmin Số dấu chấm động nhỏ nhất
(2.2251e-308)
realmax Số dấu chấm động lớn nhất
(1.7977e+308)
Chú ý
 Trong ngôn ngữ lập trình Matlab, mỗi biến khi khởi tạo sẽ 
được xem như một mảng. 
 Nếu biến có giá trị đơn thì mảng có kích thước 1x1. 
 Nếu biến là ma trận hoặc vector thì kích thước của mảng chính là kích 
thước của ma trận hoặc vector đó. 
 Để lấy kích thước của một biến, ta sử dụng hàm size().
Matlab xem chuỗi k. tự như mảng một chiều chứa các ký tự.
>> msg='Xin chao cac ban';
>> size(msg)
ans =
1 16
>> 
Véc tơ và ma trận
 Các bài toán trong Matlab được quy về tính toán và xử lý trên 
ma trận
 Ví dụ, tạo một ma trận trong Matlab:
>> M=[3 4 5 ; 2 1 4]
M =
3 4 5
2 1 4
 Các phần tử trong một cột cách nhau bởi dấu cách (space) hoặc dấu 
phẩy
 Các hàng được cách nhau bằng dấu “;”
 Chỉ số các phần tử bắt đầu từ 1
Các toán tử
Toán tử Ký hiệu
Phép cộng +
Phép trừ -
Phép nhân *
Phép chia / (chia phải) hoặc \ (chia trái)
Phép lũy thừa ^
Chuyển vị ma trận '
Các toán tử quan hệ >, =, <=, ==, ~=
Các toán tử logic & (and), | (or) và ~(not)
Các hàm toán học thông dụng
Tên hàm Ý nghĩa
sin(x), cos(x), tan(x) Các hàm lượng giác
asin(x), acos(x), atan(x) Các hàm lượng giác ngược
exp(x) Hàm mũ ex
log(x), log10(x), log2() Logarit cơ số e, 10, 2
abs(x) Hàm lấy trị tuyệt đối
round(x), floor(x), fix(x), ceil(x) Các hàm làm tròn
mod(x,y) lấy phần dư của x chia phải y
gcd(x,y) tìm ước chung lớn nhất 
lcm(x,y) tìm bội chung nhỏ nhất 
sqrt(x) hàm lấy căn bậc hai
Ví dụ
>> 9/3
ans =
3
>> 9\3
ans =
>> 2~=3
ans =
1
>> 2==3
ans =
>> n = 15;
>> mod(n,2)==0 && mod(n,3)==0
ans =
0
>> mod(n,2)==0 || mod(n,3)==0
ans =
0.3333
>> 2^5
ans =
32
>> 
0
>> 
1
>> ~mod(n,4)
ans =
0
>> ~mod(n,3)
ans =
1
Một số lệnh thông dụng
 clc: Xóa màn hình cửa sổ lệnh
 who: xem tên biến trong không gian làm việc của Matlab
>> who
Your variables are:
A M N 
 whos: xem chi tiết hơn về các biến
>> whos
Name Size Bytes Class
A 1x10 80 double array
M 6x3 144 double array
N 3x3 72 double array
Grand total is 37 elements using 296 bytes
 clear: Xóa các biến trong bộ nhớ của Matlab
 help: yêu cầu sự giúp đỡ
Thực hành
 Dự đoán kết quả xuất ra màn hình:
 a. 2 ; 4
 b. 2 / 4
 c. 2 \ 4
 d. 2 , 4
 e. 2 : 4
Thực hành
>> 2 ; 4
ans =
4
>> 2 , 4
ans =
2
ans =
4
>> 2 : 4
ans =
2 3 4
>> 2 / 4
ans =
0.5000
>> 2 \ 4
ans =
2
Thực hành
 Tính bằng tay các biểu thức sau, rồi thử lại bằng Matlab:
 a. 2 / 2 * 3
 b. 6 – 2 / 5 + 7 ^ 2 – 1
 c. 10 / 2 \ 5 – 3 + 2 * 4
 d. 3 ^ 2 / 4
 e. 3 ^ 2 ^ 2
 f. round(6 / 9 + 3 * 2) 
 g. floor(6 / 9 + 3 * 2) 
 h. ceil(6 / 9 + 3 * 2)
 k. fix(4/9)+fix(3*(5/6))
Thực hành
 Xác định công dụng của hàm solve, thực hiện một ví dụ với 
hàm này
 Tạo một số ngẫu nhiên
 Có giá trị từ 0 đến 1
 Có giá trị từ 0 đến 100
 Có giá trị từ 30 đến 70
 Cho a=36, b=15. Tính bằng tay các biểu thức sau, rồi thử lại 
bằng Matlab:
 a. mod(a,b)
 b. rem(a,b)
 c. gcd(a,b)
 d. lcm(a,b)
Thử lại với các cặp giá trị (a,b) khác.
hàm solve
 Hàm solve cho phép tìm nghiệm phương trình và hệ phương 
trình
 Cú pháp:
SOLVE('eqn1','eqn2',...,'eqnN')
SOLVE('eqn1','eqn2',...,'eqnN','var1,var2,...,varN')
SOLVE('eqn1','eqn2',...,'eqnN','var1','var2',...'varN')
Ví dụ:
>> [x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')
x =
1
3
y =
1
-3/2
>>
Vector
Vector là một dạng đặc biệt của ma trận có một hàng
hoặc một cột. 
Để khởi tạo vector hàngchứa các:
 giá trị rời rạc, các phần tử trong vector phải nằm trong cặp 
ngoặc vuông ([]) và được ngăn cách nhau bởi khoảng trắng 
hoặc dấu phẩy (,).
 giá trị liên tục (mặc định trong Matlab là 1) hoặc cách nhau 
một khoảng giá trị nhất định (còn gọi là bước nhảy), Matlab 
sử dụng dấu hai chấm (:). 
• giá trị đầu và cuối của vector không cần thiết đặt trong 
cặp dấu ngoặc vuông ([]).
Ví dụ
>> arr1 = [1 2 3]
arr1 =
1 2 3
>> arr2 = [0,-5]
arr2 =
0 -5
>> arr3 = [arr1 arr2]
>> arr1 = 1:5
arr1 =
1 2 3 4 5
>> arr2 = [1:0.5:2]
arr2 =
1.0000 1.5000 2.0000
>> arr3 = 10:-1:6
arr3 =
1 2 3 0 -5
>> 
arr3 =
10 9 8 7 6
>> 
Vector
 Để tạo một vector rỗng - vector không chứa giá trị :
>> emp_vect = []
emp_vect =
[]
>> 
 Để tạo ra vector cột
 sử dụng dấu nháy đơn (’) 
 hoặc sử dụng dấu chấm phẩy (;) để ngăn cách giữa các phần tử.
 Truy xuất đến phần tử của vector: thông qua chỉ số.
 Phần tử thứ i: X(i)
 Nhiều phần tử: X([danh sách vị trí])
 Xóa một phần tử trong vector gán phần tử đó với vector
rỗng.
Ví dụ
>> emp_vect = []
emp_vect =
[]
>> col_arr = [1:3]‘
col_arr =
1
2
>> arr = 10:-1:0
arr =
10 9 8 7 6 5 4 3 2 1 0
>> arr(5)
ans =
6
>> arr(1:3)
ans =
3
>> col_arr1 = [1;2;3]
col_arr1 =
1
2
3
>>
10 9 8
>> arr([10:-2:6])
ans =
1 3 5
>> arr([7,8,11])
ans =
4 3 0
>> arr([2 5]) = []
arr =
10 8 7 5 4 3 2 1 0
Bài tập
Cho x = [3 1 5 7 9 2 6], dự đoán kết quả các 
dòng lệnh sau và thử lại bằng Matlab
 x(3)
 x(1:7)
 x(1:end)
 x(1:end-1)
 x(6:-2:1)
 x([1 6 2 1 1])
 sum(x)
Bài tập
Cho x = [1 5 2 8 9 0 1] và y = [5 2 2 6 0 0 2], giải 
thích kết quả các dòng lệnh sau
 x > y
 y < x
 x == y
 x <= y
 y >= x
 x | y
 x & y
 x & (-y)
 (x > y) | (y < x)
 (x > y) & (y < x)
Bài tập
Cho 2 vectơ a = [1 0 2] và b = [0 2 2], xác định giá trị 
các biểu thức sau. Kiểm tra lại bằng Matlab
 a = b
 a < b
 a < b < a
 a < b < b
 a | (a)
 b & (b)
 a=b==a (Xác định giá trị cuối của a)
Bài tập
Cho x = 1:10 và y = [3 1 5 6 8 2 9 4 7 0], dự đoán kết 
quả, giải thích và thử lại bằng Matlab
 (x > 3) & (x < 8)
 x(x > 5)
 y(x <= 4)
 x( (x = 8) )
 y( (x = 8) )
 x(y < 0)
Bài tập
Dự đoán kết quả những câu sau, giải thích và kiểm 
tra lại bằng Matlab
 1 & -1
 13 & (-6)
 0 < -2|0
 0 <= 0.2 <= 0.4
 5 > 4 > 3
 2 > 3 & 1
Ma trận
Ma trận đại diện cho mảng nhiều chiều có 
nhiều hàng và nhiều cột. 
Khai báo và khởi tạo ma trận tương tự như 
vector.
 Sử dụng dấu chấm phẩy (;) để kết thúc một hàng
trong ma trận.
Một số hàm khởi tạo ma trận đặc biệt
Hàm Ý nghĩa
zeros(số hàng, số cột) Ma trận không
zeros(n) Ma trận vuông không cấp n
eye(n) Ma trận đơn vị
diag([các phần tử trên 
đường chéo chính])
Ma trận đường chéo
rand(số hàng, số cột) Ma trận thực ngẫu nhiên trong khoảng [0,1]
rand(n) ma trận vuông cấp n, ngẫu nhiên trong khoảng [0,1]
các phần tử phân bố đều
randn(n) Tạo ma trận ngẫu nhiên có kích thước n, các phần tử tuân 
theo phân bố chuẩn
ones(số hàng, số cột) Ma trận toàn số một
ones(n) Ma trận vuông một cấp n
magic(n) Tạo ma trận magic (tổng giá trị trong 1 hàng bằng tổng giá 
trị trong 1 cột bằng tổng giá trị đường chéo) có kích thước n
Ma trận
 Truy xuất phần tử của ma trận thông qua chỉ số hàng và chỉ 
số cột.
Cách truy xuất Ý nghĩa
A(i,j) Phần tử tại hàng i cột j
A([danh sách các hàng, danh sách các cột]) Nhiều phần tử
diag(A) đường chéo chính của ma trận
 Chú ý:
 chỉ số cuối cùng của hàng hay cột của ma trận hoặc vector có thể được 
thay thế bởi chữ end.
A(:) tất cả phần tử của ma trận
A(:,j) tất cả phần tử tại cột j
A(i,:) tất cả phần tử tại hàng i
Các toán tử trên ma trận
Các toán tử trên ma trận
 Cộng: X=A+B
 Trừ: X=A-B
 Nhân: X=A*B
 Chia: X=A/B (A=X*B) hoặc X=A\B (B=A*X)
 Lũy thừa: X=A^2 (X=A*A)
 Xóa cột: A(:,3)=[] để xóa cột 3 trong ma trận A
 Xóa hàng: A(3,:)=[] để xóa hàng 3 trong ma trận A
Các hàm trên ma trận
Chuyển vị: A’
Định thức: det(A)
Ma trận nghịch đảo: A^(-1) hoặc inv(A)
Hạng của ma trận: rank(A)
Vết của ma trận: trace(A)
T.m dạng bậc thang rút gọn theo phương pháp 
Gauss Jordan: rref(A)
Tính tổng các phần tử của ma trận theo cột: sum(A)
Tính kích thước: size(A)
Ma trận
Chú ý
 Để thực hiện các phép toán nhân, chia giữa phần tử với 
phần tử của hai ma trận, hay lũy thừa từng phần tử của 
ma trận  thêm dấu chấm (.) vào trước phép toán cần 
tính.
 Ví dụ: >> A = [1,2;3,4]
>> B = [5,6;7,8]
>> A.*B
ans =
5 12
21 32
>> A./B
ans =
0.2000 0.3333
0.4286 0.5000
>> A.\B
ans =
5.0000 3. ... ẽ xuất 
hiện khi gõ lệnh help. 
 Lệnh return giúp ta kết thúc một hàm mà không 
cần phải thi hành hết các câu lệnh.
Viết hàm trong matlab (tiếp)
Cú pháp khi xây dựng hàm
function [output_list] = 
function_name(input_list) 
//body
Return
Một số hàm/lệnh thông dụng khi lập trình m-file
 echo on/off
 input
 disp
 global
Viết hàm trong matlab
function s=example
%tinh dien tich hinh chu nhat
w=input('Vao chieu rong:');
l=input('Vao chieu dai:');
s=w*l;
Hàm
Ví dụ: Hàm tính giá trị thứ n của dãy Fibonnaci
function f = Fib(n)
F = zeros(1,n+1);
F(2) = 1;
for i = 3:n+1
F(i) = F(i-1) + F(i-2);
end
f = F(n);
 Lưu tên file Fib.m.
Hàm
Ví dụ: Hàm trả về nhiều giá trị
function [a b] = maxmin(x)
% Ham tra ve gia tri lon nhat va nho nhat 
% cua mang x
a = max(x);
b = min(x);
 Lưu tên file maxmin.m. 
 Hai giá trị trả về chứa trong mảng [a b].
Hàm
Ví dụ: Hàm không có giá trị trả về.
function circle(a,b,r)
% Ham ve duong tron tam (a,b), ban kinh r
t = 0:pi/20:2*pi;
x = a + r*sin(t);
y = b + r*cos(t);
plot(x,y);
axis equal;
Bài tập
Dự đoán kết quả sau và thử lại bằng Matlab
if n > 1
m = n+1
else
m = n - 1
 với
•n = 7, m = ? 
•n = 0, m = ? 
•n = -10, m = ?
Bài tập
Dự đoán kết quả sau và thử lại bằng Matlab
if T < 30
h = 2*T + 1
elseif T < 10
h = T - 2
else
h = 0
end
 Với
•T = 50, h = ? 
•T = 15, h = ? 
•T = 0, h = ?
Bài tập
 Dự đoán kết quả sau và thử lại bằng Matlab
if 0 < x < 10
y = 4*x
elseif 10 < x < 40
y = 10*x
else
y = 500
end
 Với
•x = -1, y = ? 
•x = 5, y = ?
•x = 30, y = ?
Bài tập
Viết Script để tính hàm sau
h(T) = T - 10 khi 0 < T < 100
= 0.45T + 900 khi T > 100
 Thử các trường hợp 
• T = 5 
• T = 110
Bài tập
Cho vectơ x = [1 8 3 9 0 1], viết các dòng lệnh 
để
 a. Tính tổng các phần tử. (So sánh kết quả với 
lệnh sum)
 b. Viết hàm tính tổng dãy con từ 1 đến j. (So sánh 
kết quả với lệnh cumsum)
Bài tập
Viết hàm tính tổ hợp n chập r theo công thức 
sau
( )
!
! !
r
n
n
n n r
C =
−
Bài tập
Tạo ma trận M × N các số ngẫu nhiên (dùng lệnh 
rand). Chuyển các giá trị nhỏ hơn 0.2 thành 0, các 
giá trị lớn hơn hay bằng 0.2 thành 1.
Tạo một vec tơ ngẫu nhiên gồm 1.000.000 phần tử 
tính tổng bình phương các phần tử sử dụng 2 cách:
 a. Dùng phép toán trên ma trận.
 b. Vòng lặp for.
Đo thời gian chạy giữa 2 cách bằng cách sử dụng 
cặp lệnh tic ... toc.
 Ví dụ, ta muốn đo thời gian tính hàm x = sin(t) với thì dùng: 
tic, x = sin(t), toc.
Bài tập
Tạo một vectơ có giá trị nguyên gồm 100.000 
phần tử trong khoảng [0, 100], tìm tất cả 
những phần tử chia hết cho 3 bằng 2 cách:
 a. Dùng phép toán trên ma trận.
 b. Dùng for và if.
Đo thời gian chạy giữa 2 cách.
Bài tập
Cho x = [4 1 6] và y = [6 2 7], tính các 
mảng/vector/ma trận sau
 a. aij = xiyj
 b. bij = xi/yj
 c. ci = xiyi, tính tổng các phần tử của c.
 d. dij = xi/(2 + xi + yj)
Bài tập
Cho một vectơ bất kỳ, ví dụ x = [-4 0 5 -3 0 3 7 -1 6], 
viết script để đếm xem trong vec tơ có bao nhiêu giá 
trị âm, bao nhiêu giá trị dương, và bao nhiêu giá trị 
bằng 0.
Viết script để tính trong một vector các số ngẫu nhiên 
(sử dụng lệnh rand):
 a. Có bao nhiêu phần tử đứng trước một phần tử có giá trị 
nằm trong khoảng 0.8 đến 0.85.
 b. Có bao nhiêu phần tử trong khoảng [0.01, 0.5] đứng 
trước giá trị trung bình của vector đó.
(Dự đoán kết quả trước khi thực thi lệnh.)
Bài tập
Viết một script yêu cầu nhập một nhiệt độ 
Fahrenheit rồi chuyển sang độ Celcius tương 
ứng. Script vẫn chạy đến khi không nhập nhiệt 
độ nữa thì thôi. [Sử dụng hàm isempty.]
Giả sử ta đầu tư vào một quỹ tín dụng một số 
tiền ban đầu là a, số tiền sinh lời hàng năm là 
10% số tiền vốn tích lũy. Hãy tính số năm khi 
mà lợi nhuận thu được gấp đôi tiền vốn ban 
đầu.
Thực hành
 Tạo một vector:
 Có 10 phần tử có giá trị nguyên được lấy ngẫu nhiên trong khoảng [0, 100]
 Có 10 phần tử có giá trị nguyên được lấy ngẫu nhiên trong khoảng [-20 ,10]
 Cho x = [3 1 5 7 9 2 6], dự đoán kết quả các dòng lệnh sau và thử lại bằng Matlab:
a. x(3) 
b. x(1:7)
c. x(1:end)
d. x(1:end-1)
e. x(6:-2:1)
f. x([1 6 2 1 1])
g. sum(x)
 Giải hệ phương trình:
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
2 5 5
3 4 1
3 6 2 8
2 2 2 3 2
x x x x
x x x x
x x x x
x x x x
+ + + =
 + − − = −

+ − + =
 + + − =
Sử dụng đồ thị trong Matlab
 Đồ thị trong hệ tọa độ phẳng
 Phần lớn các câu lệnh vẽ đồ thị trong hệ tọa độ phẳng được thực hiện 
bằng lệnh plot.
 Ví dụ:
>> x=linspace(0,2*pi,30);
>> y=sin(x);
>> plot(x,y)
 Kết quả:
0 1 2 3 4 5 6 7
-1
-0.5
0
0.5
1
Vẽ đồ thị trong 2D
Lệnh cơ bản:
plot(x,f(x))
 Với x: vectơ chứa miền giá trị của hàm f. f(x): các giá trị 
của f ứng với x.
Ví dụ: Vẽ đồ thị y = sin(x) từ [0, 2pi]
x = 0 : pi/100 : 2*pi;
y = sin(x);
plot(x, y);
Các lệnh khác với đồ thị
Lệnh Ý nghĩa
grid on/off thêm/bỏ đường lưới vào đồ thị
box on/off thêm/bỏ hộp chứa đồ thị
axis on/off thêm/bỏ trục tọa độ
xlabel('Trục x') thêm nhãn cho trục x
ylabel('Truc y') thêm nhãn cho trục y
title('Do thi ham sin') thêm tiêu đề ở đỉnh cho đồ thị
text(x, y, ’...’) đặt một chú thích (trong dấu ’ ’) lên
đồ thị tại tọa độ (x, y)
gtext(’...’) đặt chú thích lên đồ thị, vị trí được
xác định bởi click chuột
hold on/off bật/tắt chế độ cho phép vẽ nhiều đồ 
thị trong cùng một hệ trục tọa độ.
Các tùy chỉnh về nét vẽ, dấu và màu sắc
Tham số Màu sắc Tham số Các điểm Tham số Nối các điểm
b xanh da trời . điểm - nét liền
g xanh lá cây 0 tròn : đường chấm
r đỏ x dấu x -. đường gạch chấm
c xanh xám + dấu + -- đường gạch gạch
Lệnh: plot(x,y,’Nét vẽ_Dấu_Màu sắc’)
m đỏ tím * hoa thị
y vàng s vuông
k đen d kim cương
w trắng v, ^, tam giác
p,h ngôi sao
Vẽ đồ thị trong 2D
Ví dụ
x = 0:pi/20:2*pi;
plot(x, sin(x),’-.*r’);
hold on
plot(x, sin(x – pi/2),’–om’);
plot(x, sin(x – pi), ‘:bs’);
hold off
Tùy chỉnh màu sắc và độ lớn của nét vẽ
Lệnh Ý nghĩa
LineWidth độ rộng của nét vẽ, tính bằng pt.
MarkerEdgecolor màu của đường viền dấu (marker)
MarkerFacecolor màu bên trong dấu
Markersize độ lớn của dấu, tính bằng pt
Vẽ đồ thị trong 2D
Ví dụ
x = -pi:pi/10:pi;
y = tan(sin(x)) - sin(tan(x));
plot(x,y,’-om’,’LineWidth’,2,’MarkerEdgecolor’,’k’,
’MarkerFacecolor’,’g’,’Markersize’,10)
3
-4 -3 -2 -1 0 1 2 3 4
-3
-2
-1
0
1
2
Vẽ đồ thị trong 2D
Xác định tọa độ:
 axis([xmin xmax ymin ymax])
 xlim([xmin xmax])
 ylim([ymin ymax])
Tùy chỉnh các kiểu trục tọa độ:
 axis on/off/auto
 axis normal/square/equal/tight
 axis ij/xy
 grid on/off
Vẽ đồ thị trong 2D
subplot - Vẽ nhiều đồ thị trong cùng một 
cửa sổ:
 subplot(m, n, p) tạo ra một ma trận m hàng, n 
cột chứa m× n đồ thị, p là vị trí của từng đồ thị, thứ 
tự từ trên xuống dưới theo hàng.
Vẽ đồ thị trong 2D
 Ví dụ: Vẽ 4 đồ thị trong cùng 1 cửa sổ
t = 0:pi/20:2*pi; 
[x,y] = meshgrid(t);
subplot(2,2,1)
plot(sin(t),cos(t))
axis equal
subplot(2,2,2)
z = sin(x)+cos(y); -1 -0.5 0 0.5 1-1
-0.5
0
0.5
1
0 2 4 6
-2
-1
0
1
2
plot(t,z)
axis([0 2*pi -2 2])
subplot(2,2,3)
z = sin(x)*cos(y);
plot(t,z)
axis([0 2*pi -1 1])
subplot(2,2,4)
z = (sin(x)^2)-(cos(y)^2);
plot(t,z)
axis([0 2*pi -1 1])
0 2 4 6
-1
-0.5
0
0.5
1
0 2 4 6
-1
-0.5
0
0.5
1
Vẽ đồ thị trong 3D
Lệnh cơ bản: plot3(x, y, z) Trong plot3, ta cần 
xác định các vectơ (x, y, z). 
 Để vẽ mặt (x, y, z = f(x, y)), sử dụng lệnh 
meshgrid(x,y).
Vẽ đồ thị trong 3D
Ví dụ
t = 0:0.02*pi:25*pi;
x = sin(t); y = cos(t);
z = t;
plot3(x,y,z);
80
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
0
20
40
60
Vẽ đồ thị trong 3D
Ví dụ: Vẽ mặt với −4 ≤ x ≤ 4 và 
−4 ≤ y ≤ 4.
[x,y]=meshgrid([-4:0.1:4]);
z=x.*x.*y.*exp(-x.^2-y.^2);
plot3(x,y,z)
( ) 2 22, x yz x y x ye− −=
0.2
-4
-2
0
2
4
-4
-2
0
2
4
-0.2
-0.1
0
0.1
Vẽ đồ thị trong 3D
Một số lệnh vẽ đồ thị trong 3-D khác:
contour / contourf / contour3
mesh / meshc / meshz
surf / surfc
waterfall
bar3 / bar3h
pie3 / fill3
comet3 / scatter3 / stem3
Vẽ đồ thị trong 3D
In và xuất đồ thị:
 Dùng lệnh 
print -dtiff -r200 mygraph.tiff print –deps2 
mygraph.eps
 Sử dụng Plotting Tools
Bài tập
Vẽ đồ thị hàm số x, x3, ex và với 0 < x < 4.
Vẽ đồ thị hàm số f(x) = sin(1/x) với 0.01 < x < 0.1.
Vẽ lại đồ thị hàm số , (0 < x < 4) nhưng với đường 
đứt nét, màu đỏ và dấu (marker) là dấu +.
Vẽ lại đồ thị hàm số (0 < x < 4) nhưng với đường 
xe
2xe
2xe
gạch chấm, màu xanh và dấu (marker) là hình tam 
giác hướng lên trên. (Thử lại với các tham số khác 
(Màu sắc, kiểu đường, dấu))
Bài tập
 Vẽ đồ thị hàm số −5 ≤ x ≤ 5 với: 
 Kiểu đường là nét gạch chấm, độ rộng 2pt, màu đỏ thẫm.
 Dấu (marker) là hình tròn, độ rộng 6pt, màu tô của dấu là xanh, màu
đường viền là đen.
 Vẽ hai hàm y = x2 và y = sin(3x) trên cùng một đồ thị.
( ) 41
xf x
x
=
+
 Vẽ hai hàm số f = x sin(x), 0 ≤ x ≤ 20 và g = 50x, 20 ≤ x ≤ 25 
trên 2 hệ trục tọa độ khác nhau.
 Vẽ đường tròn có tâm O(0, 0) bán kính bằng 3. Định tọa độ 
cho trục Ox và Oy là từ -6 đến 6. Tạo đường lưới trên hình vẽ 
và thử lại với các lệnh axis normal/square/equal/tight.
Bài tập
 Vẽ đồ thị hàm số y = cos(t) trong khoảng 0 < t < 2pi, chia lại 
các giá trị trên trục 0x cách đều nhau một khoảng là pi/4. Ghi 
nhãn cho các giá trị tương ứng là 0, pi/4, pi/2, 3pi/4, . . . , 2pi. 
Chia trục Oy thành 3 khoảng là −1, 0, 1.
 Vẽ đồ thị hàm số với 0 < t < 30. Ghi chú thích cho trục Ox là ‘t 
(thoi gian’), Oy là ‘Ham so x(t)’ và tựa đề cho đồ thị.
 Vẽ đồ thị hàm số x(t) = 2 + 3 sin(pit + 10)e0.35t, với −5 < t < 5. 
Định giá trị cho trục Ox là từ -20 đến 20 và Oy từ -6 đến 6. Ghi 
chú thích cho trục Oy là ‘x(t)’; trục Ox là ‘thoi gian t(giay)’; tựa 
đề của đồ thị là ‘ham so x(t)’. Dùng lệnh text để viết phương 
trình của đồ thị trên một điểm của đồ thị.
Bài tập
 Vẽ đồ thị hàm số x3, ex và ex2 với 0 < x < 4 trong cùng một cửa 
sổ hình vẽ.
 Vẽ đồ thị hàm số
với −10 ≤ x ≤ 10 và −10 ≤ y ≤ 10 . Ghi chú thích cho đồ thị.
 Vẽ đồ thị hàm số sau trên miền [−2, 2]×[−2, 2], sử dụng các 
( )
2 2
10
2 2
sin
, , 1 10x yz x y
x y
ε
ε
ε
−
+ +
= = ×
+ +
hàm plot3, mesh, meshc, meshz, surf, surfc, waterfall.
 a. f(x, y) = 3x − x3 − 2y2 + y4
 b. f(x, y) = sin(pix) + sin(piy) + sin[(pix + piy)]
 c. f(x, y) = ex + y4 − x3 + 4 cos piy
 d. ( ) ( )2 2, x yf x y xye − −=
Đồ thị trong không gian 3D
 Để vẽ đồ thị đường trong không gian ba chiều ta sử dụng 
lệnh plot3, khuôn dạng lệnh plot3 như sau: plot3(x,y,z) trong 
đó x,y,z là các vector hoặc ma trận
 Ví dụ:
>> t=linspace(0,6*pi,100);
>> plot3(sin(t),cos(t),t)
 Kết quả:
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
0
5
10
15
20
Đồ thị trong không gian 3D
Đối với đồ thị bề mặt và lưới, Matlab định nghĩa bề 
mặt lưới bằng các điểm theo hướng trục z ở trên 
đường kẻ ô hình vuông trên mặt phẳng x-y.
Trong Matlab có hàm meshgrid, với cú pháp 
[X,Y]=meshgrid(x,y) tạo ra một ma trận X và Y, 
trong đó ma trân X mà các hàng nó là bản sao của 
vector x, và ma trận Y có các cột là bản sao của 
vector y.
Đồ thị trong không gian 3D (tiếp)
 Ví dụ:
>> [X,Y]=meshgrid(-1:0.5:1, -1:0.5:1)
X =
-1.0 -0.5 0 0.5 1.0
-1.0 -0.5 0 0.5 1.0
-1.0 -0.5 0 0.5 1.0
-1.0 -0.5 0 0.5 1.0
-1.0 -0.5 0 0.5 1.0
Y =
-1.0 -1.0 -1.0 -1.0 -1.0
-0.5 -0.5 -0.5 -0.5 -0.5
0 0 0 0 0
0.5 0.5 0.5 0.5 0.5
1.0 1.0 1.0 1.0 1.0
Đồ thị trong không gian 3D (tiếp)
 X,Y là một cặp ma trận tương ứng với một lưới chữ nhật trong 
mặt phẳng x-y. Z là một hàm số theo x,y cuối cùng, sử dụng hàm 
mesh(x,y,z) để vẽ đồ thị.
 Ví dụ:
>> [X,Y] = meshgrid(-8:.5:8);
>> R = sqrt(X.^2 + Y.^2) + eps;
>> Z = sin(R)./R;
>> mesh(X,Y,Z);
 Kết quả:
-10
-5
0
5
10
-10
-5
0
5
10
-0.5
0
0.5
1
Thực hành
 Vẽ đồ thị hàm số x, x3, ex với 0 < x < 4
 Vẽ đồ thị hàm số f(x) = sin(1/x) với 0.01 < x < 0.1.
 Vẽ hai hàm và trên cùng một đồ thị, ghi chú thích
 Vẽ đồ thị hàm số 3D
z=sqrt(x2+y2)+x2+y2
Viết chương trình trong Matlab
Ví dụ trong bài toán vẽ độ thị trên, ta tạo một file 
dothi3D.m với nội dung:
function dothi3D
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z)
 Khi đó, để thực hiện nhóm câu lệnh trong file trên, tại dấu 
nhắc của cửa sổ lệnh, chỉ việc gõ dothi3D
Thực hành
Nhập vào 3 số, kiểm tra xem 3 số đó có phải cạnh 
của một tam giác hay không
Nhập 3 số a,b,c từ bàn phím, giải phương trình, sau 
đó giải phương trình ax2+bx+c=0
Nhập vào 1 số từ bàn phím, kiểm tra xem số đó có 
phải số nguyên tố hay không
Matlab GUI
Matlab GUI là là giao diện hình ảnh của 
chương trình
Bao gồm các nút bấm, các thanh trượt, các 
cửa sổ, menu v.v... 
Được sử dụng để cung cấp cho người dùng 
một môi trường làm việc đơn giản và thân 
thiện.
Matlab GUI
Matlab GUI
Khi đó Matlab sẽ tạo ra 2 file mới:
 File có phần mở rộng .fig chứa nội dung của giao diện 
 File có phần mở rộng .m chứa mã nguồn
Matlab GUI
Các thuộc tính
Hàm Callback
Mọi điều khiển trong Matlab đều có hàm Callback,
Hàm Callback của mỗi điều khiển được gọi phụ 
thuộc vào từng điều khiển khác nhau.
Trong hàm Callback có 2 thuộc tính quan trọng
 hObject : handle của điều khiển của control
 handles : là một cấu trúc chứa tất cả các điều khiển và dữ liệu 
người dùng. Dùng cái này để truy xuất các điều khiển khác. 
Đọc & thiết lập giá trị
Đọc dữ liệu
Get(handle, ‘property’)
Thiết lập giá trị
Set(handle, ‘property’,value)
Edit text & Static text
Ví dụ
x=get(handles.edit1,'string');
y=get(handles.edit2,'string');
z=str2num(x)+str2num(y);
set(handles.text1,'string',num2str(z));
Điều khiển Toggle 
Nút bấm 2 trạng thái:
button_state = get(hObject,'Value');
if button_state == get(hObject,'Max')
grid on;
elseif button_state == get(hObject,'Min')
grid off;
end
List box & Axes
Ví dụ
axes(handles.axes1);
x = get(handles.popupmenu1, 'Value');
switch x
case 1
plot(rand(5));
case 2
plot(sin(1:0.01:25));
case 3
bar(1:10);
end
Slider bar
Các thuộc tính cần quan tâm:
 Min, max
 Slider Step
Ví dụ
axes(handles.axes2);
k= get(hObject,'Value');
set(handles.edit1,'String',k)
n=1:k;
x=rand(1,k);
stem(n,x);
Run & Debug
Bấm nút Play trên thanh công cụ hoặc F5 trong cửa 
sổ lập trình để chạy chương trình
Trong trường hợp muốn debug chương trình
 Đặt breakpoint bằng phím F12,
 Trong quá trình Debug, chuyển sang lệnh tiếp theo sử 
dụng phím F10.
Khi chạy chương trình, có thể in giá trị biến đang 
bằng lệnh msgbox, ví dụ:
msgbox(x,'Thong bao');
Thực hành
Viết một chương trình thực hiện công việc 
giống công cụ calculator của Windows
2/1:
 Thanh, thắng, Hà, Liên, Đông, Hương, Vi Nam, Long, Kiên, 
Hoàng Dương, Hoàng Nam, Tuấn. (14)
16/1:
 Hạnh, hà, Tuấn, Hoàng Dương, T.Hoàng Nam, Hương (6)
 Muộn: Chương, Tùng, Liên, Linh, Đông
 Phép: Thắng, Thanh, Phong

File đính kèm:

  • pdfxu_ly_tin_hieu_nang_cao_chuong_1_tong_quan_ve_cong_cu_matlab.pdf