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

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

pdf139 trang | Chia sẻ: huongthu9 | Lượt xem: 639 | Lượt tải: 0download
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:

  • pdfba_giang_xu_ly_tin_hieu_nang_cao_chuong_1_tong_quan_ve_cong.pdf
Tài liệu liên quan