Bài giảng Xử lý tín hiệu nâng cao - Chương 1: Tổng quan về công cụ MATLAB
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 GU
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng 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: Bài giảng 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.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 ... 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
File đính kèm:
- bai_giang_xu_ly_tin_hieu_nang_cao_chuong_1_tong_quan_ve_cong.pdf