Bài giảng Mô phỏng hệ thống truyền thông - Chương 2: Giới thiệu Matlab - Võ Nguyễn Quốc Bảo

pdf 161 trang Gia Huy 21/05/2022 1480
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Mô phỏng hệ thống truyền thông - Chương 2: Giới thiệu Matlab - Võ Nguyễn Quốc Bảo", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_mo_phong_he_thong_truyen_thong_chuong_2_gioi_thieu.pdf

Nội dung text: Bài giảng Mô phỏng hệ thống truyền thông - Chương 2: Giới thiệu Matlab - Võ Nguyễn Quốc Bảo

  1. GIỚI THIỆU MATLAB
  2. Chương 2: GIỚI THIỆU MATLAB •Giới thiệu tổng quan •Vẽ trong matlab •Lập trình giao diện và ứng dụng trong Matlab •Các thức lập trình trong Matlab •Giới thiệu các toolbox quan trọng khác •Bài tập
  3. GIỚI THIỆU TỔNG QUAN •Biến •Môi trường làm việc •Cửa sổ lệnh •Phần giúp đỡ •Các nguồn tài nguyên khác để học Matlab
  4. BIẾN •Với Matlab rất dễ tạo biến, có thể tự khai báo bộ nhớ và kiểu biến. •Matlab phân biệt giữa chữ thường và chữ hoa. •Lệnh save() và load() dùng để lưu trữ các biến này thành dạng file và sử dụng lại. •Lệnh clear all nhằm để xóa tất cả các biến hiện có trong Workspace.
  5. MỘT SỐ LƯU Ý ĐẶT TÊN BIẾN •Tên phải có tính gợi nhớ, có ý nghĩa •Không đặt tên trùng với các hàm lõi và hàm có sẵn •Chỉ nên viết hoa toàn bộ khi biến là hằng số •Nên dung biến i, j, k, id, iRun là biến chạy trong hàm for hay while •Hạn chế tái sử dụng tên biến trong một chương trình
  6. MÔI TRƯỜNG LÀM VIỆC •Một số hàm trong Workspace: • Whos: liệt kê tên, kích thước, số byte và các thông số khác của các biến • Workspace: mở cửa số con workspace • Clear: xóa một hay nhiều biến, hoặc tất cả các biến
  7. MÔI TRƯỜNG LÀM VIỆC
  8. CỬA SỔ LỆNH •Trong cửa sổ lệnh, có thể gõ từng dòng lệnh và xem kết quả thực thi. Nếu sau dòng lệnh có dấu ‘;’ thì Matlab vẫn thực thi lệnh nhưng không xuất kết quả ra màn hình.
  9. PHẦN GIÚP ĐỠ •Có bốn cách cơ bản để tìm hướng dẫn là: • Sử dụng hàm help() với cú pháp “help tên hàm/toàn tử” ở ngay cửa sổ lệnh. • Sử dụng dấu ? Tại thanh Quick Access Toolbar ở góc phải trên màn hình. • Sử dụng phím giúp đỡ F1. • Sử dụng hàm lookfor trong trường hợp chúng ta không biết tên hàm chính xác.
  10. CÁC NGUỒN TÀI NGUYÊN KHÁC ĐỂ HỌC MATLAB • Trang bắt đầu với Matlab: startedwith-matlab.html • Trung tâm Matlab: • Matlab blog: • Matlab trên facebook:
  11. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Các toán tử và hàm: ▪ : [] ‘ + – * .* / \ .\ ./ ^ .^ end && || ▪ sum, mean, max, min, abs & | ~ = ▪ isequal, isprime ▪ zeros, ones, rand, randn, meshgrid, ▪ reshape, repmat ▪ true, false, logspace, perms, ▪ inv, pinv, det, svd, eig, trace, rref, randperm rank, orth, cov, chol ▪ eye, diag, blkdiag, tril, triu, rot90 ▪ squeeze, ndgrid, cat, ndims ▪ size, length, numel ▪ sparse, full, nnz, nzmax, nonzeros, ▪ ind2sub, sub2ind, find spy ▪ sort, sortrows ▪ cast, class, int32, uint8,
  12. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Tạo ma trận: • Cách khai báo trực tiếp ở cửa sổ lệnh: • Dấu [] đại diện cho ma trận. Lưu ý vector là một trường hợp đặc biệt của ma trận. • Các phần tử trên hàng cách nhau bằng khoảng trắng hoặc dấu, . • Các cột cách nhau bằng dấu ;.
  13. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Tạo ma trận: • Ví dụ 2.7: hãy khai báo một ma trận A như sau trong Matlab:
  14. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Tạo ma trận: • Vector là một loại ma trận hàng, hay cột, ngoài phép gán có thể tạo theo cú pháp: • A = giá trị bắt đầu: khoảng cách tăng: giá trị cuối Ví dụ 2.8: Tạo ra vector hàng Ví dụ 2.9: Tạo ma trận các số lẻ chứa các số lẻ nhỏ hơn 10 giảm dần từ 9
  15. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Tạo ma trận: • Ví dụ 2.10: Tạo ma trận rỗng dùng cú pháp [] và kiểm tra kích thước ma trận sau khi tạo ra:
  16. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Tạo ma trận: • Trong một số trường hợp, chúng ta cần tạo ra ma trận rỗng, có cú pháp: • Tên ma trận = [] • Matlab còn hỗ trợ một số hàm tạo ra ma trận đặc biệt: • zero: ma trận toàn số không • ones: ma trận toàn số 1 • true: ma trận logic 1 • false: ma trận logic 0
  17. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Tạo ma trận: • Ví dụ 2.11: Hãy tạo ra các ma trận sau: a. Ma trận 2×3 toàn 1. f. Ma trận đường chéo 4×4 b. Ma trận 3×3 có các phần tử theo phân g. Ma trận 1x6 với các giá trị tăng theo bố đều trong khoảng [0, 1]. bậc mũ từ 10 đến 10^2. c. Ma trận 2×5 có các phần tử phân bố h. Ghép hai ma trận theo đường chéo từ chuẩn trong khoảng [2, 5]. hai hàm rand(2,2) và ones(3,2). d. . Ma trận E và F theo dạng lưới từ 1 i. Lấy phần dưới đường chéo chính của đến 5. ma trận ones(3,4). e. Ma trận đơn vị 4×4.
  18. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Tạo ma trận:
  19. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Tạo ma trận:
  20. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Kích thước ma trận: • Matlab có hỗ trợ ba hàm như sau: • size(): trả về kích thước các chiều của ma trận • length(): trả về chiều dài của vector hàng/cột, nếu đầu vào của hàm là ma trận thì kế quả trả về là chiều có kích thước lớn nhất • numel(): trả về tổng số phần tử trong ma trận • Cú pháp: • [nrows, cols] = size(A) • L = length(A) • N = numel(A)
  21. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Kích thước ma trận: • Ví dụ 2.12: Tạo ra ma trận 3 chiều có kích thước [2 3 4] với các phần tử đều là 1. Dùng hàm size, length, numel để kiểm tra kích thước, chiều dài và tổng số phần tử. • Giải: Chúng ta dùng hàm ones() để tạo ra ma trận và các hàm size(), length() và numel() để kiểm tra.
  22. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Chuyển vị ma trận/vector • Để thực hiện chuyển vị ma trận, Matlab hỗ trợ hai cách: • Cách 1: dùng toàn tử chuyển vị ‘. • Cách 2: dùng hàm chuyển vị transpose(). • Để chuyển một ma trận ở dạng bất kỳ về vector cột, ta dùng toàn tử :
  23. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Chuyển vị ma trận/vector • Ví dụ 2.13: cho ma trận A = [1 2 3 4; 5 6 7 8], chuyển thành ma trận hàng
  24. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Tổng và trung bình • Matlab cung cấp hàm sum() và hàm mean() để tính tổng và tính trung bình của ma trận, lưu ý là có thể tính theo hàng, theo cột, hay cụ thể hơn là tính theo chiều của ma trận. • Cú pháp: • S = sum(X,'all'): tính tổng tất cả các phần tử của ma trận X. • S = sum(X,DIM): tính tổng các phần tử X theo chiều DIM. • S = sum(X,VECDIM): tính tổng các phần tử theo chiều chỉ ra trên vector chiều VECDIM.
  25. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Tổng và trung bình • Ví dụ 2.14:Cho ma trận A với 3 hàng và 3 cột, có giá trị tăng từ 1 đến 9. a. Tính tổng theo hàng, theo cột và toàn ma trận theo cách truyền thống. b. Tính tổng theo hàng, theo cột và toàn ma trận dùng hàm sum()
  26. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Tổng và trung bình • Cú pháp: • mean(X,'all'): lấy trung bình tất cả các phần tử của X. • mean(X,DIM): lấy trung bình tất cả các phần tử theo chiều DIM. • mean(X,VECDIM): lấy trung bình tất cả các phần tử lần lượt theo chiều quy định ở vector chiều VECDIM.
  27. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Tổng và trung bình • Ví dụ 2.15: Cho ma trận A với 3 hàng và 3 cột, có giá trị tăng từ 1 đến 9. Tính tổng theo hàng, theo cột và toàn ma trận
  28. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Tìm giá trị nhỏ nhất và lớn nhất trong ma trận • Matlab cung cấp hàm min() và max() để tìm giá trị nhỏ nhất và giá trị lớn nhất của ma trận theo chiều bất kỳ hay của toàn ma trận. • Cú pháp hàm min(): • M = min(X,[],'all'): trả về giá trị nhỏ nhất của ma trận X. • [M,I] = min(X,[],DIM): tìm giá trị nhỏ nhất của ma trận X theo chiều DIM. M là kết quả trả về, I là kết quả trả về ở dạng chỉ số của giá trị nhỏ nhất. • M = min(X,[],VECDIM): tìm giá trị nhỏ nhất của ma trận X theo các chiều quy định tại vector VECDIM.
  29. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Tìm giá trị nhỏ nhất và lớn nhất trong ma trận • Cú pháp hàm max(): • [M, I] = max(X): trả về giá trị lớn nhất của vector X. Nếu X là một ma trận, M sẽ là vector hàng chứa các phần tử lớn nhất của mỗi cột. I là vector chỉsố của các phần tử lớn nhất. • M = max(X,[],'all'): trả về giá trị lớn nhất của ma trận X. • M = max(X,[], DIM): trả về giá trị lớn nhất theo chiều DIM.
  30. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Tìm giá trị nhỏ nhất và lớn nhất trong ma trận • Ví dụ 2.16: Cho ma trận X = [1 2 3; 4 5 6; 7 8 9]. Hãy: a. Tìm giá trị lớn nhất và giá trị nhỏ nhất theo hàng. b. Tìm giá trị lớn nhất và nhỏ nhất theo cột. c. Tìm giá trị lớn nhất và nhỏ nhất của X.
  31. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Tìm giá trị nhỏ nhất và lớn nhất trong ma trận • Ví dụ 2.16: Cho ma trận X = [1 2 3; 4 5 6; 7 8 9]. Hãy: a. Tìm giá trị lớn nhất và giá trị nhỏ nhất theo hàng. b. Tìm giá trị lớn nhất và nhỏ nhất theo cột. c. Tìm giá trị lớn nhất và nhỏ nhất của X.
  32. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Nối và ghép ma trận • Chúng ta có thể ghép nối các ma trận sử dụng phương pháp tương tự như phương pháp khởi tạo ma trận bằng cách dùng dấu [] cùng với khoảng trắng hay dấu ; để phân cách chiều. • Cần lưu ý về số chiều của các ma trận được nối hay ghép, nếu số chiều không đồng nhất, Matlab sẽ báo lỗi.
  33. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Nối và ghép ma trận • Ví dụ 2.17: Thực thi ghép nối các ma trận sau trên Matlab và nhận xét kết quả thu được: A = [[1 2 3], zeros(1,3)]; B = [[1 2 3]; ones(1,3)]; C = [99 A 42]; D = [A ; A]
  34. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Chỉ số ma trận • Chỉ số ma trận là một trong những kỹ thuật rất mạnh của Matlab cho phép chúng ta trích xuất một hay nhiều phần tử ma trận theo chỉ số. • Cú pháp: • A=X(I) với X là ma trận nguồn, I là chỉ số, vector, hay ma trận chỉ số và A là ma trận kết quả trả về.
  35. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Chỉ số ma trận Ví dụ 2.18: Thực hiện các phép toàn ma trận A chỉ bằng một dòng lệnh như sau: a. Cho ma trận A= reshape(1:36,6,6). i. Trích xuất các phần tử ở hàng cuối b. Trích xuất phần tử hàng 3, cột 5. cùng, cột 3. c. Trích xuất phần tử (1,4) ; (2,4) ; (3,4). j. Trích xuất ma trận vuông 2×2 trên d. Trích xuất phần tử ở hàng 4 cột 1 3 lần. đường chéo chính có phần tử ở hàng và e. Trích xuất 4 phần tử có chỉ số như sau: cột cuối cùng. (2,3) ; (2,1) ; (5,3) ; (5,1). k. Trích xuất 4 phần tử cuối cùng ở cột f. Trích xuất cột thứ 4. đầu tiên. g. Trích xuất hàng thứ 4 l. Trích xuất tất cả phần tử theo thứ tự h. Chuyển ma trận về thành vector cột. hàng ngược. m. Trích xuất ma trận đường chéo chính.
  36. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Chỉ số ma trận
  37. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Chỉ số ma trận
  38. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Chỉ số ma trận logic • Có 2 bước để sử dụng chỉ số ma trận logic: • Bước 1: Tạo ra ma trận chỉ số logic ở dạng 0 và 1. Ở Bước 1 này, chúng ta có thể sử dụng các toán tử như , =, ==, ~=, hoặc các hàm có giá trị trả về dạng logic như isprime() or isfinite(). Trong một số trường hợp, chúng ta cần dùng lệnh find() để tạo ra ma trận chỉ số logic; • Bước 2: Áp dụng vào trong ma trận muốn trích xuất dữ liệu.
  39. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Chỉ số ma trận logic • Ví dụ 2.19: Cho ma trận A = [ 1 2 3; 4 5 6; 7 8 9], thực hiện các phép toán sau dùng Matlab: a. Trích xuất các phần tử là số nguyên tố. b. Trích xuất các phần tử không phải là số nguyên tố. c. Trích xuất các phần tử có giá trị lớn hơn trung bình cộng của ma trận A. d. Trích xuất các phần tử lớn hơn 3 và nhỏ hơn 6.
  40. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép gán trong ma trận • Phép gán trong Matlab phức tạp hơn rất nhiều so với các ngôn ngữ khác khi có nhiều cách sử dụng. Tuy nhiên có thể giúp loại bỏ rất nhiều vòng lặp duyệt và tăng tốc độ thực thi của chương trình. • Điểm khác biệt của phép gán trong Matlab là kết hợp với chỉ số logic, chúng ta có thể gán cho toàn bộ các phần tử trong ma trận, một hàng, một cột, nhiều hàng, nhiều cột, một ma trận con, hay các phần tử thỏa mãn một tiêu chí cho trước.
  41. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép gán trong ma trận • Ví dụ 2.20: Cho ma trận A tương tự như ví dụ trên, A=[1 2 3; 4 5 6; 7 8 9], thực hiện các phép toàn sau dùng Matlab: a. Gán phần tử ở hàng 1, cột 3 bằng 5. b. Gán các phần tử ở hàng chẵn bằng 10. c. Gán các phần tử bằng 5 bằng -5. d. Tìm các giá trị nhỏ hơn hoặc bằng không và bình phương lên.
  42. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép gán trong ma trận
  43. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép xóa trong ma trận • Một điểm thú vị trong Matlab là cho phép chúng ta xóa trên ma trận bằng phép gán ma trận rỗng, ký hiệu là []. • Phép gán ma trận rỗng cho phép chúng ta xóa 1 hàng, 1 cột, nhiều hàng và cột cùng lúc và xóa cả ma trận. Phép xóa ma trận không cho phép chúng ta xóa đơn lẻ 1 phần tử trong ma trận.
  44. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép xóa trong ma trận • Ví dụ 2.21: Cho ma trận A như ví dụ trên A = [ 1 2 3; 4 5 6; 7 8 9], thực hiện các phép tính sau bằng hai phương pháp: lập trình truyền thống và dùng Matlab. a. Xóa dòng 2 và dòng 3. b. Xóa cột cuối cùng.
  45. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép xóa trong ma trận • Ví dụ 2.22: Xóa phần tử (1,1) ở ma trận A ở ví dụ 1
  46. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Mở rộng ma trận • Một số cách mở rộng ma trận trong Matlab: • Gán giá trị cho một phần tử ma trận lớn hơn kích thước của ma trận. Matlab sẽ không báo lỗi mà sẽ tự động mở rộng ma trận, tuy nhiên không khuyến khích sử dụng phương pháp này vì hiệu quả thực thi của Matlab sẽ thấp. Chúng ta nên tính toán kích thước ma trận và khai báo trước bằng cách sử dụng các hàm như ones() hay zeros(). • Ghép ma trận với nhau: điều kiện là số chiều ghép của các ma trận ghép phải bằng nhau. • Nhân vector hàng với vector cột bằng phép nhân phần tử .*: tạo ra ma trận có số hàng bằng chiều dài vector hàng và số cột bằng chiều dài vector cột.
  47. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Mở rộng ma trận • Ví dụ 2.23: Cho ma trận A = [ 1 2 ; 3 4], hãy thực hiện: a. Mở rộng ma trận A thành 10 hàng 10 cột, với phần tử ở hàng 10 cột 10 có giá trị là -10 và các phần tử còn lại là bằng -3. b. Từ ma trận A ở câu a, tạo ma trận vuông B có kích thước gấp 4 lần ma trận A.
  48. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Mở rộng ma trận • Ví dụ 2.24: Cho A = (1:5)’ và B = 1:5. Hãy tìm kết quả C = A.*B.
  49. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Chỉ số tuyến tính • Để định vị một phần tử trong ma trận, Matlab hỗ trợ hai loại chỉ số: • Chỉ số theo số chiều: ví dụ như số hàng và số cột của ma trận hai chiều. • Chỉ số tuyến tính: là một số chỉ ra thứ tự của phần tử tuần tự từ trên xuống dưới, từ trái qua phải và theo chiều tăng dần của ma trận.
  50. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Chỉ số tuyến tính • Ví dụ 2.25: Cho ma trận 2x2 A=[1 2; 3 4] a. Gán phần tử ở hàng 2 cột 2 bằng 5. b. Gán phần tử ở hàng 2 cột 2 bằng -5 dùng chỉ số tuyến tính.
  51. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Chỉ số tuyến tính • Ví dụ 2.26: Tạo ra ma trận 3x5 có phần tử tăng dần theo chỉ số tuyến tính dần từ 1 đến 15
  52. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Chỉ số tuyến tính • Trong một số trường hợp, chúng ta cần chuyển chỉsố thường sang chỉ số tuyến tính và ngược lại. Để thực hiện điều đó, Matlab cung cấp hai hàm như sau: • Cú pháp: • [I,J] = ind2sub(SIZ,IND): chuyển từ chỉ số tuyến tính IND sang chỉ số thường với dòng I và cột J của ma trận có kích thước SIZ. • IND = sub2ind(SIZ,I,J): chuyển đổi chỉ số thường với tham số cột I và tham số dòng J sang chỉ số tuyến tính IND của ma trận có kích thước SIZ.
  53. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Chỉ số tuyến tính • Ví dụ 2.27: Cho ma trận ngẫu nhiên 100×100, tìm chỉ số thường của phần tử có chỉ số tuyến tính 872. • Ví dụ 2.27: Cho ma trận ngẫu nhiên 100×100, tìm chỉ số thường của phần tử có chỉ số tuyến tính 872.
  54. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Phép điều chỉnh kích thước ma trận giữ nguyên số lượng phần tử • Trong một số trường hợp, chúng ta cần chuyển đổi kích thước của ma trận mà vẫn giữ nguyên tổng số phần tử của ma trận. Ví dụ thường gặp là khi chúng ta làm việc với các hàm mã hóa và giải mã. • Thay vì thực hiện hai bước truyền thống là chuyển đổi về thành vector và gán lại ma trận mong muốn, chúng ta có thể thực hiện yêu cầu trên với một lệnh reshape().
  55. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN •Phép điều chỉnh kích thước ma trận giữ nguyên số lượng phần tử • Cú pháp: • Y = reshape(X,M,N) • Y = reshape(X,[M,N]) • % với Y là ma trận trả về có kích thước M × N và Y là ma trận đầu vào. Lỗi sẽ xảy ra nếu tổng số phần tử của X không bằng M × N.
  56. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép điều chỉnh kích thước ma trận giữ nguyên số lượng phần tử • Ví dụ 2.29: Cho ma trận tuyến tính 3×10, hãy thực hiện: a. Chuyển thành ma trận 1×30. b. Chuyển thành ma trận 30×1. c. Chuyển thành ma trận 5×6. d. Chuyển thành ma trận 10×3.
  57. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép điều chỉnh kích thước ma trận giữ nguyên số lượng phần tử • Ví dụ 2.29:
  58. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép điều chỉnh kích thước ma trận giữ nguyên số lượng phần tử • Ví dụ 2.29:
  59. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép điều chỉnh kích thước ma trận giữ nguyên số lượng phần tử • Ví dụ 2.29:
  60. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép điều chỉnh kích thước ma trận giữ nguyên số lượng phần tử • Ví dụ 2.29: Cho ma trận tuyến tính 3×10, hãy thực hiện: a. Chuyển thành ma trận 1×30. b. Chuyển thành ma trận 30×1. c. Chuyển thành ma trận 5×6. d. Chuyển thành ma trận 10×3.
  61. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép điều chỉnh kích thước ma trận giữ nguyên số lượng phần tử
  62. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép toán trên từng phần tử ma trận • Với Matlab, chúng ta có hai cách để làm việc với ma trận, hoặc với toàn bộ ma trận hay với từng phần tử ma trận. Chúng ta có thể thực hiện các phép cộng, trừ, nhân, chia, lũy thừa với từng phần tử trong ma trận với một toán tử, bằng cách thêm dấu . trước các toán tử, cụ thể như cho trong bảng dưới:
  63. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép toán trên từng phần tử ma trận • Ví dụ 2.31: Cho ma trận A có giá trị như sau: A = [1 2 3; 4 5 6], thực hiện các phép toán sau: a. B = 3*A + 1 e. F = 1 – A b. C = 1./A f. G = A.^2 c. D = A.*C g. H = A^2 d. E = D – A Ma trận đơn vị 4×4. h. K = A*A’
  64. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN
  65. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép nhân ma trận • Phép nhân giữa ma trận A có kích thước m×n và ma trận B có kích thước n×p tạo ra ma trận C có kích thước m×p. • Nếu A là ma trận vuông có kích thước là n, phép lũy thừa ma trận A có thể thực hiện bằng cách nhân liên tiếp A cho chính nó k lần.
  66. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép nhân ma trận • Ví dụ 2.32: Cho ma trận A có giá trị như sau: A = [1 2 3; 4 8-4; 6 9 4], thực hiện các tính toán như sau: a. B = A -1/2 d. E = A.*A.*A b. C = A.*B e. F = A.^3 c. D = A.*B f. G = A^3
  67. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép nhân ma trận
  68. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép chia ma trận • Để thực hiện phép chia ma trận trong Matlab,Y = XW, tìm X với X là ma trận n×d, W là ma trận d × k và Y là ma trận n × k , chúng ta có hai cách như sau: • Sử dụng toán tử / • Sử dụng hàm inv() • Nếu X là khả nghịch, thì W = inv(X)*Y. Nếu n ≠ d , ta vẫn có thể tìm W thông qua phép giả nghịch đảo,W = inv(X’*X)*X*Y, hay dùng hàm pinv(), cụ thể là W = pinv(X)*Y . Lưu ý rằng: X\Y = (Y’/X’).
  69. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép chia ma trận: • Ví dụ 2.33: Chạy từng dòng lệnh Matlab sau và giải thích ý nghĩa của từng dòng lệnh, cho nhận xét. a. x= randn(3,3) b. y=randn(3,3) c. x\y d. (y'/x')'
  70. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Phép chia ma trận:
  71. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Đại số tuyến tính • Là ngôn ngữ dành cho ma trận, Matlab cung cấp rất nhiều hàm đại số tuyến tính, cụ thể: ❖Hàm magic() ❖ Hàm orth() ❖Hàm det() ❖ Hàm null() ❖Hàm rank() ❖ Hàm chol() ❖Hàm rref() ❖ Hàm eigs() ❖Hàm trace() ❖ Hàm svd() ❖Hàm cov() ❖ Hàm qr()
  72. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Đại số tuyến tính • Ví dụ 2.34: Thực hiện các dòng lệnh sau trên Matlab và giải thích ý nghĩa từng dòng lệnh và kết quả đạt được: a. A = magic(5); g. G = orth(A); b. B = det(A); h. H = null(A); c. C = rank(A); i. I = chol(A*A'); d. D = rref(A); j. [evecs,evals] = eigs(A); e. E = trace(A); k. [U,S,V] = svd(A); f. F = cov(A); l. [Q,R] = qr(A);
  73. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Mảng đa chiều • Ma trận số trong Matlab có thể mở rộng số chiều lớn hơn 2. Chúng ta có thể dùng các hàm như: zeros(), ones(), rand(), để tạo ra ma trận có nhiều chiều. Để tìm số chiều của ma trận, chúng ta có thể dùng hàm ndims(). • Cú pháp: • ndims(A) • % A là ma trận cần tìm số chiều
  74. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Mảng đa chiều • Ví dụ 2.35: Thực hiện các lệnh sau trong Matlab và giải thích từng dòng lệnh. • A = magic(3); A(:,:,2) = magic(3)’; size(A); A(:,:,2)=[]; ndims(A);
  75. MA TRẬN VÀ XỬ LÝ TRÊN MA TRẬN • Đại số tuyến tính • Ví dụ 2.34: Thực hiện các dòng lệnh sau trên Matlab và giải thích ý nghĩa từng dòng lệnh: a. A = ones(3,5,9,2,2); d. D = C(1,1,1,1) b. B = cat(3,[1 2 ; 4 5], [3 2 ; e. A(1,2,2,1) = 99; 1 1]) f. F = mean(C,4); c. C = repmat([1 2 ; 3 4], g. G = max(A,[],3); [2,2,2,2]); D = rref(A);
  76. CÁC LỆNH ĐIỀU KIỆN • Lệnh if, else, elseif • Cú pháp của hàm if có dạng như sau: if biểu thức logic lệnh thực hiện elseif biểu thức logic lệnh thực hiện elseif lệnh thực hiện end
  77. CÁC LỆNH ĐIỀU KIỆN • Lệnh if, else, elseif • Ví dụ 2.37: Nhập vào tháng và năm, tính số ngày của tháng.
  78. CÁC LỆNH ĐIỀU KIỆN • Lệnh switch • Lệnh switch cho phép thực hiện những trường hợp mà phải thực hiện bằng nhiều lệnh elseif. Cú pháp của lệnh switch như sau: switch biểu thức lựa chọn CASE biểu thức trường hợp, thực thi các lệnh CASE biểu thức trường hợp, thực thi các lệnh OTHERWISE, thực thi các lệnh END
  79. CÁC LỆNH ĐIỀU KIỆN • Lệnh switch • Ví dụ 2.37: Lập trình nhập vào tháng và năm và trả lời số ngày trong tháng sử dụng lệnh switch và case.
  80. CÁC LỆNH ĐIỀU KIỆN • Lệnh for • Lệnh for là một trong những lệnh vòng lặp chủ đạo của Matlab. Lệnh for có cấu trúc đơn giản như sau: for biến chạy = giá trị bắt đầu : giá trị nhảy : giá trị cuối lệnh thực thi END • Vòng lặp for thường dùng khi chỉ số bắt đầu và chỉ số kết thúc vòng lặp là rõ ràng. Nhược điểm của vòng lặp for là sẽ tốn nhiều thời gian khi chiều dài của vector hay số chiều của ma trận lớn.
  81. CÁC LỆNH ĐIỀU KIỆN • Lệnh for • Ví dụ 2.39: Sử dụng vòng lặp for để tính n!. a. Cách 1: dùng vòng for. b. Cách 2: không dùng vòng lặp for
  82. CÁC LỆNH ĐIỀU KIỆN • Lệnh for • Ví dụ 2.40: Cho vector nhị phân có chiều dài N có các phần tử có phân bố đều. Hãy tìm các giá trị bằng 1 trong vector và thay thế bằng 2. a. Dùng lệnh for. b. Không dùng lệnh for tạo ma trận rỗng.
  83. CÁC LỆNH ĐIỀU KIỆN • Lệnh while • Lệnh while thường được dùng để thực thi một đoạn mã chương trình cho đến khi điều kiện dừng thỏa mãn. Điểm khác biệt chính của vòng lặp while so với vòng lặp for là điều kiện dừng của vòng lặp while thường phức tạp hơn và không đơn giản là lặp lại như vòng lặp for • Cú pháp: while biểu thức logic lệnh thực thi END
  84. CÁC LỆNH ĐIỀU KIỆN • Lệnh while • Trong một số trường hợp, chúng ta có thể dùng vòng lặp while với lệnh thoát vòng lặp break với cú pháp như sau: • Cú pháp: while(true) %thực hiện lệnh if(condition) break; end end
  85. CÁC LỆNH ĐIỀU KIỆN • Lệnh while • Ví dụ 2.41: Sử dụng vòng lặp while viết chương trình tính n!
  86. CHUỖI • Mảng ký tự • Chuỗi trong Matlab là ma trận các ký tự, do đó chúng ta có thể tương tác và xử lý chuỗi trong Matlab tương tự như cách chúng ta xử lý ma trận số. • Ví dụ 2.42: Thực hiện các dòng lệnh sau trong Matlab và xem xét kết quả: a. A = ' This is Test String #1! ‘ g. F = isletter(A(1:6)) b. B = A(1:5) h. G = isspace(A(1:6)) c. C = [A ; A] i. H = upper(A) d. D = repmat('@!',2,5) j. I = lower(A) e. E = 'z':-1:'a' k. J = strtrim(A) f. check = ischar(A) l. K = deblank(A)
  87. CHUỖI • Mảng ký tự • Ví dụ 2.42: Thực hiện các dòng lệnh sau trong Matlab và xem xét kết quả:
  88. CHUỖI • Mảng ký tự • Ví dụ 2.43: Thực hiện các dòng lệnh sau trong Matlab và xem xét kết quả: a. str = ' a1!‘ d. C = isstrprop(str,'digit') b. A = isstrprop(str,'punct') e. D = isstrprop('3A','xdigit') c. B = isstrprop(str,'alphanum')
  89. CHUỖI • Mảng ký tự • Ví dụ 2.44: Viết chương trình nhập tên của bạn. Chuyển thành mã ASSCI và viết hoa toàn bộ.
  90. CHUỖI • Mảng ký tự • Ví dụ 2.45: Thực hiện các dòng lệnh sau trong Matlab và xem xét kết quả: a. A = dec2hex(211) c. C = dec2bin(211) b. B = hex2dec('D3') d. D = bin2dec('11010011')
  91. CHUỖI • Mảng ký tự • Ví dụ 2.46: Thực hiện các dòng lệnh sau trong Matlab và xem xét kết quả: a. A = dec2hex(211) b. B = hex2dec('D3') c. C = str2num('44')
  92. CHUỖI • Mảng ký tự • Ví dụ 2.47: Kiểm chứng chức năng của các hàm strcat(), strvcat(), sortrows() và strjust() thông qua 3 dòng lệnh sau: a. C = dec2hex(211) b. D = hex2dec('D3') c. E = strjust(C)
  93. CHUỖI • Xuất chuỗi • Để xuất chuỗi ra màn hình hay lưu dưới dạng file trong Matlab, ta dùng hàm sprint() hay hàm fprint(). Lưu ý là hàm sprint() tương tự như fprint() nhưng sprint() chỉ xuất ra chuỗi hay vector ký tự trên màn hình. • Cú pháp: • str = sprintf(formatSpec,A1, ,An) • [str,errmsg] = sprintf(formatSpec,A1, ,An) • str = sprintf(literalText) • formatSpec là chuỗi ký tự xuất ra màn hình theo mong muốn. Thông tin cụ thể hơn về hàm sprint() và fprint() có thể tìm hiểu ở phần mềm Matlab thông qua lệnh: doc sprint và doc fprint.
  94. CHUỖI • Xuất chuỗi
  95. CHUỖI • Mảng cell • Mảng cell (cell array) là một loại dữ liệu có cấu trúc trong Matlab. Mảng cell có thể chứa bất kỳ dữ liệu nào từ ma trận số với kích thước khác nhau tới mảng ký tự và mảng cell, • Chúng ta thường sử dụng mảng cell để lưu trữ dữ liệu khi thực hiện mô phỏng, ví dụ toàn bộ tính chất của đối tượng cần mô phỏng. • Để tạo mảng cell, chúng ta dùng dấu {} hoặc dùng hàm cell().
  96. CHUỖI • Mảng cell
  97. CHUỖI • So sánh chuỗi
  98. CHUỖI • So sánh chuỗi
  99. CHUỖI • So sánh chuỗi
  100. CHUỖI • So sánh chuỗi • Ví dụ 2.56: Tìm từ ‘foo’ trong mảng cell {'foobar','bar','barfoo','foofoo'}
  101. CHUỖI • Các toàn tử trên tập • Matlab cho phép chúng ta thực hiện các toán tử trên tập, ví dụ như: • union(); • intersect(); • setdiff(); • setxor(); • ismember(); • unione(); • mysetdiff(); • unique(); • perms();
  102. CHUỖI • Các toàn tử trên tập • Ví dụ 2.57: Thực hiện dòng lệnh sau và giải thích lệnh thực thi: a. set1 = 1:2:9 f. xor = setxor(set1,set2) b. set2 = 1:4 g. check = ismember(3,set1) c. int = intersect(set1,set2) h. set3 = {'alpha','beta','gamma'} d. uni = union(set1,set2) i. set4 = {'delta','beta','epsilon'} e. dif = setdiff(set1,set2) j. intc = intersect(set3,set4) k. check2 = ismember('delta',set4)
  103. CHUỖI • Các toàn tử trên tập • Ví dụ 2.57: Thực hiện dòng lệnh sau và giải thích lệnh thực thi:
  104. CHUỖI • Các toàn tử trên tập • Ví dụ 2.57: Thực hiện dòng lệnh sau và giải thích lệnh thực thi:
  105. CHUỖI • Các toàn tử trên tập • Ví dụ 2.58: Kiểm tra tất cả các số 1 3 5 7 có phải là số nguyên tố không? Kiểm tra có số nguyên tố nào trong 4 số 1 3 5 7 không?
  106. CHUỖI • Các toàn tử trên tập • Ví dụ 2.59: Nhập vào họ của 3 người trong gia đình bạn, tìm các họ có trong gia đình bạn.
  107. CHUỖI • Cấu trúc • Bên cạnh ma trận và mảng cell, Matlab còn hỗ trợ chúng ta mảng có cấu trúc hay gọi tắt là cấu trúc (structs). Cấu trúc về mặt tổ chức dữ liệu sẽ chặt chẽ hơn và chúng ta có thể truy cập dữ liệu theo tên của trường trong cấu trúc. Chúng ta có thể tạo cấu trúc dữ liệu trong Matlab theo hàm struct(). Lưu ý tên các trường phải đặt theo quy cách tương tự như đặt tên biến. Để chắc chắn tên trường trong cấu trúc là hợp lệ, ta cần dùng hàm isvarname() • Khi làm việc trên cấu trúc, ta có các hàm sau: isstruct(), fieldnames(), orderfields() và rmfield(). • Chúng ta có thể tạo cấu trúc từ mảng cell và ngược lại sử dụng hàm cell2struct() và struct2cell().
  108. CHUỖI • Cấu trúc • Ví dụ 2.60: Hãy khai báo một cấu trúc thông tin của sinh viên gồm ba thành phần gồm họ và tên, năm sinh và giới tính. a. Kiểm tra có phải là cấu trúc không? e. Thêm một trường ‘Noi_Sinh’ b. Liệt kê ra các trường của cấu truc f. Kiểm tra tên trường “Ho_va_Ten” có hợp c. Kiểm tra ‘Gioi_Tinh’ có phải là một lệ không? trường trong cấu trúc sinh viên không? g. Tạo ra một mảng cấu trúc với sinh viên d. Xếp thứ tự các trường thứ hai. h. Lấy năm sinh của hai sinh viên
  109. CHUỖI • Cấu trúc • Ví dụ 2.60: Hãy khai báo một cấu trúc thông tin của sinh viên gồm ba thành phần gồm họ và tên, năm sinh và giới tính.
  110. CHUỖI • Cấu trúc • Ví dụ 2.60: Hãy khai báo một cấu trúc thông tin của sinh viên gồm ba thành phần gồm họ và tên, năm sinh và giới tính.
  111. SỬA LỖI (DEBUG) • Gặp lỗi và sửa lỗi trong quá trình lập trình là một việc gần như không thể tránh khỏi. Có nhiều nguyên nhân dẫn đến lỗi lập trình, về cơ bản bao gồm: lỗi cú pháp, lỗi giải thuật và lỗi lập trình. • Trình soạn thảo (Editor) của Matlab cung cấp cho chúng ta một số phương pháp trực quan để phát hiện và giảm thiểu các lỗi trong quá trình lập trình (quá trình chuyển đổi từ ý tưởng và giải thuật thành mã Matlab).
  112. SỬA LỖI (DEBUG) • Các gợi ý để giảm thiểu lỗi trong quá trình lập trình: • Tên biến phải đặt hợp lý, có tính gợi nhớ, hạn chế sử dụng biến toàn cục. • Các chứng năng khác nhau có tính lặp lại khi thực hiện nên tách ra thành hàm và thực hiện gọi hàm khi cần thiết. • Sử dụng “smart indent”, phím tắt Ctrl+I, trong trình soạn thảo của Matlab, để làm tường minh chương trình Matlab. • Chỉnh sửa toàn bộ lỗi cú pháp nếu có do trình soạn thảo chỉ ra, lưu ý các dấu ~ màu đỏ và chỉ dấu tô vàng xuất hiện trong trình soạn thảo. • Kiểm tra giá trị các biến có phù hợp hay không bằng cách sử dụng breakpoint • Lưu trữ các biến trong quá trình mô phỏng để phân tích lỗi
  113. PHẦN CHÚ GIẢI • Phần chú giải ttrong Matlab gọi là comment. Trong Matlab, phần chú giải bắt đầu bằng dấu %. • Khi lập trình, nên tiến hành ghi phần chú giải ngay sau lúc viết mã chương trình sẽ là hiệu quả nhất
  114. PHẦN CHÚ GIẢI • Nguyên tắc viết chú giải cho một hàm thường được viết sau lệnh function: • Tóm tắt chức năng của hàm • Tham số đầu vào: các định nghĩa và quy định • Tham số đầu ra: các định nghĩa và quy định • Ví dụ sử dụng hàm (nếu có).
  115. Vẽ trong Matlab • Matlab cung cấp rất nhiều hàm để biểu diễn dữ liệu từ hai chiều (2D) đến ba chiều (3D). Phần sau đây sẽ trình bày một số hàm vẽ của Matlab. • Vẽ đồ thị : Khi thu thập dữ liệu và muốn biểu diễn phân bố hai chiều, chúng ta dùng hàm plot(). Hàm plot() của Matlab rất mạnh, cho phép chúng ta tùy chỉnh đồ thị thông qua các tính chất của đồ thị. ∎ Cú pháp: plot(X1,Y1,LineSpec1, ,Xn,Yn,LineSpecn) % X1, Y1 là dữ liệu trục X và dữ liệu trục Y của đồ thị thứ nhất. Lưu ý là số chiều của X1 và Y1 phải giống nhau. % LineSpecn là tham số để điều chỉnh đường vẽ, ví dụ như độ dày, loại nét vẽ. Để điều chỉnh các đường vẽ, chúng ta có thể điều chỉnh độ dày, loại nét vẽ và các loại điểm vẽ thông qua các tham số “Linestyle”, “Linewidth”, và “Marker” cho trong Bảng 2.3.
  116. ∎ Bên cạnh hàm plot() để vẽ biểu đồ 2D, chúng ta cần nghiên cứu thêm các hàm vẽ biểu đồ khác để phục vụ nhu cầu biểu diễn dữ liệu trong Matlab như Bảng 2.4. Chúng ta có thể tự học chức năng và cách dùng của hàm này qua phần giúp đỡ của Matlab
  117. Ví dụ VD1: Vẽ đồ thị các điểm dữ liệu với dữ liệu ngẫu nhiên được tạo như sau: X = 5*rand(100,1); Y = rand*X + rand(100,1); ∎ Matlab cho phép chúng ta điều chỉnh cách thức thể hiện đồ thị, về loại đường, độ dày, và nhiều tính chất khác. Chúng ta có thể tham khảo thông qua lệnh doc linespec. Hình 2.4: Minh họa vẽ đồ thị 2D với dữ liệu ngẫu nhiên
  118. Ví dụ • VD2: Hãy điều chỉnh kích thước, màu sắc và độ dày của mỗi điểm biểu diễn trên đồ thị của ví dụ trên thành hình tròn màu đỏ viền đen lớn. Giải: Lệnh điều chỉnh như sau. Hình 2.5: Hình vẽ của Ví dụ 2
  119. Ví dụ • VD3: Sử dụng hàm fplot() vẽ đồ thị của hàm 3 2 + 4 . Giải: Ta sẽ vẽ đồ thị với trục x trong khoảng từ (−5,5). Hình 2.6: Đồ thị của hàm khi vẽ với hàm fplot()
  120. Đặt tiêu đề và đặt tên cho các trục đồ thị • Chúng ta có thể đặt tên cho đồ thị, trục đồ thị và đồng thời điều chỉnh vùng hiển thị của đồ thị với các lệnh axis(), xlabel(), ylabel() và title() với cú pháp như sau. Cú pháp: axis([-1,6,-1,5]); xlabel('x’); ylabel('y’); title('Tên của đồ thị’); VD: Đặt tên cho đồ thị của Ví dụ 2.63 với tên là “Đồ thị vẽ Y theo X dùng hàm plot()”. Giải: Chúng ta thực hiện lệnh như sau: title(‘Đồ thị vẽ Y theo X dùng hàm plot()’); Hình 2.7: Minh họa đặt tên cho đồ thị.
  121. Đặt tiêu đề và đặt tên cho các trục đồ thị • Bên cạnh hàm plot() để vẽ hàm 2D với hai trục trên đồ thị đều tuyến tính, Matlab còn cung cấp cho chúng ta các hàm semilogx(), semilogy() và loglog() để vẽ đồ thị dạng log cơ số 10 cho trục x, trục y và cho cả hai trục x và y. VD: Biết rằng xác suất dừng của hệ thống SISO trên kênh truyền fading Rayleigh là OP 훾푡ℎ =exp( ) 훾ഥ với 훾푡ℎ =1 là ngưỡng dừng và 훾ҧ là tỷ lệ tín hiệu trên nhiễu trung bình. Hãy vẽ đồ thị của OP theo tỷ lệ tín hiệu trên nhiễu trung bình từ 0 đến 30 dB
  122. Ví dụ • VD: Biết rằng xác suất dừng của hệ thống SISO trên kênh truyền fading Rayleigh là 훾푡ℎ OP=exp( ) với 훾 =1 là ngưỡng dừng và 훾ҧ là 훾ഥ 푡ℎ tỷ lệ tín hiệu trên nhiễu trung bình. Hãy vẽ đồ thị của OP theo tỷ lệ tín hiệu trên nhiễu trung bình từ 0 đến 30 dB Giải: Chúng ta thực hiện đoạn mã sau ở cửa sổ lệnh. Hình 2.8: Vẽ đồ thị xác suất dừng hệ thống sử dụng hàm semilogy().
  123. Vẽ trên cùng một đồ thị và ghi chú đồ thị • Để thực hiện so sánh kết quả mô phỏng hay kết quả lý thuyết, chúng ta thông thường biểu diễn kết quả trên cùng một trục đồ thị và thực hiện ghi chú đồ thị để phân biệt. • Chúng ta có 2 cách: - Cách 1: Đưa dữ liệu của hai hay nhiều đường đồ thị là tham số đầu vào của hàm plot. - Cách 2: Vẽ tuần tự từng đường đồ thị và sử dụng hàm hold on. • Việc thực hiện ghi chú đồ thị thực hiện thông qua hàm legend() • Muốn điều chỉnh vị trí của phần ghi chú trên đồ thị, chúng ta thiết lập tham số “Location” theo các giá trị như Bảng 2.5
  124. Vẽ trên cùng một đồ thị và ghi chú đồ thị Hàm grid on/off cho phép chúng ta bật/tắt lưới trên đồ thị. Để biểu diễn các thanh lỗi của đồ thị, chúng ta dùng hàm errorbar().
  125. Ví dụ VD: Vẽ hàm sin và cos trong hai chu kỳ và vẽ thanh lỗi cho hàm sin. Giải: Chúng ta thực hiện trên trình biên soạn của Matlab như sau: Hình 2.9: Kết quả của Ví dụ.
  126. Chia nhỏ đồ thị và đồ thị con • Trong một số tình huống chúng ta muốn biểu diễn nhiều hình và mỗi hình trên một đồ thị con. Matlab cho phép chúng ta thực hiện điều này với subplot(), cú pháp như sau: Cú pháp: subplot(nr,nc,i) % nr: tổng số lượng cột % nc: tổng số lượng hàng % i: chỉ số của đồ thị con theo quy định từ trái sang phải, từ trên xuống dưới.
  127. Ví dụ VD: Vẽ 6 đồ thị trong 2 dòng, mỗi đồ thị là biểu đồ tần suất của các biến ngẫu nhiên rand(1,100). Giải: 6 đồ thị trong hai dòng nghĩa là nr = 2 và nc = 3. Hình 2.10: Kết quả của Ví dụ
  128. Cấu hình đồ thị ∎ Trong một số trường hợp, chúng ta muốn điều chỉnh các tính chất của đồ thị. Có hai cách để thực hiện, một là thực hiện bằng cách sử dụng các hàm, ví dụ như hàm get(), set(), handle(), hay thực hiện bằng cách tương tác trực tiếp trên đồ thị bằng cách mở “Open Property Inspector” như Hình 2.11. Hình 2.11: Nút cuối cùng bên phải là Open Property Inspector.
  129. Biểu đồ tần suất Histograms là biểu đồ tần suất trong tiếng Việt, là một công cụ hữu ích để vẽ hàm mật độ phân bố xác suất của biến ngẫu nhiên. Có hai cách để vẽ biểu đồ tần suất: + Tự lập trình theo định nghĩa. + Sử dụng hàm có sẵn của Matlab. Nếu theo định nghĩa, giả sử chúng ta có biến ngẫu nhiên R, có chiều dài là N. Ta thực hiện theo các bước như sau: - Bước 1: tìm giá trị nhỏ nhất và lớn nhất của R - Bước 2: xác định phân vùng trục R của biểu đồ tần suất. - Bước 3: tính số lượng giá trị của R trong từng phân vùng. - Bước 4: vẽ biểu đồ tần suất bằng cách lấy số lượng của giá trị trong từng phân vùng chia cho chiều dài của R. - Bước 5 (nếu có): vẽ biểu đồ hàm mật độ phân bố xác suất của R kiểm chứng kết quả ở Bước 4.
  130. Ví dụ VD: Thực hiện vẽ biểu đồ tần suất của biến ngẫu nhiên phân bố Gauss có trung bình bằng 3 và phương sai bằng 1. Giải: Chúng ta sẽ sử dụng hàm randn() để tạo biến ngẫu nhiên phân bố chuẩn, sau đó sẽ nhân với độ lệch chuẩn và cộng với giá trị trung bình để tạo ra phân bố Gauss như mong muốn.
  131. Sau đó, thực hiện giải thuật 5 bước để vẽ biểu đồ tần suất như sau. Hình 2.12: Biểu đồ tần suất và hàm PDF theo giải thuật 5 bước.
  132. Biểu đồ tần suất ∎ Cách thứ 2 là sử dụng hàm có sẵn của Matlab, đó là hàm histogram(). Cú pháp: histogram(X,M) với X là vector cần vẽ biểu đồ tần suất và M nếu là một số là số lượng mốc vẽ trên đồ thị. VD: Cho điểm của 10 học sinh như sau 4, 5, 7, 9, 2 4, 9, 10, 10, 2. Hãy vẽ đồ thị tần suất theo điểm từ 0 đến 10. Giải: Chúng ta dùng hàm histogram() để vẽ đồ thị tần suất. Hình 2.13: Đồ thị tần suất của
  133. Vẽ hàm mật độ phân bố xác suất và hàm phân bố xác suất tích lũy + Matlab hỗ trợ hai hàm pdf() và cdf() để tính giá trị hàm mật độ phân bố xác suất và hàm phân bố xác suất tích lũy. Cú pháp của hai hàm này như sau: Cú pháp: Y = pdf(NAME,X,A) % NAME là tên của phân phối, cho ở Bảng 2.6. % X là điểm cần tính giá trị pdf % A là tham số của phân phối. Nếu phân phối có nhiều hơn một tham số, các tham số có thể tiếp nối sau A. Cú pháp: Y = cdf(NAME,X,A) % NAME là tên của phân phối, cho ở Bảng 2.6. % X là giá trị cần tính giá trị cdf % A là tham số của phân phối. Nếu phân phối có nhiều hơn một tham số, các tham số có thể tiếp nối sau A. Malab không hỗ trợ tất cả các phân phối xác suất mà chỉ hỗ trợ các phân phối xác suất cho trong Bảng 2.6
  134. Ví dụ VD1: Thực hiện các câu sau: a. Vẽ hàm PDF và CDF của phân bố chuẩn. b. Vẽ các vùng diện tích bên dưới hàm PDF. c. Vẽ đường chia cắt các vùng diện tích.
  135. Ví dụ 1 Hình 2.14: Hàm PDF và CDF của phân bố chuẩn
  136. Đọc một file ảnh và trình chiếu Matlab cung cấp hàm imagesc() để trình chiếu một ma trận ảnh. Nếu có Toolbox image processing, ta có thể dùng hàm imshow(). Để đọc và chuyển một ảnh thành ma trận điểm ảnh, ta dùng hàm imread(). VD2: Biết rằng mandrill một file lưu ma trận ảnh X có sẵn trong Matlab. Hãy trình chiếu ma trận X chưa trong mandrill theo các mức xám.
  137. Ví dụ 2 Giải: Chúng ta lần lượt dùng các hàm load(), figure(), imagesc(), axis() và hàm colormap(). Hình 2.16: Hình mức xám dùng hàm imagesc. Trong một số trường hợp, chúng ta có thể dùng hàm imagesc() để vẽ biểu đồ nhiệt của ma trận 2 chiều.
  138. Đọc một file ảnh và trình chiếu VD3: Vẽ biểu đồ nhiệt của ma trận ngẫu nhiên theo phân bố chuẩn 10×10. Giải: Ta dùng hàm randn() để tạo ma trận ngẫu nhiên theo phân bố chuẩn. Ta thực hiện lệnh sau: Hình 2.17: Đồ thị nhiệt của randn(10,10).
  139. Hàm lưu trữ và in ấn Để lưu trữ kết quả mô phỏng, đặc biệt là các mô phỏng tốn nhiều thời gian để thực thi, chúng ta có thể dùng hàm print() và hàm save() trong các chương trình mô phỏng Matlab. Cú pháp: print(filename, formattype) % filename là tên file muốn lưu % formattype: là định dạng muốn lưu file + Ví dụ PDF ('-dpdf'), encapsulated PostScript ('-depsc'), JPEG ('-djpeg'), PNG (‘-dpng’) Cú pháp: save(FILENAME): % lưu toàn bộ biến ở Workspace thành file có tên là FILENAME theo định dạng .mat của Matlab. save(FILENAME,VARIABLES) % lưu các biến VARIABLES vào file có tên FILENAME
  140. LaTeX trong Matlab Matlab có hỗ trợ LaTeX bao gồm các lệnh bổ nghĩa ở Bảng 2.7
  141. LaTeX trong Matlab Các ký tự đặc biệt ở Bảng 2.8. Để sử dụng chế độ LaTeX, sử dụng ký hiệu $$ xung quanh mã LaTeX. Lưu ý rằng khi sử dụng chế độ LaTeX, Matlab sử dụng font chữ mặc định và các thuộc tính như FontName, Fontweight và FontAngle trở nên không có hiệu lực.
  142. Ví dụ VD1: Thực hiện dòng lệnh sau và quan sát kết quả mà Matlab trả về: x = 1:10; n = randn(size(x)); x1 = x + n; x2 = x./n; plot(x,x,x,x1,x,x2); leg1 = legend('$\bar{x}$','$\tilde{x}$','$\hat{x}$’); set(leg1,'Interpreter','latex’); set(leg1,'FontSize',17); set(gcf,'color','w'); Giải: Sau khi thực hiện các dòng lệnh trên, chúng ta có Hình 2.18. Hình 2.18: Hình từ ví dụ trên
  143. Ví dụ VD2: Sử dụng hàm latex() để trả về mã LaTeX cho biểu thức của các biến symbolic sau a. 2 x + 1/x b. sin(pi*x) + phi. Giải: Điểm lưu ý là chúng ta cần khai báo biến symbolic cho x và phi trước khi thực hiện lệnh latex(). Ta thực hiện lệnh sau :
  144. LẬP TRÌNH GIAO DIỆN VÀ ỨNG DỤNG TRONG MATLAB • Matlab hỗ trợ hai cách để lập trình giao diện: • App Designer: Đây là cách lập trình giao diện mới, hỗ trợ nhiều công cụ và chức năng hơn và đặc biệt là có hỗ trợ biên dịch với Matlab compiler. • GUIDE và Programmatic Workflow: là phiên bản cũ của App Designer có thể phù hợp với mọi phiên bản Matlab. Để khởi tạo GUIDE, chúng ta gõ “guide” ở cửa sổ lệnh.
  145. LẬP TRÌNH GIAO DIỆN VÀ ỨNG DỤNG TRONG MATLAB • Cách lập trình trên App Designer • “Design View”: giao diện để chúng ta thiết kế giao diện cho ứng dụng dùng phương pháp kéo và thả, toàn bộ thư viện các thành phần (components) ở cột bên trái. • “Code View”: giao diện để lập trình các chức năng cho ứng dụng. Phần lập trình được sẽ có màu sáng và điều chỉnh được, phần không lập trình và điều chỉnh được sẽ có màu tối.
  146. LẬP TRÌNH GIAO DIỆN VÀ ỨNG DỤNG TRONG MATLAB • Các nhóm thành phần hỗ trợ trong App Designer
  147. LẬP TRÌNH GIAO DIỆN VÀ ỨNG DỤNG TRONG MATLAB • Để thay đổi các đặc tính (property) của các thành phần trong giao diện, chúng ta tham chiếu tới cột “Component Browser” rồi lựa chọn “Component”, tiếp theo là “Property” mà chúng ta muốn điều chỉnh
  148. LẬP TRÌNH GIAO DIỆN VÀ ỨNG DỤNG TRONG MATLAB • Sau khi thiết kế xong giao diện ở mục “Desgin View”, chúng ta sẽ lập trình chức năng cho giao diện bằng một trong hai cách sau: • Cách 1: Nhấp phải vào đối tượng và chọn “Callbacks” và chọn “Goto ” • Cách 2: Chuyển qua TAB “Code View” để lập trình chức năng cho giao diện
  149. LẬP TRÌNH GIAO DIỆN VÀ ỨNG DỤNG TRONG MATLAB • Ví dụ 2.76: Lập trình giao diện vẽ tín hiệu hình sin và nhiễu trắng cộng trong hai chu kỳ. a. Đồ thị có tên là “Đồ thị sin(x) cộng nhiễu” b. Sử dụng slider để điều chỉnh biên độ nhiễu và vẽ tín hiệu • Giải: Ta thực hiện các bước như sau: • Bước 1: Chúng ta thiết kế giao diện gồm thành phần: Axes và Slider. • Đối với Axes vào mục Title: String điều chỉnh “Đồ thị sin(x) cộng nhiễu”. • Đối với Slider, thay đổi Label thành “Công suất nhiễu”. • Bước 2: Vào mục Callbacks, cập nhật như sau:
  150. LẬP TRÌNH GIAO DIỆN VÀ ỨNG DỤNG TRONG MATLAB • Ví dụ 2.76: Lập trình giao diện vẽ tín hiệu hình sin và nhiễu trắng cộng trong hai chu kỳ.
  151. LẬP TRÌNH GIAO DIỆN VÀ ỨNG DỤNG TRONG MATLAB • Ví dụ 2.76: Lập trình giao diện vẽ tín hiệu hình sin và nhiễu trắng cộng trong hai chu kỳ.
  152. CÁCH THỨC LẬP TRÌNH TRONG MATLAB • Có hai cách đơn giản để thực hiện một giải thuật trong Matlab: • Cách 1: Trực tiếp từng dòng lệnh ở cửa sổ lệnh. Cách này có ưu điểm là dễ tương tác và cho ngay kết quả trên cửa sổ lệnh. Phù hợp với các bài toán chỉ có 1 hoặc 2 dòng lệnh. • Cách 2: Thực hiện thông qua Script hay live Script, lưu tương ứng ở dạng .m hay .mlx. Script (hay live Script), là tập hợp các dòng lệnh Matlab và có thể gọi hàm (function) của Matlab. Điểm khác của Script với function là thực hiện các dòng lệnh Matlab mà không có tham số đầu vào và giá trị trả về.
  153. CÁCH THỨC LẬP TRÌNH TRONG MATLAB • Ví dụ 2.77: Sử dụng Matlab tính tổng N số tự nhiên đầu tiên a. Tư duy theo ngôn ngữ cấp thấp. b. Tư duy theo Matlab. • Chúng ta được kết quả như sau:
  154. CÁCH THỨC LẬP TRÌNH TRONG MATLAB • Ví dụ 2.78: Tạo ngẫu nhiên một cột điểm sinh viên theo phân bố đều từ 0 đến 10, sau đó tính tổng số lượng sinh viên đậu môn học (>=5).
  155. CÁCH THỨC LẬP TRÌNH TRONG MATLAB • Ví dụ 2.79: So sánh thời gian giải thuật chạy của ví dụ trên sử dụng hàm tic và toc.
  156. CÁCH THỨC LẬP TRÌNH TRONG MATLAB • Ví dụ 2.79: So sánh thời gian giải thuật chạy của ví dụ trên sử dụng hàm tic và toc.
  157. GIỚI THIỆU CÁC TOOLBOX MATLAB QUAN TRỌNG KHÁC