Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577

4,507 views
4,287 views

Published on

http://tailieu.vncty.com/index.php

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,507
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
219
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577

  1. 1. BÀI GIẢNG ĐIỆN TỬ TIN HỌC ỨNG DỤNG TRONG KỸ THUẬT ĐỊA CHẤT & DẦU KHÍ Tác giả: ThS. Đỗ Quang Khánh ThS. Bùi Tử An Bộ môn: Khoan & Khai thác dầu khí©Copyright 2007 MATLAB
  2. 2. ©Copyright 2007 MATLAB 2 MATLAB CĂN BẢN  Tổng quan về MATLAB  Các phép toán, biểu thức và hàm cơ bản  Lập trình trong MATLAB  Đồ họa cơ bản  Cấu trúc chương trình  BÀI TẬP
  3. 3. ©Copyright 2007 MATLAB 3 CÁC VẤN ĐỀ NÂNG CAO TRONG MATLAB  Symbolic trong MATLAB  Ma trận và đại số tuyến tính  Hàm số và phương trình  Đồ họa nâng cao  Vấn đề tạo giao diện  BÀI TẬP
  4. 4. ©Copyright 2007 MATLAB 4 TỔNG QUAN VỀ MATLAB  MATLAB (Matrix Laboratory) là một ngôn ngữ thông dịch, cho phép thực hiện nhanh chóng các giải thuật, hiển thị dữ liệu (dưới dạng đồ thị 2D, 3D, hình ảnh và thậm chí chuỗi hình ảnh) và thực hiện các giao tiếp đồ họa dễ dàng.  Ưu điểm:  Cung cấp một công cụ tính toán và lập trình bậc cao dễ sử dụng, hiệu quả và thân thiện. SIMULINK giúp người sử dụng thực hiện các bài toán mô hình hóa, mô phỏng trên máy tính.  Có tính mở, các hàm và các toolbox không ngừng được bổ sung theo sự phát triển của khoa học bởi chính The Mathworks Ins và cả người sử dụng trên toàn thế giới  Có công cụ trợ giúp phong phú trực tuyến, trên mạng hay các tài liệu dạng pdf.
  5. 5. ©Copyright 2007 MATLAB 5 Sức mạnh của MATLAB  Môi trường phát triển: gồm các công cụ và tiện nghi giúp viết chương trình, sử dụng các hàm Matlab và các file  Thư viện các hàm toán học của Matlab: Các hàm sơ cấp: tổng, sin, tính số phức… các hàm phức tạp: Bessel, nghịch đảo ma trận, tính trị riêng, biến đổi Fourier nhanh, wavelet…  Ngôn ngữ Matlab: Các lệnh cao cấp xử lý ma trận, lệnh rẻ nhánh, vòng lặp, xuất nhập, cấu trúc dữ liệu, lập trình hướng đối tượng…  Xử lý đồ họa: Hiển thị dữ liệu dạng đồ họa 2D, 3D, hoạt hình, xử lý ảnh và cả GUI
  6. 6. ©Copyright 2007 MATLAB 6 Sức mạnh của MATLAB (tt)  Thư viện API của Matlab: Cho phép liên kết các chương trình C và Fortran… Các ngôn ngữ khác có thể gọi các hàm dll được tạo bởi Matlab.  Các hộp công cụ (Toolbox): Tập hợp các hàm Matlab được viết sẵn để giải quyết các vấn đề thuộc các chuyên ngành khác nhau. Các toolbox khiến cho Matlab có thể ứng dụng vào nhiều lĩnh vực kỹ thuật khác nhau: Điện tử, Điều khiển tự động, Kỹ thuật điện, Viễn thông, Cơ khí, Động lực, Dầu khí, Địa chất, hóa học,…
  7. 7. ©Copyright 2007 MATLAB 7 Các khái niệm cơ bản Khi chạy chương trình MATLAB, thì cửa sổ này sẽ xuất hiện Cửa sổ lệnh Cửa sổ không gian làm việc Cửa sổ lịch sử lệnh
  8. 8. ©Copyright 2007 MATLAB 8 Các khái niệm cơ bản (tt)  Hoạt động trong MATLAB  Command window (cửa sổ lệnh) − Dấu “>>” dùng để chạy lệnh, viết chương trình, Chạy chương trình.  Command history window (cửa sổ lịch sử lệnh) − Liệt kê tất cả các lệnh đã sử dụng trước đó kèm theo thời gian làm việc.  Current Directory (cửa sổ thư mục hiện tại) − Cho biết thư mục hiện tại làm việc. Mặc định khi cài MATLAB701work (Version 7.01)  Workspace (cửa sổ không gian làm việc) − Cho biết các biến được sử dụng trong chương trình.
  9. 9. ©Copyright 2007 MATLAB 9 Các khái niệm cơ bản  Một số lệnh hệ thống Lệnh Ý nghĩa  clc xóa cửa sổ lệnh  clf xóa cửa sổ đồ họa  help xem phần trợ giúp một số lệnh  quit, exit Thoát Matlab  Ctrl+c Dừng chương trình  pause Ngừng tạm thời chương trình  edit Gọi chương trình soạn thảo type đọc nội dung file.m  input Nhập dữ liệu từ bàn phím  demo Gọi chương trình demo  echo on/off Tắt mở hiển thị các lệnh trong M-files
  10. 10. ©Copyright 2007 MATLAB 10 Các khái niệm cơ bản (tt)  CÁC TOÁN TỬ VÀ KÍ TỰ ĐẶC BIỆT • plus (+) cộng • uplus (+) Cộng unary • minus ( - ) Trừ • uminus (-) Trừ unary • mtimes(. *) Nhân ma trận • times (*) Nhân mảng • mpower (^) lũy thừa ma trận • power (. ^ ) lũy thừa mảng • mldivide ( ) Chia trái ma trận • Mrdivide( /) Chia phải ma trận • ldivide (. ) Chia trái mảng • mdivide (./ ) Chia phải ma trận • kron Sản phẩm cơ năng
  11. 11. ©Copyright 2007 MATLAB 11 Các khái niệm cơ bản (tt)  Toán tử quan hệ • eq (== ) Bằng • ne ( ~= ) Không bằng • lt (< ) Nhỏ hơn • gt (>) Lớn hơn • le (<= ) Nhỏ hơn hoặc bằng • ge (>= ) Lớn hơn hoặc bằng
  12. 12. ©Copyright 2007 MATLAB 12 Các khái niệm cơ bản (tt)  Toán tử logic • and (&) Logic và • or ( | ) Logic hoặc • not ( ~ ) Logic phủ định • xor Logic hoặc phủ định • any True nếu mọi phần tử của vector khác không. • all True nếu tất cả các phần tử khác không
  13. 13. ©Copyright 2007 MATLAB 13 Các khái niệm cơ bản (tt)  Các kí tự đặc biệt : Dấu hai chấm () Dấu ngoặc đơn [ ] Dấu ngoặc vuông { } Dấu ngoặc nhọn . Dấu thập phân . Truy nhập cấu cấu trúc trường .. Thư mục mẹ ... Dấu tiếp tục , Dấu phẩy ; Dấu chấm phẩy % Dấu chú thích
  14. 14. ©Copyright 2007 MATLAB 14 Các khái niệm cơ bản (tt) % Dấu chú thích ! Liên quan câu lệnh của hệ điều hành = Gán ‘ Nhảy transpose(.’) Chuyển vị ctranspose(‘ ) Chuyển vị số phức liên hợp horzcat [, ] Ghép chuỗi theo chiều ngang vertcat[; ] Ghép chuỗi theo chiều đứng subsasgn Gán subscripted bsref Tham chiếu subscripted subsindex Chỉ số subscripted
  15. 15. ©Copyright 2007 MATLAB 15 Các khái niệm cơ bản (tt)  BIẾN  Quy định về tên biến: − Giống các ngôn ngữ khác, Matlab có những quy định về tên biến phải là một từ, không chứa dấu cách, và phải tuân thủ theo các quy tắc sau:  Có thể chứa nhiều nhất 31 kí tự, còn các kí tự sau kí tự 31 sẽ bị lờ đi. Ví du: Thoi_gian_dong_cua_vuaximang100, …  Tên biến bắt đầu phải là chữ cái, tiếp theo có thể là chữ số, dấu gạch dưới. Thí dụ: Do_bien_thien, Heso, heso, Donhot, donhot…  Kí tự chấm “.” không được dùng vì nó có ý nghĩa đặc biệt
  16. 16. ©Copyright 2007 MATLAB 16 BIẾN (tt)  Một số biến được đĩnh nghĩa trước: − 1/0 Warning: Divide by zero. (Type "warning off MATLAB:divideByZero" to suppress this warning.) ans = Inf − 0/0 Warning: Divide by zero. (Type "warning off MATLAB:divideByZero" to suppress this warning.) ans = NaN − Eps ans = 2.2204e-016
  17. 17. ©Copyright 2007 MATLAB 17 Một số biến được định nghĩa trước (tt) Ý
  18. 18. ©Copyright 2007 MATLAB 18  Độ lớn của biến − Xác định độ lớn hay chiều dài của biến vector cũng như ma trận thông qua một số hàm sau đây:  Size(A) Trả về 1 vector chứa kích thước A, gồm số hàng và số cột của A.  Length(A) Trả về chiều dài của A, giá trị lớn nhất của hàng và cột.  Ngoài ra còn có các hàm: Size(A,p); [m,n] = size(A)
  19. 19. ©Copyright 2007 MATLAB 19 BIẾN (tt)  Thí dụ: >> A = [1 2 3; 4 5 6] A = 1 2 3 4 5 6 >> [m,n] = size(A) m = 2 n = 3 >> length(A) ans = 3 >>size(A,1) ans = 2
  20. 20. ©Copyright 2007 MATLAB 20 BIẾN (tt)  BIẾN MÔI TRƯỜNG (Environmental Variable) Thí dụ: >> a = 1 a = 1 >> b = ‘MATLAB’ b = Matlab Ta nói, a, b là các biến môi trường.
  21. 21. ©Copyright 2007 MATLAB 21 BIẾN (tt)  Khi làm việc trong MATLAB ở trong cửa sổ lệnh cũng như các giá trị đã được tạo ra. Những lệnh và biến này được thường trú trong môi trường làm việc của MATLAB (Workspace) và có thể được nạp trở lại khi muốn.  Đời sống của những biến chấm dứt khi ta thoát khỏi chương trình MATLAB.  Như Thí dụ trên, a được hiểu la một biến số, b là một chuỗi.  Khi định nghĩa biến môi trường, nếu gán giá trị cho nó thì kiểu biến sẽ phụ thuộc vào kiểu giá trị đã gán cho nó.
  22. 22. ©Copyright 2007 MATLAB 22 BIẾN (tt)  BIẾN CỤC BỘ (Local Variable)  Biến này chỉ tồn tại trong một hàm MATLAB và không hiện hữu trong cửa sổ lệnh. Thí dụ: function[mean,stdev] = stat(x); n = length(x); mean = sum(x)/n; stdev = sqrt(mean);  Trong trường hợp này n là biến cục bộ và chỉ được truy xuất trong một hàm.
  23. 23. ©Copyright 2007 MATLAB 23 BIẾN (tt)  BIẾN TOÀN CỤC (Global Variable)  Được định nghĩa bằng từ khóa global. Việc xóa biến toàn cục dùng lệnh clear global  Isglobal(ten_bien): trả về 1 (ten_bien là biến toàn cục), 0 (ten_bien không phải là biến toàn cục) Thí dụ: Global x y z x, y, z là các biến toàn cục.
  24. 24. ©Copyright 2007 MATLAB 24 BIẾN (tt)  Thường mỗi hàm trong MATLAB được viết dưới dạng M File, có riêng những biến cục bộ cho từng hàm và được lưu trữ trong một vùng biến đặc biệt, việc gọi hàm trong một hàm đều có thể truy xuất biến này.  Nên dùng KÍ TỰ HOA để đặt tên biến toàn cục để tránh trùng tên với các biến trong Workspace.
  25. 25. ©Copyright 2007 MATLAB 25 BIẾN (tt) BIẾN SYMBOLIC  Symbolic processing là thuật ngữ dùng mô tả cách thức máy tính thực hiện tính các biểu thức toán học (Thí dụ, rút gọn một đa thức, đặt thừa số chung, tính giá trị một biểu thức đại số, giải phương trình đại số, giải phương trình vi phân, …)  Khởi tạo biến symbolic: x = sym(‘x’): Tạo biến symbolic có tên là x. x = sym(‘x’,’real’): Tạo biến symbolic có tên x và là biến không bị ràng buộc phải là biến thực. k = sym(‘p’,’positive’): Tạo biến symbolic k là biến thực, dương.  Khởi tạo hằng symbolic: Nhằm tránh mắc sai lầm khi làm tròn.
  26. 26. ©Copyright 2007 MATLAB 26 BIẾN (tt) Khởi tạo hằng symbolic Thí dụ: >> hai_phan_ba = sym(‘2/3’); >> pi = sym(‘pi’); >> hai_phan_ba = hai_phan_ba = 2/3 % Không hiển thị giá trị xấp xỉ >> Pi Pi = pi % không hiển thị giá trị xấp xỉ. - Liệt kê các biên symbolic hiện hành, sử dụng hàm <syms>
  27. 27. ©Copyright 2007 MATLAB 27 BIẾN (tt) - Symbolic  Liệt kê các biến Symbolic >> syms x y; >> p = 2*x + 3*y; % Tạo biến symbolic p thông qua biểu thức symbolic >> u = sqrt(x^2 + y^2); % Tạo biến symbolic u thông qua biêu thức symbolic >> d = subs(u, {x,y},{2,3}) % Tính giá trị biểu thức u khi x = 2, y = 3. d = 13 >> v = subs(u,{x,y},{3,4}) % Tính giá trị biểu thức khi x = 3; y = 4; v = 5 >> syms ‘r’ ‘s’ ‘x’ ‘y’
  28. 28. ©Copyright 2007 MATLAB 28 BIẾN (tt) - Symbolic  Khởi tạo ma trận symbolic bằng biến symbolic. Thí dụ: >> n = 3; >> syms x; >> A = x.^ [[0:n]’.* [0:n]]; % Dùng phép biến đổi lũy thừa mảng A = [1, 1, 1, 1] [1, x, x^2, x^3] [1, x^2, x^4, x^6] [1, x^3, x^6, x^9]
  29. 29. ©Copyright 2007 MATLAB 29 BIẾN (tt) - Symbolic  Tìm biến symbolic trong một hàm Thí dụ: >> syms b x y z; >> findsym(5*b + 2*z) % Hàm này tìm biến symbolic trong một hàm ans = b, z
  30. 30. ©Copyright 2007 MATLAB 30 BIẾN (tt)  LƯU và NẠP Biến  Biến sẽ bị xóa sạch khi: − Dùng lệnh: clear all − Thoát chương trình MATLAB  Lưu biến: − Để sử dụng lại cho phiên làm việc sau; dùng lệnh <save> (lưu tất cả các biến do Workspace đang quản lý(tên, kích thước, giá trị) vào một tập tin nhị phân (binary file) có tên matlab.mat
  31. 31. ©Copyright 2007 MATLAB 31 BIẾN (tt)  Nạp biến: − Dùng lệnh <load> Nạp tất cả các biến đã lưu vào Workspace để dùng lại  Nếu không muốn dùng tập tin mặc định matlab.mat, ta sử dụng lệnh <Save filename> để lưu tất cả biến vào tập tin có tên filename.mat và muốn nạp lại biến khi dùng lệnh <load filename>  Lưu một vài biến trong cửa sổ workspace − Lệnh <Save filename var1 var2 …>  Nói chung cách đơn giản nhất là: Từ cửa sổ Menu File ở cửa sổ lệnh chọn <Sace Workspace As> Đặt tên tập tin (có đuôi mở rộng là *.mat)
  32. 32. ©Copyright 2007 MATLAB 32 Câu chú thích  Tất cả các văn bản đằng sau kí hiệu phần trăm (%) đều là câu giải thích.  Thí dụ: > heso_a = 10 % Hệ số a ptb2 heso_a = 10 >> heso_b = 20 % Hệ số b ptb2 heso_b = 20
  33. 33. ©Copyright 2007 MATLAB 33 Số phức  Một trong những điểm mạnh nhất của MATLAB là làm việc với số phức.  Các hàm đặc biệt của số phức:  real(x) Phần thực của X  imag(x) Phần ảo của X  conj(x) Liên hợp phức của X  abs(x) Độ lớn, trị tuyệt đối của X  angle(x) Góc pha của số phức  complex(x) Tạo số phức từ phần thực và ảo
  34. 34. ©Copyright 2007 MATLAB 34 Số phức (tt)  Thí dụ: >> a=1+3i a = 1.0000 + 3.0000i >> b=2-4i b = 2.0000 - 4.0000i >> a+b ans = 3.0000 - 1.0000i >> abs(a) ans = 3.1623 % độ lớn của a >> real(b) % phần thực của số phức b ans = 2 >> imag(b) %phần ảo của số phức b ans = -4 >> complex(2,2) ans = 2.0000 + 2.0000i
  35. 35. ©Copyright 2007 MATLAB 35 Một số hàm toán học thông thường Tên hàm Mô tả, kết quả trả về Any(x) 1 hoặc vecto hàng đơn vị nếu bất kỳ phần tử nào của vecto hoặc ma trận x khác 0. All(x) là 1 hoặc vecto hàng đơn vị nếu tất cả các phần tử nào của vecto hoặc ma trận x khác 0. Isnan(x) Là một tại những vị trí NaN (Not a Number, Thí dụ 0/0) trong x Isinf(x) Là 1 tại những vị trí Inf (Infinitive, 1/0) trong x. Finite(x) Là 1 tại những vị trí có giá trị hữu hạn trong x. Isstr(x) Là 1 nếu x là một string (chuỗi) Issym(x) Là 1 nếu x là một biến sym Abs(x) Trị truyệt đối hoặc biên độ số phức Acos(x) Hàm cosin ngược Acosh(x) Hyperbolic cosin ngược Ceil(x) Làm tròn về phía trên Atan(x) Hàm số tang ngược Asin(x) Hàm số sin ngược
  36. 36. ©Copyright 2007 MATLAB 36 Một số hàm toán học thông thường Tên hàm Mô tả, kết quả trả về cos(x) Hàm cosin cosh(x) Hyperbol cosin exp(x) Hàm mũ ex fix(x) Xấp xỉ không floor(x) Làm tròn về phía zero log(x) Hàm logarit tự nhiên log10(x) Hàm logarit thập phân round(x) Làm tròn về số nguyên gần nhất sign(x) Hàm dấu, Thí dụ: sign(1.2) = 1,sign(-23.4) = -1, sign(0) = 0 sin(x) Hàm sin sinh(x) Hàm Hyperbol sin sqrt(x) Căn khai căn bậc hai gdc(x,y) Bội số chung lớn nhất của hai số nguyên x và y. lcm(x,y) Bội số chung nhỏ nhất của hai số nguyên x và y. x^y Hàm mũ
  37. 37. ©Copyright 2007 MATLAB 37 Một số hàm toán cơ bản Tên hàm Mô tả, kết quả trả về rem(x,y) Số dư phép chia x/y sum(v) Tổng các phần tử vector prod(v) Tích các phần tử vector min(v) Phần tử vector bé nhất max(v) Phần tử vector lớn nhất mean(v) Giá trị trung bình cộng sign(x) Hàm dấu (= 1 nếu x>0; = -1 nếu x<0; = 0 nếu x=0)
  38. 38. ©Copyright 2007 MATLAB 38 Một số hàm cơ bản (tt)  Thí dụ: >> x=4; >> sqrt(x) ans = 2 >> exp(x) ans = 54.5982 >> sign(x) ans = 1 >> rem(x,3) ans = 1 >> v=[1 2 3]; >> min_v=min(x) min_v = 1 >> mean(x) ans = 2 >> sum(x) ans = 6
  39. 39. ©Copyright 2007 MATLAB 39 Các Hàm liên quan đến ĐA THỨC  Đa thức được biểu diễn bằng vecto bậc một có bậc giảm dần.  Cho hai đa thức f, g lần lượt được biểu diễn bởi a và b. Ta sẽ có các hàm sau: Conv(a,b) Nhân hai đa thức Deconv(a,b) Chia hai đa thức a + b Tổng hai đa thức a – b Hiệu hai đa thức roots(a) nghiệm của đa thức f được biểu diễn bởi vecto a. poly(r) Trả về các hệ số của đa thức có nghiệm là vecto r.  Lưu ý: Khi cộng và trừ các đa thức phải có cùng kích thước.
  40. 40. ©Copyright 2007 MATLAB 40 Hàm ĐA THỨC (tt)  Thí dụ: Giải phương trình: x4 + 10x3 + 0x - 1 = 0 Giải: Ta biểu diễn đa thức x4 + 10x3 + 0x - 1 bằng một vectơ hàng với các phần tử là các hệ số của đa thức sắp xếp theo thứ tự bậc giảm dần. >> a = [1 10 -2 0 -1]; Nghiệm của đa thức có thể được tính bằng hàm: roots(a) >> R = roots(a) R = -10.1971 0.5291 -0.1660 + 0.3972i -0.1660-0.3972i
  41. 41. ©Copyright 2007 MATLAB 41 Hàm ĐA THỨC (tt)  Từ các nghiệm của đa thức có thể xây dựng lại đa thức bằng hàm: poly(a);  Thí dụ: >>a = poly(R) a = 1.0000 10.0000 -2.0000 0.0000 -1.0000 >>a = [1 2 3 4]; % x3 +2x2 +3x+4 >>b = [5 6 7 8]; % 5x3 +6x2 +7x+8 >>Tich = conv(a,b) Tich = 5 16 34 60 61 52 32
  42. 42. ©Copyright 2007 MATLAB 42 Hàm ĐA THỨC (tt) >>Thuong = deconv(a,b) Thuong = 0.2000 >>Tong = a + b Tong = 6 8 10 12 >>Hieu = a – b Hieu = -4 -4 -4 -4
  43. 43. ©Copyright 2007 MATLAB 43 CÁC LỆNH ĐIỀU KIỆN VÀ LẶP  Vòng lặp FOR:  Cấu trúc: for i = n:m %n = phần tử đầu, m = phần tử cuối <Lệnh> end  Thí dụ vòng lặp FOR: Tính giai thừa của 100?
  44. 44. ©Copyright 2007 MATLAB 44 CÁC LỆNH ĐIỀU KIỆN VÀ LẶP  Vòng lặp WHILE: lặp vòng khi biểu thức logic là true.  Cấu trúc: while <biểu thức logic> <Các lệnh> end  Thí dụ 1: n=1; while prod(1:n) < 1e100 % prod tính tích các phần n = n+1;% tử cột của vectơ hay End % ma trận
  45. 45. ©Copyright 2007 MATLAB 45 CÁC LỆNH ĐIỀU KIỆN VÀ LẶP  Lệnh if else elseif  Cấu trúc:  Nếu <BT logic> là true thì <Các lệnh> được thi hành, nếu không thì thực hiện các lệnh sau end. if <BT logic> <lệnh 1> else <lệnh 2> end if <BT logic 1> <lệnh 1> elseif <BT logic 2> <Lệnh 2> … end if <BT logic> <Các lệnh> end
  46. 46. ©Copyright 2007 MATLAB 46 CÁC LỆNH ĐIỀU KIỆN VÀ LẶP  Thí dụ 1: if rem(a,2)==0 disp('la mot so chan') b=a/2; End if n<0 disp('la so duong') elseif n==0 disp('la so 0') else disp('la so am') end
  47. 47. ©Copyright 2007 MATLAB 47 CÁC LỆNH ĐIỀU KIỆN VÀ LẶP  Thí dụ 2: Hàm ngay_trong_thang.m function y = ngay_trong_thang(th,nam) if (th==4)|(th==6)|(th==9)|(th==11) y = 30 elseif (th==2) if (rem(nam,4)~=0) y=28 else y=29 end else y=31 end
  48. 48. ©Copyright 2007 MATLAB 48 CÁC LỆNH ĐIỀU KIỆN VÀ LẶP  Lệnh switch case: chọn nhiều trường hợp  Cấu trúc: switch <Biểu thức (vô hướng hay chuỗi)> case <trị 1> <Các phát biểu % thực hiện nếu biểu thức là trị 1> case <trị 2> <Các phát biểu % thực hiện nếu biểu thức là trị 2> … otherwise <Các phát biểu % thực hiện nếu biểu thức không phù hợp mọi trường hợp> end
  49. 49. ©Copyright 2007 MATLAB 49 CÁC LỆNH ĐIỀU KIỆN VÀ LẶP  Thí dụ: switch input_num case -1 disp(‘negative one’); case 0 disp(‘zero’); case 1 disp(‘positive one’); otherwise disp(‘other value’); end
  50. 50. ©Copyright 2007 MATLAB 50 ĐỒ HỌA CĂN BẢN  Tổng quát về đồ họa trong MATLAB  MATLAB có các hàm đồ họa để vẽ các đặc tuyến bất kỳ trên mặt phẳng 2D, 3D, cho phép tạo ra đối tượng đồ họa điều khiển được.  MATLAB cho phép người lập trình sử dụng “bộ nhớ ảo”, khi đó có thể ghi các biến làm việc thành tập tin *.mat trên đĩa và có thể nạp bộ nhớ khi cần thiết. Nhờ vậy, MATLAB có thể giải được các bài toán lớn và phức tạp.  Ngoài ra, MATLAB còn phép quản lý tập tin dữ liệu trong chính môi trường MATLAB mà không cần đến môi trường windows.
  51. 51. ©Copyright 2007 MATLAB 51 ĐỒ HỌA CĂN BẢN (tt)  Màu sắc và kiểu đường vẽ Ký hiệu Màu Ký hiệu Kiểu nét y Yellow . Point m Magenta o Circle c Cyan x X-mark r Red + Plus g Green * Star b Blue - Solid line w White : Dotted line k Black -. Dash-dot line -- Dased line
  52. 52. ©Copyright 2007 MATLAB 52 ĐỒ HỌA CĂN BẢN (tt) Các kiểu data marker Ký hiệu trong plot Dấu chấm (dot .) . Dấu sao (asterisk *) * Dấu gạch chéo (cross x) x Vòng tròn (circle o) o (chữ o thường) Dấu cộng (plus sign + ) + Hình vuông (square ) s Diamond ( ) d Ngôi sao () p
  53. 53. ©Copyright 2007 MATLAB 53 ĐỒ HỌA CĂN BẢN (tt)  Đồ họa không gian 2 chiều trong MATLAB  Lệnh plot: Đồ thị tuyến tính X-Y, vẽ trong mặt phẳng hai chiều.  Lệnh fplot: được dùng để vẽ hàm số một cách “thông minh”, nó tự động phân tích hàm phải vẽ và chọn số điểm thích hợp cần phải thể hiện để phản ánh các đặc điểm của hàm. − Cú pháp: fplot(‘string’, [xmin,xmax]) − Dạng đầy đủ: fplot(‘string’, [xmin xmax ymin ymax]
  54. 54. ©Copyright 2007 MATLAB 54 ĐỒ HỌA CĂN BẢN – Plot() (tt) Thí dụ: >>x = linspace(0,2*pi,30); %Tạo mảng x gồm 30 phần tử có giá trị trong khoảng 0 – 2*π >>y = sin(x); >>plot(x,y) %vẽ đồ thị hàm y theo x >>xlabel(‘x [0-2*pi]); ylabel(‘y’); %đặt nhãn trục tọa độ x và y >>title(‘y = sin(x)’) % đặt tên đồ thị >>grid on % Tạo lưới cho đồ thị
  55. 55. ©Copyright 2007 MATLAB 55 ĐỒ HỌA CĂN BẢN – Plot() (tt)
  56. 56. ©Copyright 2007 MATLAB 56 ĐỒ HỌA CĂN BẢN – Plot() (tt)  Để vẽ hai đồ thị trên cùng một trục tọa độ >>z = cos(x); >>plot(x,y,’b-*’,x,z,’r’) % Vẽ y và z trên cùng đồ thị, y là đường -* màu xanh, z là đường -- màu đỏ >>legend(‘y = sin(x)’,’z=cos(x)’) % chú thích trên đồ thị
  57. 57. ©Copyright 2007 MATLAB 57 ĐỒ HỌA CĂN BẢN – Plot() (tt) >>legend(‘y = sin(x)’,’z=cos(x)’)
  58. 58. ©Copyright 2007 MATLAB 58 ĐỒ HỌA CĂN BẢN (tt)  Để vẽ nhiều hàm trên cùng một đồ thị ta có thể dùng lệnh “hold on” và “hold off” >> t=0:pi/20:2*pi; >> plot(t,sin(t),'-r*') >> hold on >> plot(sin(t-pi/2),'mo') >> plot(sin(t-pi),':bs') >> hold off
  59. 59. ©Copyright 2007 MATLAB 59 ĐỒ HỌA CĂN BẢN (tt)  Lệnh plot vẽ trong SỐ PHỨC  Nếu chỉ cố một đối số, hàm plot(y) sẽ vẽ các giá trị của vector y theo chỉ số 1,2,3, … Nếu y là số thực, hàm plot(y) trong trường hợp này sẽ vẽ phần ảo theo phần thực tương ứng, nghĩa là tương đương với plot(real(y),imag(y))
  60. 60. ©Copyright 2007 MATLAB 60 ĐỒ HỌA CĂN BẢN (tt)  Thí dụ: >> x = .1+.9i; >> u = [0:0.01:10]; >> plot(x.^u),xlabel('So thuc'),ylabel('Phan ao') >> title('Do thi voi doi so phuc tap trong ham SO PHUC')
  61. 61. ©Copyright 2007 MATLAB 61 ĐỒ HỌA CĂN BẢN (tt)  Thí dụ lệnh fplot trong số phức: >> f='cos(tan(x))-tan(sin(x))'; >> fplot(f,[1 2])
  62. 62. ©Copyright 2007 MATLAB 62 ĐỒ HỌA CĂN BẢN (tt)  Các lệnh vẽ trong các tọa độ đặc biệt Polar(t,r): vẽ đồ thị trong tọa độ cực Semilogx(x,y): Vẽ hàm y theo x với trục y vẽ theo thang log Semilogy(x,y): Vẽ hàm y theo x với trục x vẽ theo thang log Loglog(x,y) Vẽ hàm y theo x với thang log cho cả 2 trục tọa độ Plotyy(x,y,’function’): Vẽ đồ thị với 2 trục y theo kiểu vẽ được chọn trong function. Trong đó function nhận các giá trị plot, semilogy, semilogx… Plot3(x,y,z): vẽ đường trong không gian 3 chiều. Subplot(m,n,p): Chia cửa sổ figure ra nhiều ô, m ô theo chiều đứng, n ô theo chiều ngang, vẽ đồ thị trong ô thứ p.
  63. 63. ©Copyright 2007 MATLAB 63 ĐỒ HỌA CĂN BẢN (tt)  Thí dụ:  Lệnh polar(t,r): Vẽ đồ thị góc t (radian) trong tọa độ cực theo bán kính r.  Lệnh polar(t,r,’linestype’): Vẽ góc t với đường vẽ và nét xác định ‘linestype’. >>t = 0:.1:2*pi; >>polar(t,sin(2*t)) >>polar(t,sin(2*t),'m-')
  64. 64. ©Copyright 2007 MATLAB 64 ĐỒ HỌA CĂN BẢN (tt)  Thí dụ, vẽ đường xoắn ốc Archimeder r = 2Ѳ với Ѳ thuộc [0, 4pi] >> r = 2*t; >> polar(t,r),title('Duong xoan oc Archimede r = 2t');
  65. 65. ©Copyright 2007 MATLAB 65 ĐỒ HỌA CĂN BẢN (tt)  Thí dụ lệnh loglog(x,y) >> x = logspace(-1,2); >> loglog(x,exp(x))
  66. 66. ©Copyright 2007 MATLAB 66 ĐỒ HỌA CĂN BẢN (tt)  Thí dụ lệnh semilogx(x,y) >> x = logspace(-2,3); >> y = x.^12 + 10; >> semilogx(x,y) %tương tự cho lệnh semilogy()
  67. 67. ©Copyright 2007 MATLAB 67 ĐỒ HỌA CĂN BẢN (tt) Thí dụ : >> t=0:pi/20:6*pi; >> x=sin(t); >> y=sin(t-pi/2); >> z=t; >> subplot(121) >> plotyy(t,x,t,y,'plot') >> grid on >> subplot(122) >> plot3(x,y,z) >> grid on
  68. 68. ©Copyright 2007 MATLAB 68 ĐỒ HỌA CĂN BẢN (tt)  Các lệnh vẽ liên quan đến SỐ PHỨC quiver(x,y): vẽ các vector xuất phát từ các vị trí khác nhau. fearther(x,y): Vẽ các vector xuất phát từ trục x. compass(x,y): Vẽ các vector từ một điểm gốc trong hệ tọa độ cực. rose(x)
  69. 69. ©Copyright 2007 MATLAB 69 Thí dụ-Lệnh quiver  Giả sử ta có một trường vector như sau trong không gian R2 :  P(x,y) = , Q(x,y) = , thử vẽ hình ảnh của trường trong phạm vi x thuộc [1,5] và y thuộc [1,5].  Trước hết ta viết một sript file (lưu file này với tên Quiver.m) như sau: x y
  70. 70. ©Copyright 2007 MATLAB 70 Thí dụ-Lệnh quiver (tt)  Sau đó, ta chạy file sript này(Gõ tên file này trong cửa sổ lệnh->Enter), ta được hình ảnh sau:
  71. 71. ©Copyright 2007 MATLAB 71 ĐỒ HỌA CĂN BẢN (tt)  Các lệnh thao tác và điều khiển figure Hiển thị cửa sổ đồ họa hiện hành figure(gef) Tạo ra cửa sổ đồ họa figure(‘propertyname’,’propertyvalue’,…) hold Chuyển từ trạng thái hold là on sang off và ngược lại hold on Giữ lại tất cả màn hình đã vẽ hold off Xóa các màn hình đã vẽ chỉ thể hiện màn hình hiện hành mới (Chế độ mặc định) axis Cân chỉnh trục tọa độ và hình dạng của nó grid Grid On/ grid off/ grid: Tạo/ tắt lưới cho đồ thị shg Hiển thị đồ thị trên màn hình clg Xóa đồ thị trên màn hình zoom Co vào hoặc dãn ra của đồ thị
  72. 72. ©Copyright 2007 MATLAB 72 ĐỒ HỌA CĂN BẢN (tt)  CÁC LỆNH VĂN BẢN TRÊN MÀN HÌNH ĐỒ HỌA title(‘text’,’property 1’,’property 2’,…): Tiêu đề cho đồ thị xlabel(‘text’,’property 1’,’property 2’,…): Nhãn trục hoành độ ylabel(‘text’,’property 1’,’property 2’,…): Nhãn trục tung độ text(x,y,z,‘chuỗi ‘): Văn bản ở bất kỳ vị trí nào trên đồ thị. X, Y là tọa độ tâm bên trái của đồ thị. legend(x,y): Chú thích của đường trên đồ thị gtext(‘C’): Văn bản ở vị trí con trỏ.
  73. 73. ©Copyright 2007 MATLAB 73 ĐỒ HỌA CĂN BẢN (tt) ĐỌC DỮ LIỆU TỪ MÀN HÌNH ĐỒ HỌA  Lấy tọa độ diểm trên đồ thị, khi một đồ thị được vẽ xong, nếu muốn lấy tọa độ của một số điểm trên đường này, ta sẽ dùng lệnh [x,y] = ginput(n); n là số điểm cần lấy tọa độ.  Khi đồ thị hiện ra, ta nhấn phím trái chuột vào các vị trí mong muốn lấy tọa độ trên đồ thị, các hoành độ sẽ được chứa trong vector và tung độ trong vector y.  Nếu quan hệ giữa hai đại lượng x, y cần được vẽ bằng các điểm rời rạc, thay vì là đường nối các điểm (x,y) như vẽ hàm, hàm plot sẽ dùng các điểm được đánh dấu (data makers)
  74. 74. ©Copyright 2007 MATLAB 74 ĐỒ HỌA CĂN BẢN (tt)  Thí dụ, vẽ đồ thị từ số liệu rời rạc bằng cách sử dụng điểm đánh dấu. >> x=[5:18]; >> y=[1,2,3,5,4,5,5,7,8,6,9,11,14,20]; >> plot(x,y,'r s') R: màu đỏ, s: hình vuông
  75. 75. ©Copyright 2007 MATLAB 75 ĐỒ HỌA CĂN BẢN (tt)  Thí dụ: Nếu muốn nối liền các điểm được đánh dấu này bằng các đoạn thẳng, chúng ta có thể vẽ 2 lần. >>plot(x,y,'r o',x,y)
  76. 76. ©Copyright 2007 MATLAB 76 ĐỒ HỌA CĂN BẢN (tt)  Ngoài ra trong lệnh plot ta có thể đưa các thông số ‘lineWidth’ để định độ rộng của đường vẽ, thông số ‘MarkerSize’ để định độ lớn (chiều cao) của các điểm được đánh dấu và thông số “Color” để định màu của đồ thị.  Thí dụ: >>plot(x,y,’o-’,’LineWidth’,3,’MarkerSize’,8,’Color’,’red’)
  77. 77. ©Copyright 2007 MATLAB 77 ĐỒ HỌA CĂN BẢN (tt) - Điền tiêu đề cho đồ thị, ta sử dụng lệnh: title(‘text’). - Tạo lưới cho đồ thị: grid on  Thí dụ: <<title(‘do thi roi rac dung data marker o’)
  78. 78. ©Copyright 2007 MATLAB 78 ĐỒ HỌA CĂN BẢN (tt)  Kiến tạo hệ trục tọa độ Lệnh Mô tả Axis([xmin xmax ymin ymax]) Thiết lập các giá trị min, max của hệ trục dùng các giá trị được đưa ra trong vecto hàng. V= axis V là vector cột có chứa thang chia cho đồ thị hiện tại: [xmin xmax ymin ymax] Axis auto trả lại giá trị mặc định thang chia Axis(‘auto’) Xmin=min(x), xmax = max(x)… Axismanual Giới hạn thang chia nh thang chia hiện tại Axis xy Sử dụng (mặc định) hệ tọa độ decac trong đó gốc tọa độ ở góc thấp nhất bên trái, trục ngang tăng từ trái qua phải, trục đứng tăng từ dưới lên.
  79. 79. ©Copyright 2007 MATLAB 79 ĐỒ HỌA CĂN BẢN (tt) Lệnh Mô tả Axis ij Sử dụng hệ tọa độ ma trận, trong đó góc tọa độ ở đỉnh góc trái, trục đứng tăng từ đỉnh xuống, trục ngang từ trái qua phải. Axissquare Thiết lập đồ thị hiện tại là hình vuông, so với mặc định là hình chữ nhật. Axisequal Thiết lập thang chia giống nhau cho cả hai hệ trục Axis tightequal Tương tự như axisequal nhưng hộp đồ thị vừa đủ đối với dữ liệu Axis normal Tắt đi chế độ axis, equal, tight và vis3d Axis off Tắt bỏ chế độ nền trục, nhãn, lưới, và hộp, dấu. Thoát khỏi chế độ lệnh title và bất cứ lệnh label nào và thay đổi bởi lệnh text và gtext. Axis on Ngược lại với axis off nếu chúng có thể
  80. 80. ©Copyright 2007 MATLAB 80 ĐỒ HỌA CƠ BẢN (tt) Thí dụ: >>x=linspace(0,2*pi,30); >>y=sin(x); >>z=cos(x); >>plot(x,y,x,z) >>box off % Sau khi sử dụng lệnh >>axis off >>axis ij >>axis square equal >>axis xy normal
  81. 81. ©Copyright 2007 MATLAB 81 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU  Các lệnh vẽ trong tọa độ Đềcac ba chiều plot3: Vẽ đường thẳng và điểm trong không gian 3 chiều Thí dụ: Vẽ đường cong tham số: x =e-0.05t sint y =e-0.05t cost z = t ∈[0,10π]
  82. 82. ©Copyright 2007 MATLAB 82 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  Thực hiện >> t = [0:pi/50:10*pi]; >> x = exp(-0.05*t).*sin(t); >> y = exp(-0.05*t).*cos(t); >> z = t; >> plot3(x,y,z),xlabel(‘x’),ylabel(‘y’),zlabel(‘z’) >> zlabel(‘z’),grid;
  83. 83. ©Copyright 2007 MATLAB 83 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  CÁC LỆNH VẼ BIÊN DẠNG (contour) contour: Vẽ các đường đồng mức clabel: Nhãn
  84. 84. ©Copyright 2007 MATLAB 84 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  CÁC LỆNH TẠO LƯỚI (grid) Meshgrid(x,y) Meshgrid(x,y,z) Cylinder(r,u) [X,Y,Z] = CYLINDER(R,N) forms the unit cylinder based on the generator curve in the vector R. Vector R contains the radius at equally spaced points along the unit height of the cylinder. The cylinder has N points around the circumference. SURF(X,Y,Z) displays the cylinder. [X,Y,Z] = CYLINDER(R), and [X,Y,Z] = CYLINDER default to N = 20 and R = [1 1]. Sphere(n) SPHERE Generate sphere. [X,Y,Z] = SPHERE(N) generates three (N+1)-by-(N+1) matrices so that SURF(X,Y,Z) produces a unit sphere. [X,Y,Z] = SPHERE uses N = 20.
  85. 85. ©Copyright 2007 MATLAB 85 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  Tạo một lưới các điểm trong mặt phẳng xy  Cú pháp: [X,Y] = meshgrid(x,y) Trong đó: x = [xmin,∆x,xmax] y = [ymin,∆y,ymax]  Chức năng: − Hàm meshgrid sẽ phát sinh các tọa độ của một lưới chữ nhật có m.n điểm với một góc (xmin,ymin) còn góc kia là (xmax,ymax). − Ma trận X có kích thước m.n gồm n cột giống nhau là vector x’ và ma trận Y cũng có kích thước m.n hàng giống nhau là vector y. − Mỗi ô lưới sẽ có kích thước ∆x, và ∆y.
  86. 86. ©Copyright 2007 MATLAB 86 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt) Các lệnh vẽ tương tự meshc(X,Y,Z) meshz(X,Y,Z) MESHZ(...) or MESHC(…) is the same as MESH(...) except that a "curtain" or reference plane is drawn beneath. surf(X,Y,Z) SURF('v6',...) creates a surface object instead of a surface plot object for compatibility with MATLAB and earlier. surfc(X,Y,Z) vẽ mặt giống như thực hiện mesh hay meshc nhưng mặt được tô bóng (shaded surface). surfnorm [Nx,Ny,Nz] = SURFNORM(Z) returns the surface normal components for the surface Z.
  87. 87. ©Copyright 2007 MATLAB 87 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  CÁC LỆNH VẼ MẶT LƯỚI TRONG 3D  Mesh − MESH returns a handle to a surface plot object.  Meshz: Vẽ bề mặt với các đường thẳng đứng viền quanh đồ thị.  Waterfall: Vẽ bề mặt với các đường lưới theo một hướng như thác đổ.  WATERFALL(...) is the same as MESH(...) except that the column lines of the mesh are not drawn - thus producing a "waterfall" plot. For column-oriented data analysis, use WATERFALL(Z') or WATERFALL(X',Y',Z').
  88. 88. ©Copyright 2007 MATLAB 88 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  Thí dụ: Vẽ mặt  Thực hiện: >> x = [-2:.1:2]; >> y = [-2:.1:2]; >> [X,Y] = meshgrid(x,y); % Tạo lưới các điểm trong mặt phẳng xy >> Z = X.* exp(-X.^2-Y.^2); >> mesh(X,Y,Z) % Vẽ các đường đồng mức dưới mặt. >> xlabel(‘Truc x’), ylabel(‘Truc y’),zlabel(‘Truc z’) 22 . yx exz −− =
  89. 89. ©Copyright 2007 MATLAB 89 Thí dụ lệnh MESHZ >> meshz(X,Y,Z)
  90. 90. ©Copyright 2007 MATLAB 90 Thí dụ lệnh MESHC >> Meshc(X,Y,Z)
  91. 91. ©Copyright 2007 MATLAB 91 Thí dụ lệnh WATERFALL >> waterfall(X,Y,Z)
  92. 92. ©Copyright 2007 MATLAB 92 Thí dụ lệnh SURF >> surf(X,Y,Z)
  93. 93. ©Copyright 2007 MATLAB 93 Thí dụ lệnh SURFC >> surfc(X,Y,Z)
  94. 94. ©Copyright 2007 MATLAB 94 Thí dụ lệnh SURFNORM >> surfnorm(X,Y,Z)
  95. 95. ©Copyright 2007 MATLAB 95 Thí dụ lệnh CONTOUR >> contour(X,Y,Z)
  96. 96. ©Copyright 2007 MATLAB 96 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  CÁC LỆNH QUAN SÁT  View  Rot90  Slice  Colormap  colorbar
  97. 97. ©Copyright 2007 MATLAB 97 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  Lệnh view view([α,β]) Trong đó: α: Là góc phương vị tính bằng độ ngược chiều kim đồng hồ từ phía trên của trục ngang (mặc định α = -37.5o ) β: Góc nhìn tính bằng độ xuống mặt phẳng xy (mặc định β = 30o ) Thí dụ: view([0,90]) : Vẽ 2D là một trường hợp đặc biệt của phép vẽ 3D. - Hiển thị đồ thị 3D đã tạo ra dưới dạng 2D theo góc phương vị và góc nhìn.
  98. 98. ©Copyright 2007 MATLAB 98 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt) >> view([0,90]) và >> view([30,30]) % Hiển thị hình đã vẽ trong lệnh surfc(X,Y,Z)
  99. 99. ©Copyright 2007 MATLAB 99 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  Lệnh rot90 ROT90 Rotate matrix 90 degrees. ROT90(A) is the 90 degree counterclockwise rotation of matrix A.. ROT90(A,K) is the K*90 degree rotation of A, K = +-1,+- 2,... Example: A = [1 2 3 B = rot90(A) = [ 3 6 4 5 6 ] 2 5 1 4 ]
  100. 100. ©Copyright 2007 MATLAB 100 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt) >>[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-:.16:2); v = x .* exp(-x.^2 - y.^2 - z.^2); slice(x,y,z,v,[-1.2 .8 2],2,[-2 -.2])
  101. 101. ©Copyright 2007 MATLAB 101 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt) Thí dụ về lệnh Colormap và colorbar >> [x,y] = meshgrid(-2:.2:2); >> z = x.^(-x.^2-y.^2); >> [C,h] = contour(x,y,z); >> Clabel(C,h); %Nhãn biểu đồ contour >> Surf(peaks(30)) >> Colormap cool; %Chọn biểu đồ màu >> Colorbar % Hiển thị thanh biểu đồ màu
  102. 102. ©Copyright 2007 MATLAB 102 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)
  103. 103. ©Copyright 2007 MATLAB 103 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  Các lệnh đồ họa khác trong đồ họa 3D 1. fill3: Tô đa giác 3 mặt trong không gian 3D. Cú pháp: fill3(x,y,z,c): Tô đa giác 3D được định nghĩa bởi 3 vector x, y, z với màu tô được xác định bởi c. fill3(x1,y1,z1,c1,x2,y2,z2,c2,…): Tô đa giác 3D xác định nhiều vùng tô. 2. comet3(z) 3. comet3(x,y,z) 4. comet3(x,y,z,p) 5. comet3 Các lệnh vẽ đườn viền 3 chiều trong 3D 6. contour3(z): Vẽ đường viền 3D cho tới mức z 7. contour3(z,n): Vẽ đường n viền 3D 8. contour3(x,y,z): Tương tự như trên, nhưng ma trận x,y để giới hạn trục x,y.
  104. 104. ©Copyright 2007 MATLAB 104 ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  Lưu ý:  MATLAB cho phép chuyển đồ thị qua word…  Cách làm: − Từ cửa sổ <Figure> <Edit> <Copy Figure> Sau đó trở lại cửa sổ mà ta muốn chèn và <Paste> nó vào một nơi ta mong muốn.
  105. 105. ©Copyright 2007 MATLAB 105 M-FILE, or SCRIPT  Việc nhập lệnh từ dấu nhắc (>>) thì nhanh và hiệu quả, nhưng khi thực hiện một lúc nhiều lệnh hoặc muốn thay đổi giá trị của một hoặc nhiều biến và lặp lại một số lệnh thì việc nhập lệnh ở dấu nhắc sẽ kém hiệu quả.  M-FILE tiện dụng cho việc giải bài toán lớn, MATLAB cung cấp thủ tục để tạo hàm riêng cho người sử dụng với hình thức một text file.  Giải pháp: − Tập hợp các lệnh vào một file với phần mở rộng là (*.m)  Cụ thể: − Để soạn thảo một M-File thì <New> <M-FILE> − Để hiển thị những lệnh trong M-File khi chúng được thực thi thì sử dụng lệnh echo on. − Hiệu chỉnh M-FILE: <Open>
  106. 106. ©Copyright 2007 MATLAB 106 M-FILE, or SCRIPT (tt) MỘT SỐ LÊNH QUẢN LÝ TẬP TIN  Cho phép liệt kê, xem, xóa, sửa, chuyển đổi thư mục … − d: Chuyển đổi thư mục − Chdir/cd − dir: liệt kê tất cả thư mục hiện hành (tương tự lệnh IS) − delete: Xóa tập tin M-FILE − type: Hiển thị tập tin M-FILE trong cửa sổ lệnh. − what: Hiển thị tất cả M-FILE trong thư mục hiện hành. − which: Hiển thị thư mục …
  107. 107. ©Copyright 2007 MATLAB 107 M-FILE, or SCRIPT (tt)  CẤU TRÚC MỘT CHƯƠNG TRÌNH 1. function[các biến đầu ra] = filename(các đối số) function filename(các đối số) function[các biến đầu ra] = filename 2. % là lời chú thích của chương trình 3. global ten_bien1 ten_bien2 … 4. Chương trình (các câu lệnh)
  108. 108. ©Copyright 2007 MATLAB 108 M-FILE, or SCRIPT (tt)  CẤU TRÚC MỘT CHƯƠNG TRÌNH Thí dụ: Giải phương trình bậc hai: ax2 + by + c = 0 a. Khi biết các hệ số b. Nhập 3 hệ số ở cửa sổ lệnh
  109. 109. ©Copyright 2007 MATLAB 109 M-FILE, or SCRIPT (tt) a. Chương trình có tên ptb2_a.m function x = ptb2(a,b,c) % Giải phương trình bậc hai khi biết hệ số p = [a b c]; roots(p); x0 = -b/(2*a); x = (x0 -10):.1:(x0+10); y = a*x.2 + b*x + 10; plot(x,y), title(‘Do thi bac hai’); Trong cửa sổ lệnh: >> x = ptb2(1,2,1) x = 0 -1 -1
  110. 110. ©Copyright 2007 MATLAB 110 M-FILE, or SCRIPT (tt) b. Chương trình có tên ptb2_b.m % chú thích a = input(‘Nhập a = ‘); b = input(‘Nhập b = ‘); c = input(‘Nhập c = ‘); p = [a b c ]; % Khởi tạo vecto hệ số x = roots(p); disp(‘Nghiệm của phương trình bậc 2:’) disp(x) x = (x0 -10):.1:(x0+10); y = a*x.^2 + b*x + 10; plot(x,y) title(‘Do thi bac hai’);
  111. 111. ©Copyright 2007 MATLAB 111 M-FILE, or SCRIPT (tt)  Giải PTB2 bằng M-FILE
  112. 112. ©Copyright 2007 MATLAB 112 M-FILE, or SCRIPT (tt) >> ptb2 Nhap a = 1 Nhap b = -2 Nhap c = 1 Nghiem cua phuong trinh bac 2: 1 1
  113. 113. ©Copyright 2007 MATLAB 113 M-FILE, or SCRIPT (tt) SỬ DỤNG FILE SCRIPT  Chúng ta có thể soạn một script file theo cấu trúc đề nghị như sau: a. Phần chú thích (comments section): Viết các dòng chú thích cho chương trình.  Dòng 1: Tên của chương trình và các từ khóa mô tả chương trình (dòng này được MATLAB gọi là dòng H1 và lệnh lookfor của MATLAB sẽ tìm thông tin ở dòng H1 này khi có yêu cầu)
  114. 114. ©Copyright 2007 MATLAB 114 M-FILE, or SCRIPT (tt)  Dòng 2: Tên người viết chương trình, ngày viết.  Định nghĩa các tên biến đầu vào và đầu ra. Có thể thêm vào định nghĩa tên các biến trung gian. Lưu ý là phải xác định rõ đơn vị đo lường. Cho tất cả các biến đầu vào và đầu ra.  Tên của từng hàm tự tạo được sử dụng trong chương trình. b. Phần đưa vào các giá trị đầu vào (input section) c. Phần tính toán (calculation section) d. Phần trình bày kết quả: Dùng một số hàm của MATLAB để trình bày kết quả.
  115. 115. ©Copyright 2007 MATLAB 115 M-FILE, or SCRIPT (tt) Thí dụ:  Soạn Script file tính diện tích hình tam giác ABC, khi biết tọa độ ba điểm trong không gian R3. Diện tích tam giác được tính bằng công thức:  Trong đó, ký hiệu (^) chỉ tích có hướng của hai vectơ AB và AC. ACABS ∧= 2 1
  116. 116. ©Copyright 2007 MATLAB 116 M-FILE, or SCRIPT (tt) Trong cửa sổ Editor/Debugger, ta soạn các dòng lệnh như sau:
  117. 117. ©Copyright 2007 MATLAB 117 M-FILE, or SCRIPT (tt)  Trong chương trình trên hàm cross(u,v) sẽ trả về một vectơ là vectơ tích có hướng của 2 vectơ u và v. Lưu ý: vectơ u (hoặc v) được xác định bởi các thành phần số của nó. Thí dụ: u = [1,-2,4], v = [-4,2,0]  Hàm norm(p) sẽ tính module của vectơ p. Lệnh clear xuất hiện trong đầu chương trình sẽ xóa toàn bộ các biến mà WORKSPACE đang quản lý và dành vùng nhớ để quản lý các biến của chương trình.  Dòng lệnh disp(S) sẽ hiện thị giá trị biến S ra cửa sổ lệnh- command windows(so sánh với lệnh disp(‘text’), hiển thị chuỗi ký tự).
  118. 118. ©Copyright 2007 MATLAB 118 M-FILE, or SCRIPT (tt) THỰC HIỆN % File dt_tamgiac.m: Chương trình tính diện tích hình tam giác, % Tên người lập trình % Dữ liệu đầu vào: Tọa ba điểm A,B,C % Dữ liệu đầu ra: Diện tích S của ∆ABC % Biến trung gian p chỉ vectơ tích có hướng của hai vectơ AB x AC clear disp(‘CHUONG TRINH TINH DIEN TICH HINH TAM GIAC’) disp(‘KHI BIET TOA DO BA DIEM’) disp(‘=========================================’) a = input(‘Tọa điểm A = ‘); b = input(‘Tọa điểm B = ‘); c = input(‘Tọa điểm C = ‘); p = cross(b-a,c-a); % Tích có hướng của hai vectơ AB x AC S = 0.5*norm(p); % Diện tích ∆ABC disp(‘Dien tich tam giac ABC:’) disp(S)
  119. 119. ©Copyright 2007 MATLAB 119 M-FILE, or SCRIPT (tt)  Khi chạy chương trình cho kết quả: >> DT_Tamgiac CT TINH DIEN TICH HINH TAM GIAC KHI BIET TOA DO BA DIEM ================================== Toa do diem A = [2,0,0] Toa do diem B = [4,0,0] Toa do diem C = [3,2,0] Dien tich tam giac ABC: 2
  120. 120. ©Copyright 2007 MATLAB 120 Toolbox Symbolic  MATLAB dùng các biểu thức ở dạng biểu tượng (symbolic) như các chuỗi kí tự để phân biệt với các biến hay phép toán dạng số học (numberic)  Xem Thí dụ dưới đây: >> x = sym('x'); %Tao bien symbolic x >> eq = 'x^2+2*x+a=0'; %Dinh nghia PT voi bien symbolic x >> solve(eq) %Ham dung de giai PT tren ans = -1+(1-a)^(1/2) -1-(1-a)^(1/2)
  121. 121. ©Copyright 2007 MATLAB 121 Toolbox Symbolic  Định nghĩa biểu thức symbolic Biểu thức Trong MATLAB       = dc ba M dx x x f b a ∫ − = 1 3 n x.2 1 ‘1/(2*x^n)’ M = sym(‘[a,b;c,d]’) f = int(‘x^3/sqrt(1-x)’,’a’,’b’)
  122. 122. ©Copyright 2007 MATLAB 122 Toolbox Symbolic  Hàm symbolic cho phép tính toán với các biểu thức, Thí dụ: >>diff(‘cos(x)’) % Tính đạo hàm của cos(x) ans = -sin(x) >>M=sym(‘[a,b;c,d]’) ans = [a b] [c d]
  123. 123. ©Copyright 2007 MATLAB 123 Toolbox Symbolic  Ở đây, ‘cos(x)’ là một chuỗi, diff(‘cos(x)’) là một biểu thức symbolic chứ không phải là một hàm số học. Ở Thí dụ 2, M=sym(‘[a,b;c,d]’) là một biểu thức symbolic.  Sử dụng symbolic để xây dựng các hàm toán học dạng symbolic.  Khai báo biến (như đã trình bày các slide trước) − sym(x) − sym x − syms x
  124. 124. ©Copyright 2007 MATLAB 124 Toolbox Symbolic  Các lệnh toán học sử dụng symbolic  f và g là hai hàm symbolic − f+g symadd(f,g) − f-g symsub(f,g) − f*g symmul(f,g) − f/g symdiv(f,g) − f^g sympow(f,g)
  125. 125. ©Copyright 2007 MATLAB 125 Toolbox Symbolic diff(f) Đạo hàm bậc nhất theo biến x diff(f,’a’) Đạo hàm bậc nhất theo biến a diff(f,’a’,n) Đạo hàm bậc n theo biến n int(f) Tính tích phân theo biến x int(f,’a’) Tính tích phân theo biến a int(f,1,2) Tính tích phân theo biến x từ 1 đến 2. int(f,’a’,1,2) Tính tích phân theo biến a từ 1 đến 2. int(f,’n’,’m’) Tính tích phân theo biến x từ n đến m solve(f) Giải phương trình f = 0 dsolve(f) Giải phương trình vi phân dsolve(f,’a’ ) Giải PT vi phân với ĐK ban đầu ezplot(f) Vẽ đồ thị hàm mà không cần giá trị của biến.
  126. 126. ©Copyright 2007 MATLAB 126 Toolbox Symbolic F=fourier(f) Biến đổi Fourier f(x)->F(w) f=ifourier(F) Biến đổi Fourier ngược F(w)->f(x) F=fourier(f,v) Biến đổi Fourier f(x)->F(v) F=fourier(f,t,v) Biến đổi Fourier ngược f(t)->F(v) F=ztrans(f) Biến đổi z f(n)->F(z) f=ztrans(F) Biến đổi z ngược F(z)->f(n) F=ztrans(f,w) Biến đổi z f(n)->F(w) F=ztrans(F,k,w) Biến đổi z ngược f(k)->F(w) F=laplace(f) Biến đổi Laplace f(t)->F(s) f=laplace(F) Biến đổi Laplace F(s)->f(t)
  127. 127. ©Copyright 2007 MATLAB 127 SIMULINK  Simulink 5.0 (Simulation and Link - R13) được MatWorks giới thiệu vào tháng 6 năm 2003. Nó cho phép phân tích, mô hình hóa và mô phỏng các hệ thống động tuyến tính và phi tuyến, liên tục và rời rạc một cách trực quan trong môi trường giao tiếp đồ họa, bằng các thao tác chuột đơn giản. Có thể nói, không tận dụng được Simulink là một thiệt thòi lớn cho người làm công tác mô phỏng!  Khởi động Simulink bằng một trong các cách sau:  nhập: >>simulink  hoặc nhấp chuột vào trên menubar của Matlab
  128. 128. ©Copyright 2007 MATLAB 128 SIMULINK  Thư viện simulink hiện ra như hình sau:  Trước tiên, sinh viên hãy nhấp chuột vào các thanh cuộn của thư viện để có cái nhìn thân thiện về simulink.  Từ đây, để có thể tạo mô hình bằng simulink, hãy: Nhấp chuột vào biểu tượng của thư viện simulink Chọn: File – New – Model trong Menu của thư viện Simulink Chọn: File – New – Model trong cửa sổ lệnh của Matlab
  129. 129. ©Copyright 2007 MATLAB 129 SIMULINK  Môi trường soạn thảo của Simulink  Cửa sổ này cho phép ta ‘nhấp - kéo - thả’ vào từng khối chức năng trong thư viện simulink. Thí dụ, đặt vào đây khối ‘Sine Wave’ trong thư viện simulink như hình sau:
  130. 130. ©Copyright 2007 MATLAB 130 SIMULINK Lấy một khối từ thư viện
  131. 131. ©Copyright 2007 MATLAB 131 MẢNG và MA TRẬN  Mảng một chiều  Mảng một chiều (vecto) là tập hợp các số được sắp xếp có thứ tự.  length(u): Tính số phần tử trong mảng một chiều u.  Muốn truy xuất phần tử thứ n trong mảng thì: ten_mang(n);  Các phần tử của mảng đựơc phân cách nhau bởi dấu phẩy và được đặt trong đôi móc vuông [ ] (kiểu dòng).  Các phần tử trong mảng phân cách nhau dấu chấm phẩy thì gọi là mảng kiểu cột.
  132. 132. ©Copyright 2007 MATLAB 132 MẢNG và MA TRẬN  Cách tạo mảng: * Ten_mang = [m1, m2, m3, …] % Mảng kiểu dòng * Ten_mang = [m1; m2; m3, …] % Mảng kiểu cột * Ten_mang = [m1 m2 m3 …] % Vectơ dòng * Ten_mang = [m1 m2 m3 …] * Ten_mang = [a:∆:b] % Mảng kiểu cách đều.  Thí dụ: >> x = [0:2:9] x = 0 2 4 6 8
  133. 133. ©Copyright 2007 MATLAB 133 MẢNG và MA TRẬN • x = linspace(x1,x2,n) % Tạo một vectơ dòng có các phẩn tử cách đều, với x1 là cận dưới, x2 là cận trên, và n là số điểm của dãy (kể cả 2 điểm x1, x2). Nếu n bị bỏ qua, giá trị mặc định của nó là 100. Thí dụ: >> z = linspace(2,8,7) z = 2 3 4 5 6 7 8
  134. 134. ©Copyright 2007 MATLAB 134 MẢNG và MA TRẬN  x = logspace(a,b,n) % Sẽ tạo ra 1 vectơ dòng có n phần tử cách khoảng theo thang logarit, phần tử đầu là 10a và phần tử cuối là 10b, các phần tử giữa có dạng 10x, trong đó x là 1 điểm cách đều giữa a và b. Có (n-2) điểm như vậy. Nếu n bỏ đi trong câu lệnh thì mặc định của nó là 50. Thí dụ: >> u = logspace(-1,1,4) u = 0.1000 0.4642 2.1544 10.0000
  135. 135. ©Copyright 2007 MATLAB 135 MẢNG và MA TRẬN  Các hàm liên quan đến mảng một chiều a. roots(Ten_mang) Nghiệm của một đa thức Ten_mang là một đa thức được mô tả là một mảng có các phần tử là các hệ số đa thức, bắt đầu ở bậc cao nhất. Mảng kiểu cột. b. poly(r) Trả về một mảng kiểu đòng với các phần tử là các hệ số của đa thức có nghiệm trước là các phần tử của mảng r (bài toán ngược)
  136. 136. ©Copyright 2007 MATLAB 136 MẢNG và MA TRẬN c. polyval(a,x) Dùng để tính giá trị của một đa thức có các hệ số chứa trong mảng a tại các điểm thuộc mảng x. Kết quả là một mảng có kích thước bằng với mảng x. d. find(x) Trả một mảng chứa các chỉ số của các phần tử khác 0 trong mảng. e. find(x<y) Trả về một mảng chứa các chỉ số của các phần tử trong mảng x (hay y) thỏa điều kiện x < y. x có kích thước bằng y.
  137. 137. ©Copyright 2007 MATLAB 137 MẢNG và MA TRẬN f. Chuyển vectơ hàng sang vectơ cột: Chuyển vị (transpose), dùng kí hiệu dấu nháy đơn ‘ bên phải vectơ (mảng một chiều) và ngược lại. Thí dụ: >> v = [3 5 9 7]’ v = 3 5 9 7
  138. 138. ©Copyright 2007 MATLAB 138 MẢNG và MA TRẬN g. Kết nối các vectơ: Chúng ta có thể tạo vectơ mới bằng cách kết nối các vectơ thành phần đã biết. Thí dụ: >> x = [2,5,6]; >> y = [7,8,1]; >> z = [x,y] z = 2 5 6 7 8 1
  139. 139. ©Copyright 2007 MATLAB 139 MẢNG và MA TRẬN i. Truy xuất một phần tử từ một vectơ: Chúng ta có thể truy xuất một phần tử vectơ hay trích ra một nhóm các phần tử của vectơ theo một điều kiện nào đó (phát sinh ra vectơ mới). Thí dụ: >> u = [0,2,4,6,8,10]; >> u(3) % truy xuất phần tử thứ 3 của vectơ u ans = 4 >> u(2:5) %Truy xuất phần tử thứ 2 đến thứ 5 của vectơ u ans = 2 4 6 8 >> u([1 3 5]) %Truy xuất phần tử thứ 1, thứ 3, thứ 5 của vectơ u. >> n = length(u) % Trả về số phần tử của vectơ u thuộc N. n = 6
  140. 140. ©Copyright 2007 MATLAB 140 MẢNG và MA TRẬN  MẢNG 2 CHIỀU (MA TRẬN)  Một mảng trong MATLAB còn có thể có nhiều dòng, nhiều cột; một mảng 2 chiều như vậy được gọi là MA TRẬN (matrix).  Nếu một ma trận A có m dòng và n cột, ta nói kích thước A là m.n. Đôi khi ma trận A còn được viết dưới dạng [aij], trong đó i, j lần lượt là các chỉ số DÒNG và chỉ số CỘT của phần tử aij.  Hai ma trận A và B được gọi là BẰNG NHAU nếu chúng có cùng kích thước và tất cả các phần tử tương ứng đều bằng nhau (aij = bij, với mọi i, j)  Các vectơ được MATLAB xem là các mảng 2 chiều đặc biệt: Chúng có kích thước 1xn (vectơ dòng) hoặc mx1 (vectơ cột). MATLAB xếp vectơ và mà trận vào lớp double array trong WORKSPACE.
  141. 141. ©Copyright 2007 MATLAB 141 MẢNG và MA TRẬN a. Cách tạo một ma trận trong MATLAB  Các phần tử thuộc cùng một dòng được phân cách nhau bởi dấu phẩy(,), còn các dòng thì phân cách nhau bằng dấu chấm phẩy (;)  Thí dụ: >> A = [2,4,6;3,5,7] A = 2 4 6 3 5 7
  142. 142. ©Copyright 2007 MATLAB 142 MẢNG và MA TRẬN b. Kết nối một vectơ vào 1 ma trận: Nếu r = [-1, 0, 1] là một vectơ dòng có cùng số cột với ma trận A thì lệnh B = [A:r] sẽ nối vectơ dòng r vào ma trận A, để tạo ra ma trận B có 3 dòng, 3 cột như sau: B = 2 4 6 3 5 7 -1 0 1
  143. 143. ©Copyright 2007 MATLAB 143 MẢNG và MA TRẬN c. Ma trận chuyển vị (chuyển trí):  Nếu A là một ma trận có kích thước m.n thì ma trận chuyển vị (transpose) của A là một ma trận có kích thước n.m. Các cột thứ 1, thứ 2, thứ 3… Trong AT chính là dòng thứ 1, 2, 3 trong ma trận A.  MATLAB dùng dấu nháy đơn đặt bên phải ma trận để tạo ma trận chuyển vị. Thí dụ: >> A = [1 0;-4 2] A = -1 0 -4 2 >> AT=A’ AT = 1 -4 0 2
  144. 144. ©Copyright 2007 MATLAB 144 MẢNG và MA TRẬN d. Truy xuất một phần tử của ma trận (trích vectơ dòng, cột, ma trận con)  Khi tạo xong một ma trận A nào đó, phát hiện phần tử dòng 2, cột 3 bị gõ sai và chúng ta muốn sửa lại phần tử này là 6, ta chỉ cần gõ lệnh A(2,3) = 6. Trong MATLAB A(2,3) là ký hiệu chỉ phần tử dòng 2, cột 3 của ma trận.  Với một ma trận cho trước, chúng ta có thể truy xuất từng phần tử của ma trận, trích ra một vectơ dòng hoặc một vectơ cột nào đó, hoặc trích ra một ma trận con gồm nhiều dòng, nhiều cột của ma trận A.
  145. 145. ©Copyright 2007 MATLAB 145 MẢNG và MA TRẬN  Thí dụ: >> A = [1,2,3,4;6,7,8,9;0,5,10,15;-3,-4,-5,-6] A = 1 2 3 4 6 7 8 9 0 5 10 15 -3 -4 -5 -6 >> A(2,3) % truy xuất phần tử dòng 2, cột 3. ans = 8 >> A(:,2) %Trích vectơ cột thứ 2 ans = 2 7 5 -4 >> A(4,:) % Trích vectơ dòng thứ 4 ans = -3 -4 -5 -6
  146. 146. ©Copyright 2007 MATLAB 146 MẢNG và MA TRẬN >> A(:,2:4) % Tạo một ma trận con gồm các cột 2,3,4 của A ans = 2 3 4 7 8 9 5 10 15 -4 -5 -6 >> A(1:2,:) %Tạo 1 ma trận con gồm các dòng 1,2 của A ans = 1 2 3 4 6 7 8 9 >> A([1 3], [2 4]) % Tạo một ma trận con gồm các phần tử thuộc dòng 1,3 và cột 2,4.
  147. 147. ©Copyright 2007 MATLAB 147 MẢNG và MA TRẬN  Tóm tắt:  A(k,:) : Véctơ dòng thứ k.  A (:,l): Vectơ cột thứ l.  A(k:m,:): Ma trận con có dòng thứ k, cột thứ m  A([array1], [array2]): Vectơ dòng để ghi số dòng nào, cột nào cần trích ra.
  148. 148. ©Copyright 2007 MATLAB 148 MẢNG và MA TRẬN  Mảng trống hoặc mảng không (empty or null array)  MATLAB dùng kí hiệu [ ] để chỉ 1 mảng trống là mảng không có phần tử nào cả. Các hàng hoặc các cột của một ma trận có thể được bỏ đi, bằng cách gán chúng bằng với mảng trống.  Thí dụ: A(2,:) = [ ], sẽ bỏ dòng thứ 2 của ma trận A và như vậy sẽ làm thay đổi kích thước của ma trận A ban đầu.
  149. 149. ©Copyright 2007 MATLAB 149 MẢNG và MA TRẬN Thí dụ: >> A A = 1 2 3 4 5 6 7 8 0 5 10 15 -3 -4 -5 -6 >> A(2,:) = [ ]; % Bỏ dòng thứ 2 của ma trận A >> A A = 1 2 3 4 0 5 10 15 -3 -4 -5 -6
  150. 150. ©Copyright 2007 MATLAB 150 MẢNG và MA TRẬN Thí dụ: >> A A = 1 2 3 4 0 5 10 15 -3 -4 -5 -6 >> A(:,4) = [ ]; % Bỏ tiếp cột thứ 4 >> A A = 1 2 3 0 5 10 -3 -4 -5
  151. 151. ©Copyright 2007 MATLAB 151 MẢNG và MA TRẬN  Các ma trận đặc biệt  M = eye(n): tạo ra ma trận đơn vị cấp n  M = ones(m,n): Tạo ra ma trận có size = m.n, có các phần tử đều bằng 1.  M = zeros(m,n): Tạo ra ma trận có size = m.n, có các phần tử đều bằng 0.  M = zeros(n); M = ones(n): Tạo ra ma trận vuông M cấp n có tất cả các phần tử đều bằng o hoặc bằng 1.
  152. 152. ©Copyright 2007 MATLAB 152 CÁC PHÉP TOÁN MA TRẬN  Phép cộng trừ  A+B  A-B % A và B là 2 ma trận có cùng kích thước, hoặc 1 trong hai là đại lượng vô hướng.  Phép nhân  A*B %Tích hai ma trận. Số cột của A bằng số hàng của B.  A.*B % Nhân từng phần tử của A với từng phần tử của B tương ứng. A và B có cùng kích thước.
  153. 153. ©Copyright 2007 MATLAB 153 CÁC PHÉP TOÁN MA TRẬN  Phép chia:  AB % Chia trái ma trận.  A.B % Chia trái mảng  A/B % Chia phải ma trận  A./B %Chia phải mảng  Phép lũy thừa:  A^k % Lũy thừa ma trận A bậc k. Lưu ý: Lỗi sẽ phát sinh nếu cả A và k đều là ma trận.  A.^B % Lũy thừa mảng. Là một ma trận mà các số hạng là A(i,j)^B(i,j)
  154. 154. ©Copyright 2007 MATLAB 154 CÁC PHÉP TOÁN MA TRẬN  Ma trận chuyển vị:  A’  Ma trận nghịch đảo  inv(a) % Tương đương kí hiệu A-1  Định thức ma trận  det(A) % A phải là ma trận vuông  Phép quay ma trận  Rot90(A,n) % Các phần tử của ma trận được quay đi một góc 90o theo ngược chiều kim đồng hồ. A là ma trận vuông, n số lần quay.  Phép đảo ma trận  Fliplr(A) %đảo các phần tử của A từ trái sang phải.  Flipud(A) %đảo các phần tử của A từ trên xuống dưới
  155. 155. ©Copyright 2007 MATLAB 155 HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH  Phương pháp nghịch đảo ma trận  Inv(A)  Invhilb(n):  pinv(A): Tính giả nghịch đảo ma trận nxm với m ≠ n.  Phương pháp khử Gauss  rref([A f])  Phương pháp khử Gauss-Jordan  Phương pháp phân rã ma trận LU  lu(A)  Cú pháp: [L, U, P]=lu(A) − trả về ma trận tam giác dưới L, tam giác trên U và ma trận hoán đổi P (ma trận đơn vị mà các cột bị hoán chuyển). Ta có, L*U = P*A => X = U(Lb)
  156. 156. ©Copyright 2007 MATLAB 156 HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH  Phương pháp phân rã ma trận LU − lu(A) − Cú pháp: [L, U, P]=lu(A)  Trả về ma trận tam giác dưới L, tam giác trên U và ma trận hoán đổi P (ma trận đơn vị mà các cột bị hoán chuyển). Ta có, L*U = P*A => X = U(Lb)  Trả về ma trận tam giác trên U, còn ma trận LP’=L*P. Ta có, LP*U = A => X = U (LPb)
  157. 157. ©Copyright 2007 MATLAB 157 TẠO GIAO DIỆN  Bài thí nghiệm này trang bị cho sinh viên một số kiến thức cơ bản để xây dựng giao diện người dùng trong môi trường Matlab, nhằm hoàn thiện một chương trình ứng dụng nhất định.  Cũng như các ngôn ngữ cấp cao khác, Matlab hổ trợ nhiều công cụ chức năng cho phép lập trình tạo giao diện sử dụng đẹp và nhanh chóng. Thí dụ, các dạng nút ấn, cửa sổ soạn thảo, các dạng menu, …
  158. 158. ©Copyright 2007 MATLAB 158 TẠO GIAO DIỆN Các công cụ hổ trợ giao diện
  159. 159. ©Copyright 2007 MATLAB 159 TẠO GIAO DIỆN  Để tạo GIAO DIỆN dùng công cụ GUIDE của MATLAB >> guide Hoặc File/Show GUI layout tool. Cửa sổ Guide Control Panel xuất hiện. Từ cửa sổ này có thể truy xuất đến các cửa sổ khác. Có thể chọn các mẫu giao diện có sẵn hay bấm OK để chọn GUI trống.
  160. 160. ©Copyright 2007 MATLAB 160 TẠO GIAO DIỆN (tt)  Cửa sổ biên soạn GUI hiện ra Vùng bên trái chứa danh sách các thành phần đối tượng, vùng có ô lưới là vùng hiển thị, nơi đặt các component, bạn bấm chuột trái vào các component muốn tạo, sau đó đưa con chuột ra vùng layout nơi muốn đặt component, bấm chuột trái dùng kích thước component. Muốn thay đổi kích chuột phải vào vùng layout, vào menu chọn thuộc tính bấm chuột trái, cửa sổ sau xuất hiện, vào BackGroundColor chọn màu nền thích hợp. Cửa sổ thuộc tính
  161. 161. ©Copyright 2007 MATLAB 161 TẠO GIAO DIỆN (tt)  Nếu muốn mở file.fig có sẵn, ta có thể chọn ngay từ cửa sổ lệnh >> guide ten_file.fig Hay vào menu File rồi chọn Open. Hay Ctrl + O
  162. 162. ©Copyright 2007 MATLAB 162 TẠO GIAO DIỆN (tt)  Align Objects (căn lề các đối tượng)  Tools/Align Objects…/
  163. 163. ©Copyright 2007 MATLAB 163 TẠO GIAO DIỆN (tt)  Bấm kép chuột component trong vùng layout để soạn tính chất của component, Thí dụ bấm kép vào Push Buton sẽ hiện ra cửa sổ Property Inspector hoặc cũng có thể bấm chuột phải để hiện ra Context Menu (hình bên), sau đó bấm Property Inspector. Mỗi component là mỗi Object được điều khiển bởi uicontrol (User Interface Control)
  164. 164. ©Copyright 2007 MATLAB 164 TẠO GIAO DIỆN (tt)  Các component mà GUI cho phép là:  Axes: vẽ hệ trục  Check box: là hộp kiểm tra cho phép đưa vào các chọn lựa khi bấm chuột vào đó.  Edit text: Là hộp văn bản đưa chuỗi kí tự vào đó.  Frame: Khung bao một cửa sổ hình.  List box: Gồm một bảng các mục để chọn lựa  Pop-up menu: Menu sổ xuống trình bày một bảng các chọn lựa khi bấm chuột vào.  Push button: Tương tự Checkbox nhưng chỉ chọn được một,  Radio button: (nút bật) giống push button nhưng có hiển thị trạng thái thay đổi mỗi khi nhấn.  Popup Menu: Tạo menu.
  165. 165. ©Copyright 2007 MATLAB 165 TẠO GIAO DIỆN (tt)  Một số component sẽ gây ra hành động khi tác động vào nó bằng cách goi một hàm M mà người dùng phải soạn thảo. Sau khi đã biên tập các thuộc tính và gọi hàm, có thể cất figure và file áp dụng M đi kèm bằng cách vào menu File-Save hay File-Save as và đánh tên file.  Muốn chạy chương trình gọi ten_file.m (hoặc dùng các lệnh openfig, open, hgfile.fig), file này sẽ khởi động file ten_file.fig và xuất hiện cửa sổ hình ảnh ten_file.fig mà ta sẽ thao tác trên các component đã soạn thảo.
  166. 166. ©Copyright 2007 MATLAB 166 TẠO GIAO DIỆN (tt)  Tool – GUI Options để chọn các option cho giao diện Các chọn lựa cho GUI
  167. 167. ©Copyright 2007 MATLAB 167 TẠO GIAO DIỆN (tt)  Resize behavior có 3 lựa chọn:  Non-resizable: không thay đổi kích thước cửa FIG (mặc định).  Proportional: Người dùng có thể điều chỉnh kích thước cửa sổ và các component trong đó sẽ tự điều chỉnh phù hợp  Other: Dùng hàm ResizeFcn để điều chỉnh.  Ô Command-Line accessibility có các lựa chọn:  Off: Các lệnh đánh sau dâu >> không tác động đến cửa sổ FIG.  On: Các dòng lệnh tác động đến cửa sổ FIG, GUI là current figure  Callback: GUI là current fugure đối với các lệnh callback  Other: Phụ thuộc cửa sổ Property Inspector (thuộc tính HandleVisibility và IntegerHandle)
  168. 168. ©Copyright 2007 MATLAB 168 TẠO GIAO DIỆN (tt)  XÂY DỰNG GIAO DIỆN StartStart Xác định công việcXác định công việc Draw GUIDraw GUI TEST DESIGNTEST DESIGN Viết codeViết code Test codeTest code StopStop
  169. 169. ©Copyright 2007 MATLAB 169 TẠO GIAO DIỆN (tt)  Sau khi xác định được hình dáng của giao diện, dùng chuột kéo các đối tượng cần sử dụng sang figure, sắp xếp theo đúng ý tưởng thiết kế.  Thay đổi các thuộc tính của đối tượng.  Viết chương trình callback.  Chuyển sang chế độ active để thử chương trình.  Thí dụ 1: Tạo giao diện để giải và vẽ đồ thị phương trình bậc 2. Giao diện gồm có 5 text, 5 edit, 2 push, 1check, 1 axes.
  170. 170. ©Copyright 2007 MATLAB 170 TẠO GIAO DIỆN (tt)  Bài tập:  XÂY DỰNG GIAO DIỆN EditA EditB EditC EditX1 EditX2 Tag a. Control b. Active Giao diện ở chế độ thiết kế và thực thi
  171. 171. ©Copyright 2007 MATLAB 171 TẠO GIAO DIỆN (tt)  Thí dụ 2: xây dựng một giao diện đơn giản sau
  172. 172. ©Copyright 2007 MATLAB 172 TẠO GIAO DIỆN (tt)  Tạo cửa sổ chính figure – ‘Welcome to User Interface’s Giude’ theo cách sau:  Mở Matlab Editor  Nhập nội dung sau: % User Interface's Guide % Matlab Experiments 2003 % TcAD, CIT, Cantho University % ---------------------------------------------------------------------------------- % Initialize whole figure... namefig = 'Welcome to User Interface''s Guide'; figpos = get(0,'DefaultFigurePosition'); % lay vi tri mac nhien figpos(1)= figpos(1)-10; figpos(2)= figpos(2)-10; figpos(3)= figpos(3)+10; figpos(4)= figpos(4)+10; % Tao figure fig=figure( ... 'Name', namefig, ... 'NumberTitle','off', ... 'Position',figpos);
  173. 173. ©Copyright 2007 MATLAB 173 TẠO GIAO DIỆN (tt)  Lưu thành file giaodien.m >>giaodien <Enter> % thi hanh >>set(fig) % xem thuộc tính của figure trong cửa sổ lệnh  Quan sát kết quả trên hình sau (Lưu ý các thuộc tính: Name, Position)
  174. 174. ©Copyright 2007 MATLAB 174 TẠO GIAO DIỆN (tt)  Thêm vào figure một axes cho phép hiển thị đồ họa:  Nhập tiếp nội dung sau vào file giaodien.m % ---------------------------------------------------------------------------- % main axes axs=axes('Position',[0.05 0.4 0.65 0.55]);  Lưu và thi hành file này.
  175. 175. ©Copyright 2007 MATLAB 175 TẠO GIAO DIỆN (tt)  Hiển thị dòng ‘Matlab Experiments’ bên dưới axes: Nhập tiếp nội dung sau vào file giaodien.m % ------------------------------------------- % text txtpos=[10 50 425 50]; txt=uicontrol(... 'Style','text',... 'BackgroundColor',[0.8 0.8 0.8],... 'ForegroundColor',[0.4 0.5 0.3],... 'String','Matlab Experiments',... 'Position',txtpos,... 'Fontname','Courier',... 'FontWeight','Bold',... 'FontSize',26);
  176. 176. ©Copyright 2007 MATLAB 176 TẠO GIAO DIỆN (tt)  Lưu và thi hành file này.
  177. 177. ©Copyright 2007 MATLAB 177 TẠO GIAO DIỆN (tt)  Tạo một frame có shadow bên phải figure để đặt các nút chức năng. Nhập tiếp nội dung sau vào file giaodien.m % ---------------------------------------------- % Console frames p1=0.755; p2=0.05; p3=0.2; p4=0.90; frm1pos = [p1 p2 p3 p4]; frm2pos = [p1-0.005 p2+0.005 p3 p4]; % shadow frame frm1=uicontrol( ... 'Style','frame', ... 'Units','normalized', ... 'Position',frm1pos, ... 'ForegroundColor',[0.4 0.4 0.4],... 'BackgroundColor',[0.4 0.4 0.4]); % main frame frm2=uicontrol( ... 'Style','frame', ... 'Units','normalized', ... 'Position',frm2pos, ... 'ForegroundColor',[0.7 0.7 0.7],... 'BackgroundColor',[0.65 0.65 0.65]);
  178. 178. ©Copyright 2007 MATLAB 178 TẠO GIAO DIỆN (tt)  Lưu và thi hành file này.
  179. 179. ©Copyright 2007 MATLAB 179 TẠO GIAO DIỆN (tt)  Tạo nút ‘Close’ có chức năng đóng cửa sổ figure hiện hành:  Nhập tiếp nội dung sau vào file giaodien.m % ------------------------------------------------------------ % Close button closeHndl=uicontrol(... 'Style','pushbutton', ... 'Units','normalized', ... 'Position',[p1+0.01 p2+0.05 p3-0.025 0.05], ... 'String','Close', ... 'Foregroundcolor','b',... 'Fontsize',9,... 'Callback','close');  Lưu và thi hành file này.
  180. 180. ©Copyright 2007 MATLAB 180 TẠO GIAO DIỆN (tt)  Vấn đề quan trọng nhất đối với một nút chức năng là thi hành công việc tương ứng khi người sử dụng thao tác. Thuộc tính ‘CallBack’ cho phép: thi hành một lệnh của Matlab dưới dạng chuỗi (bao gồm lệnh gọi hàm, script file, biểu thức toán, …). Sinh viên thử thay lệnh close bằng một lệnh khác, chẳng hạn demos và quan sát đáp ứng.  Tạo nút Sphere để vẽ một hình cầu 3D:  Nhập tiếp nội dung sau vào file giaodien.m
  181. 181. ©Copyright 2007 MATLAB 181 TẠO GIAO DIỆN (tt)
  182. 182. ©Copyright 2007 MATLAB 182 TẠO GIAO DIỆN (tt)  Lưu và thi hành file này.
  183. 183. ©Copyright 2007 MATLAB 183 TẠO GIAO DIỆN (tt)  Tạo nút Picture để hiển thị ảnh màu:  Nhập tiếp nội dung sau vào file giaodien.m % -------------------------------------------------------------- % Picture button pic=uicontrol( ... 'Style','pushbutton', ... 'Units','normalized', ... 'Position',[p1+0.01 p4-0.125 p3-0.025 0.05], ... 'String','Picture', ... 'Foregroundcolor','b',... 'Fontsize',9,... 'Callback',['imshow(imread(''flowers.tif''))']);
  184. 184. ©Copyright 2007 MATLAB 184 TẠO GIAO DIỆN (tt)  Lưu và thi hành file này.
  185. 185. ©Copyright 2007 MATLAB 185 TẠO GIAO DIỆN (tt)  Sinh viên lưu ý cách biểu diễn nhiều lệnh ở dạng chuỗi cho ‘CallBack’. Trong trường hợp có quá nhiều lệnh phục vụ chức năng này, ta nên đưa chúng vào một script file hoặc một hàm khác. Ngoài ra, nếu ta tạo giao diện dưới dạng một hàm (function) thì thuộc tính ‘CallBack’ cho phép gọi một hàm con được viết ngay trong file này.
  186. 186. ©Copyright 2007 MATLAB 186 TẠO GIAO DIỆN (tt)  Sinh viên hãy tạo thêm nút ‘About’ sao cho khi người sử dụng ấn nút sẽ mở cửa sổ mới nằm ngay giữa màn hình
  187. 187. ©Copyright 2007 MATLAB 187 BÀI TẬP 1  Cho hai ma trận: 1 2 1 0 A = ; B = 3 4 0 1 Dùng MATLAB để tính các biểu thức sau: C = A + B; D = A – B; E = A*B; F = B*A; G = A.*B; H = B.*A; I = AB; J = A.B; K = A/B; L = A./B; M = A.^B; N = A^2,0; O = 2,0.^A
  188. 188. ©Copyright 2007 MATLAB 188 BÀI TẬP 2  Cho vectơ hàng A = [4 5 6] và B = [1 2 3]  Dùng MATLAB để tính các biểu thức sau: C = A+B; D = A – B; E = A*B; F = B*A;  Cho ma trận A = [4 5 6;2 0 5;1 3 4 ] và B = [1 0 0] Dùng MATLAB tính các biểu thức sau: C =3*A; D = A*3; E = A.*3; F = 3.^A; G = A/5; H = A./5; I = A5; J = A.5
  189. 189. ©Copyright 2007 MATLAB 189 BÀI TẬP 3. Viết chương trình giải phương trình bậc n và vẽ đồ thị của hàm theo 2 phương pháp nhập biến: nhập khi gọi hàm và nhập bằng câu lệnh input. So sanh ưu nhược điểm khi dùng hai phương pháp này. 4. Viết chương trình cho phép chọn kiểu vẽ 2D (plot), 3D (mesh) để vẽ đồ thị của hàm một biến và hai biến bất kỳ. Người sử dụng sẽ phải cung cấp kiểu vẽ, hàm số và khoảng giá trị của biến cần vẽ. Nếu kiểu vẽ là 2D và hàm hai biến, yêu cầu nhập lai cho đúng. 5. Viết chương trình giải phương trình hoặc hệ phương trình bằng biến symbolic. Người sử dụng sẽ chọn lựa giải phương trình hoặc giải hệ phương trình. Nếu giải hệ phải cung cấp số phương trình.
  190. 190. ©Copyright 2007 MATLAB 190 BÀI TẬP 6. Viết chương trình tìm đạo hàm và tích phân của một hàm và vẽ đồ thị của hàm, vi phân, tích phân của hàm trên cùng một đồ thị. Người sử dụng có thể chọn biến của hàm. Người sử dụng có thể nhập khoảng giá trị biến cần vẽ hoặc không. 7. Viết chương trình giải phương trình vi phân. 8. Làm lại bài 2 với biến symbolic
  191. 191. ©Copyright 2007 MATLAB 191 BÀI TẬP (tt) 9. Tạo giao diện như hình vẽ. Nhập các thông số a, b, c , d. Nhấn ‘Vẽ’, vẽ đồ thị. Nhấn ‘Giải nghiệm’, thì xuất nghiệm ở x1, x2, x3. Khi chọn ‘PTB2’ thì các ô d và x3 ở chế độ enable off.
  192. 192. ©Copyright 2007 MATLAB 192 BÀI TẬP (tt) 10. Tạo giao diện như ở hình dưới. Người sử dụng nhập hàm cần vẽ vào ô edit, sau đó chọn lực kiểu vẽ, colormap.

×