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
139 trang |
Chia sẻ: huongthu9 | Lượt xem: 639 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bà giảng Xử lý tín hiệu nâng cao - Chương 1: Tổng quan về công cụ MATLA, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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.0000
2.3333 2.0000
>> A.^3
ans =
1 8
27 64
Bài tập
Cho x = [1 4 8], y = [2 1 5], và A = [2 7 9 7 ; 3 1 5 6 ; 8 1 2 5].
Xét xem dòng lệnh nào hợp lệ, dự đoán kết quả, giải thích và
thử lại bằng Matlab
a. [x; y']
b. [x; y]
c. A(:,[1 4])
d. A([2 3], [3 1])
e. A(:)
f. [A;A(end, :)]
g. A(1:3,:)
h. [A;A(1 : 2, :)]
Bài tập
Cho x = [2 5 1 6].
a. Cộng thêm 16 vào tất cả các phần tử.
b. Cộng thêm 3 vào các phần tử ở vị trí lẻ.
c. Lấy căn bậc 2 tất cả các phần tử.
d. Bình phương tất cả các phần tử.
Bài tập
Cho x, y lần lượt là các vector cột. x = [3 2 6 8]’, y = [4 1 3 5]’.
a. Lấy tổng các phần tử của x cộng thêm vào từng phần tử của y.
b. Luỹ thừa mỗi phần tử của x với số mũ tương ứng là các phần tử của
y.
c. Chia các phần tử của y với các phần tử tương ứng của x.
d. Nhân các phần tử của x với các phần tử tương ứng của y, đặt trong
vector z.
e. Tính tổng các phần tử của z, gán cho w.
f. Tính x.* y – w.
g. Tích vô hướng của x và y
Bài tập
Cho x = [1 4 8], y = [2 1 5] và A = [3 1 6 ; 5 2 7]. Xét
xem dòng lệnh nào hợp lệ, dự đoán kết quả, giải
thích; rồi thử lại bằng Matlab :
a. x + y
b. x + A
c. x’ + y
d. A – [x’ y’]
e. A – 3
Bài tập
Cho A = [2 7 9 7 ; 3 1 5 6 ; 8 1 2 5], dự đoán
kết quả, giải thích; rồi thử lại bằng Matlab:
a. A’
b. sum(A)
c. sum(A’)
d. sum(A, 2)
e. [[A; sum(A)] [sum(A, 2); sum(A(:))]]
Bài tập
Hãy tạo ra ma trận 4x4 có giá trị nguyên nằm trong
khoảng [-10,10] , Sau đó:
a. Cộng mỗi phần tử của ma trận cho 15
b. B.nh phương mỗi phần tử của ma trận
c. Cộng thêm 10 vào các phần tử ở dòng 1 và dòng 2
d. Cộng thêm 10 vào các phần tử ở cột 1 và cột 4
e. Tính nghịch đảo mọi phần tử
f. Lấy căn bậc hai mọi phần tử
Các phép biến đổi sơ cấp ma trận
Đối với phép biến đổi sơ cấp trên dòng
Biến dòng i thành α lần dòng i: A(i,:) = A(i,:)*α
Biến dòng i thành dòng i cộng α lần dòng j:
A(i,:) = A(i,:) +A(j,:)*α
Hoán vị dòng i và dòng j: A = A([thứ tự dòng],:)
Các phép biến đổi sơ cấp ma trận
>> A = [2 4; 3 8; 6 7]
>> A(1,:) = A(1,:)*10
A =
20 40
3 8
6 7
>> A(2,:) = A(2,:) + 3*A(3,:)
A =
20 40
21 29
6 7
>> A = A([3 1 2],:)
A =
6 7
20 40
21 29
Các phép biến đổi sơ cấp ma trận
các phép biến đổi sơ cấp trên cột
Biến cột i thành α lần cột i: A(:,i) = A(:,i)*α
Biến cột i thành cột i cộng α lần cột j:
A(:,i) = A(:,i) + A(:,j)*α
Hoán vị cột i và cột j: A = A(:,[thứ tự cột])
Bài tập
Cho ma trận A = [2 4 1 ; 6 7 2 ; 3 5 9], viết lệnh
Matlab để
a. Gán cho vector x là dòng thứ nhất của A.
b. Gán cho ma trận y là hai dòng còn lại (cuối) của A.
c. Tính tổng theo dòng ma trận A.
d. Tính tổng theo cột ma trận A.
e. Tìm phần tử lớn nhất và phần tử nhỏ nhất của ma trận.
f. Tính tổng các phần tử của A
Biểu thức Logic
Các toán tử logic
Một biểu thức logic trong Matlab được xây dựng từ 6 toán
tử quan hệ là: >, =, <=, ==, ∼= và 3 toán tử logic: ∼
(NOT), & (AND) và | (OR).
Kết quả của một biểu thức logic trả về
• 1 nếu biểu thức đúng
• 0 nếu biểu thức sai.
Nếu phần tử so sánh là vectơ thì kết quả sẽ là một vectơ
chứa các giá trị 0 hoặc 1.
Biểu thức Logic
Ví dụ: Thực hiện các câu lệnh sau và nhận xét kết
quả
1. r=1;
r<=0.5
2. r=1:5;
r<=3
3. a=1:5;
b=[0 2 4 5 6];
a==b
Biểu thức Logic
Độ ưu tiên của các toán tử
Độ ưu tiên Toán tử
1 ( )
2 ˆ .ˆ ’ .’
3 + - (dấu) ∼
4 * / \ .* ./ .\
5 + -
6 :
7 > = <= == ∼=
8 & (AND)
9 | (OR)
Biểu thức Logic
Ví dụ: Thực hiện các câu lệnh sau và nhận xét kết quả
1. a = 1; b=2; c=3;
(b*b==4*a*c)& (a∼=0)
2. a=1:10
(a>=20) & (a<=20)
3. a=1;b=2;
∼ ∼(a =0)|(b =0)|((a==0) & (b==0))
Để một biểu thức logic trong sáng và tránh nhầm lẫn, ta nên
sử dụng các dấu (, )
Thực hiện các câu lệnh sau và so sánh
r = 0.5;
0 < r < 1
(0 < r) & (r < 1)
Vectơ và biểu thức logic
Biểu thức logic cho phép truy xuất một cách linh hoạt
đến các thành phần của một vectơ hay ma trận.
Ví dụ:
x = [-1 0 2 3 5 6 7 4 9]
x(x>0): xuất những giá trị dương của vectơ x.
x(x>2 & x <=5): xuất những giá trị thỏa 2 < x ≤ 5.
• x>2 cho kết quả là 0 0 0 1 1 1 1 1 1 là vectơ chứa kết
quả so sánh từng phần tử tương ứng của x với 2
• x(x>2) sẽ xuất ra các giá trị lớn hơn 2.
Các hàm logic: All, Any và Find
Tên hàm Ý nghĩa Ví dụ
any Kiểm tra xem có tồn tại một
phần tử nào của vectơ thỏa
điều kiện không? Nếu có thì
cho kết quả là 1, ngược lại là 0
any(x>0): kiểm tra xem
có tồn tại phần tử nào
của vectơ x dương hay
không.
all kiểm tra tất cả các phần tử của all(x < 5): tất cả các
vectơ có thỏa điều kiện không?
Kết quả là 1 nếu đúng.
phần tử của x có < 5
hay không?
find trả về các chỉ số của một vectơ
thỏa điều kiện logic nào đó
A = [1 2 4;4 5 6]
find(isprime(A)) xuất ra các vị trí của ma trận A
có giá trị là số nguyên tố
Lệnh điều kiện và vòng lặp
Lệnh IF
Lệnh FOR
Lệnh WHILE
Lệnh SWITCH . . .CASE
Script và Hàm
Lệnh IF
Cú pháp:
if
end
hoặc
if
elseif
...
end
Lệnh IF
Ví dụ: Hoán vị x và y nếu x > y
if x > y
temp = y;
y = x ;
x = temp;
end
Lệnh IF
Ví dụ: Biện luận số nghiệm của phương trình
ax2+bx+c = 0, (a ≠ 0)
delt = bˆ2 - 4*a*c;
if delt < 0
disp(’PT Vo nghiem’);
elseif delt == 0
disp(’PT co nghiem kep’);
else
disp(’PT co 2 nghiem phan biet’);
end
Lệnh IF
Chú ý:
Nếu câu lệnh if được đặt trên 1 dòng thì phải
dùng dấu "," sau if.
Ví dụ
if x > 0, x = sqrt(x); end.
Lệnh FOR
Cú pháp:
for var = start : step : end
end
Vòng lặp với biến chạy là var bắt đầu từ start và
kết thúc là end
mỗi bước lặp sẽ tăng một bước nhảy là step
• step có thể là dương (vòng lặp tăng dần) hoặc âm (giảm
dần).
• Nếu không chỉ ra step, bước nhảy mặc định là 1.
Lệnh FOR
Ví dụ:
Hiển thị các giá trị từ 1 đến 5 ra màn hình
for i=1:5, disp(i), end
Hiển thị các giá trị chẵn từ 1 đến 10 theo thứ tự
ngược
for i=10:-2:1, disp(i), end
Lệnh FOR
Ví dụ:
Tính giai thừa n! = 1 × 2 × . . . × (n − 1) × n
n = 10;
fact = 1;
for k=1:n
fact = k*fact;
end;
disp(fact);
Lệnh FOR
có thể thay thế dùng một vectơ chạy một vòng for:
for var = v, ..., end
Ví dụ.
Tính tích tất cả các phần tử trong vectơ v = [1 2 3 -2 4]
prod = 1;
for i = v, prod = prod*i, end;
disp(prod);
Lệnh WHILE
Cú pháp:
while
end
Các lệnh sẽ được thực hiện khi nào biểu thức điều
kiện còn đúng.
Lệnh WHILE
Ví dụ: Tìm giá trị lớn nhất của n để tổng
12 + 22 + . . . + n2 < 100.
S = 1; n=1;
while (S + (n+1)^2) < 100
n = n + 1;
S = S + n^2
end
[n, S]
Lệnh WHILE
Ví dụ
x = 1;
while 1
xmin = x;
x = x/2;
if x == 0, break, end
end
xmin
Lệnh while 1, ... sẽ tạo ra vòng lặp vô hạn, để
ngắt, ta dùng lệnh break.
Break và Continue
Break:
Dùng trong vòng lặp for hoặc while, dùng để thoát
khỏi vòng lặp tại vị trí nó xuất hiện.
Nếu có nhiều vòng lặp lồng nhau thì lệnh break có
tác dụng nhảy sang vòng lặp kế tiếp.
Continue:
Dùng trong vòng lặp for hoặc while, lệnh continue
cho phép bỏ qua các câu lệnh đứng sau nó và
chuyển sang bước lặp kế tiếp trong cùng một vòng
lặp.
Lệnh SWITCH . . .CASE
Cú pháp:
switch
case
case
...
otherwise
end
Lệnh switch sẽ lần lượt thực hiện các khối lệnh
tương ứng với từng giá trị thử trong biểu thức điều
kiện. Biểu thức điều kiện phải có dạng số hoặc chuỗi.
Lệnh SWITCH . . .CASE
Tính chuẩn p của vectơ x
switch p
case 1
y = sum(abs(x));
case 2
y = sqrt(x’*x);
case inf
y = max(abs(x));
otherwise
error(’p phai la 1,2 hoac inf’) ;
end
Thực hành
Thực hành với câu các câu lệnh lựa chọn IF, IF ELSE, IF ELSE IF
Một học viên được kiểm tra 3 môn học. Mỗi bài kiểm tra tối đa là 100
điểm. Xếp loại học viên dựa vào điểm trung bình 3 môn.
Điểm trung bình Loại
>= 90 E+
80 - < 90 E
70 - < 80 A+
Hãy viết một hàm, thực hiện
Nhập vào điểm của 3 môn học và lưu trong 3 biến khác nhau là M1, M2 và M3.
Tính điểm trung bình (avg = (M1 + M2 + M3)/3).
Hiển thị xếp loại sinh viên ra màn hình
60 - < 70 A
50 - < 60 B+
< 50 RỚT
Thực hành
Thực hành câu lệnh switch – case
Hãy nhập vào 2 số bất kỳ, sau đó hỏi người sử dụng
muốn thực hiện tính toán gì với 2 số này (+ , - , * , / , %).
Sau đó thực hiện tính toán và hiển thị kết quả ra màn
hình
Thực hành với vòng lặp for
Tìm giai thừa của một số.
Thực hành với cấu trúc lặp while
Yêu cầu người sử dụng nhập vào các số tự nhiên, quá
trình nhập kết thúc khi người dùng gõ số 0. Thực hiện
tính toán để in ra màn hình tổng tất cả các số đã nhập.
Script và Hàm
Script:
Là các dòng lệnh Matlab được chứa trong một file có phần mở rộng .m;
file script có thể được soạn thảo bằng Matlab Editor hoặc các chương
trình soạn thảo khác. Để thực thi script chỉ cần gọi tên file trong cửa sổ
dòng lệnh của Matlab.
Hàm:
Cũng là các đoạn lệnh Matlab được soạn thảo trong file .m, hàm nhận
các tham số truyền vào, xử lý và xuất ra giá trị. Tên của hàm phải giống
như tên của file .m, tránh đặt tên hàm trùng với các hàm có sẵn của
Matlab. Dòng đầu tiên của hàm (trừ phần chú thích) phải có dạng:
function [Các giá trị xuất] = Tên_hàm(Các giá trị nhập)
Sau dòng này, các dòng chú thích bắt đầu bằng dấu % sẽ xuất hiện khi
gọi lệnh help tên_hàm.
Viết hàm trong matlab (tiếp)
Lưu ý khi viết hàm trong Matlab:
Tên hàm và tên file phải là một, ví dụ hàm
example phải được lưu trong file example.m
Một file m có thể chứa nhiều hàm, tên file sẽ được
đặt theo hàm đầu tiên
Các hàng chú thích đầu tiên trong hàm sẽ 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
Các file đính kèm theo tài liệu này:
- ba_giang_xu_ly_tin_hieu_nang_cao_chuong_1_tong_quan_ve_cong.pdf