Bài giảng Tin học ứng dụng trong kỹ thuật địa chất và dầu khí - Đỗ Quang Khánh

pdf 192 trang hapham 30
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tin học ứng dụng trong kỹ thuật địa chất và dầu khí - Đỗ Quang Khánh", để 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_tin_hoc_ung_dung_trong_ky_thuat_dia_chat_va_dau_kh.pdf

Nội dung text: Bài giảng Tin học ứng dụng trong kỹ thuật địa chất và dầu khí - Đỗ Quang Khánh

  1. BÀI GIẢNG ĐIỆN TỬ TIN HỌC ỨNG DỤNG TRONG KỸ THUẬT ĐỊA CHẤT & DẦU KHÍ MATLAB Tác giả : ThS. Đỗ Quang Khánh ThS. Bùi Tử An Bộ môn : Khoan & Khai thác dầu khí Copyright 2007
  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 Copyright 2007 MATLAB 2
  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 Copyright 2007 MATLAB 3
  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. Copyright 2007 MATLAB 4
  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 Copyright 2007 MATLAB 5
  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, Copyright 2007 MATLAB 6
  7. Các khái niệm cơ bản Cửa sổ lệnh Khi chạy chƣơng trình MATLAB, thì cửa sổ này sẽ xuất hiện Cửa sổ lịch sử Cửa sổ không lệnh gian làm việc Copyright 2007 MATLAB 7
  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 MATLAB701\work (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. Copyright 2007 MATLAB 8
  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 Copyright 2007 MATLAB 9
  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 Copyright 2007 MATLAB 10
  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 ( ) Lớn hơn • le ( = ) Lớn hơn hoặc bằng Copyright 2007 MATLAB 11
  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 Copyright 2007 MATLAB 12
  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 Copyright 2007 MATLAB 13
  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 Copyright 2007 MATLAB 14
  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 Copyright 2007 MATLAB 15
  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 Copyright 2007 MATLAB 16
  17. Một số biến đƣợc định nghĩa trƣớc (tt) Ý Copyright 2007 MATLAB 17
  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) Copyright 2007 MATLAB 18
  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 Copyright 2007 MATLAB 19
  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. Copyright 2007 MATLAB 20
  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ó. Copyright 2007 MATLAB 21
  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. Copyright 2007 MATLAB 22
  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. Copyright 2007 MATLAB 23
  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. Copyright 2007 MATLAB 24
  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 Copyright 2007 tròn. MATLAB 25
  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 Copyright 2007 MATLAB 26
  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‟ Copyright 2007 MATLAB 27
  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] Copyright 2007 MATLAB 28
  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 Copyright 2007 MATLAB 29
  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 (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 Copyright 2007 MATLAB 30
  31. BIẾN (tt) . Nạp biến: − Dùng lệnh 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 để 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  Lƣu một vài biến trong cửa sổ workspace − Lệnh  Nói chung cách đơn giản nhất là: Từ cửa sổ Menu File ở cửa sổ lệnh chọn Đặt tên tập tin (có đuôi mở rộng là *.mat) Copyright 2007 MATLAB 31
  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 Copyright 2007 MATLAB 32
  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 Copyright 2007 MATLAB 33
  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 Copyright 2007 MATLAB 34
  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ề 1 hoặc vecto hàng đơn vị nếu bất kỳ phần tử nào Any(x) của vecto hoặc ma trận x khác 0. là 1 hoặc vecto hàng đơn vị nếu tất cả các phần tử All(x) nào của vecto hoặc ma trận x khác 0. Là một tại những vị trí NaN (Not a Number, Thí dụ Isnan(x) 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 Copyright 2007 MATLAB 35
  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 Hàm dấu, Thí dụ: sign(1.2) = 1,sign(-23.4) = -1, sign(0) sign(x) = 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ũ Copyright 2007 MATLAB 36
  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) Copyright 2007 MATLAB 37
  38. Một số hàm cơ bản (tt)  Thí dụ: >> x=4; >> v=[1 2 3]; >> sqrt(x) >> min_v=min(x) ans = 2 min_v = 1 >> mean(x) >> exp(x) ans = 2 ans = 54.5982 >> sum(x) >> sign(x) ans = 6 ans = 1 >> rem(x,3) ans = 1 Copyright 2007 MATLAB 38
  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. Copyright 2007 MATLAB 39
  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 Copyright 2007 MATLAB 40
  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 Copyright 2007 MATLAB 41
  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 Copyright 2007 MATLAB 42
  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 end . Thí dụ vòng lặp FOR: Tính giai thừa của 100? Copyright 2007 MATLAB 43
  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 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 Copyright 2007 MATLAB 44
  45. CÁC LỆNH ĐIỀU KIỆN VÀ LẶP  Lệnh if else elseif . Cấu trúc: if if if elseif else end end end  Nếu là true thì đƣợc thi hành, nếu không thì thực hiện các lệnh sau end. Copyright 2007 MATLAB 45
  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 Copyright 2007 MATLAB 46
  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 Copyright 2007 end MATLAB 47
  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 case case otherwise end Copyright 2007 MATLAB 48
  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 Copyright 2007 MATLAB 49
  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. Copyright 2007 MATLAB 50
  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 -. Dash-dot line k Black Dased line Copyright 2007 MATLAB 51
  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 Copyright 2007 MATLAB 52
  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] Copyright 2007 MATLAB 53
  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ị Copyright 2007 >>grid on % Tạo lưới cho đồ thị MATLAB 54
  55. ĐỒ HỌA CĂN BẢN – Plot() (tt) Copyright 2007 MATLAB 55
  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ị Copyright 2007 MATLAB 56
  57. ĐỒ HỌA CĂN BẢN – Plot() (tt) >>legend(„y = sin(x)‟,‟z=cos(x)‟) Copyright 2007 MATLAB 57
  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 Copyright 2007 MATLAB 58
  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)) Copyright 2007 MATLAB 59
  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') Copyright 2007 MATLAB 60
  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]) Copyright 2007 MATLAB 61
  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. Copyright 2007 MATLAB 62
  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-') Copyright 2007 MATLAB 63
  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 = 2\t'); Copyright 2007 MATLAB 64
  65. ĐỒ HỌA CĂN BẢN (tt)  Thí dụ lệnh loglog(x,y) >> x = logspace(-1,2); >> loglog(x,exp(x)) Copyright 2007 MATLAB 65
  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() Copyright 2007 MATLAB 66
  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 Copyright 2007 MATLAB 67
  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) Copyright 2007 MATLAB 68
  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) = x , Q(x,y) = 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: Copyright 2007 MATLAB 69
  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: Copyright 2007 MATLAB 70
  71. ĐỒ HỌA CĂN BẢN (tt)  Các lệnh thao tác và điều khiển Hiển thị cửa sổ đồ họa hiện hành figure(gef) figure Tạo ra cửa sổ đồ họa figure(„propertyname‟,‟propertyvalue‟, ) Chuyển từ trạng thái hold là on sang off và ngược hold lại hold on Giữ lại tất cả màn hình đã vẽ Xóa các màn hình đã vẽ chỉ thể hiện màn hình hiện hold off 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ị Copyright 2007 MATLAB 71
  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ỏ. Copyright 2007 MATLAB 72
  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) Copyright 2007 MATLAB 73
  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 Copyright 2007 MATLAB 74
  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) Copyright 2007 MATLAB 75
  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‟) Copyright 2007 MATLAB 76
  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‟) Copyright 2007 MATLAB 77
  78. ĐỒ HỌA CĂN BẢN (tt)  Kiến tạo hệ trục tọa độ Lệnh Mô tả Thiết lập các giá trị min, max của hệ trục Axis([xmin xmax ymin ymax]) dùng các giá trị được đưa ra trong vecto hàng. V là vector cột có chứa thang chia cho đồ thị V= axis 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 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 Axis xy ngang tăng từ trái qua phải, trục đứng tăng từ dưới lên. Copyright 2007 MATLAB 78
  79. ĐỒ HỌA CĂN BẢN (tt) Lệnh Mô tả Sử dụng hệ tọa độ ma trận, trong đó góc tọa độ ở Axis ij đỉnh góc trái, trục đứng tăng từ đỉnh xuống, trục ngang từ trái qua phải. Thiết lập đồ thị hiện tại là hình vuông, so với mặc Axissquare định là hình chữ nhật. Axisequal Thiết lập thang chia giống nhau cho cả hai hệ trục Tương tự như axisequal nhưng hộp đồ thị vừa đủ Axis tightequal đối với dữ liệu Axis normal Tắt đi chế độ axis, equal, tight và vis3d Tắt bỏ chế độ nền trục, nhãn, lưới, và hộp, dấu. Axis off 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ể Copyright 2007 MATLAB 79
  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 Copyright 2007 MATLAB 80
  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.05tsint y =e-0.05tcost z = t [0,10 ] Copyright 2007 MATLAB 81
  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; Copyright 2007 MATLAB 82
  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 Copyright 2007 MATLAB 83
  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. Copyright 2007 MATLAB 84
  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. Copyright 2007 − Mỗi ô lƣới sẽ có kích thƣớc x, và y. MATLAB 85
  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. Copyright 2007 MATLAB 86
  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'). Copyright 2007 MATLAB 87
  88. ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt) x2 y2  Thí dụ: Vẽ mặt z x.e  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‟) Copyright 2007 MATLAB 88
  89. Thí dụ lệnh MESHZ >> meshz(X,Y,Z) Copyright 2007 MATLAB 89
  90. Thí dụ lệnh MESHC >> Meshc(X,Y,Z) Copyright 2007 MATLAB 90
  91. Thí dụ lệnh WATERFALL >> waterfall(X,Y,Z) Copyright 2007 MATLAB 91
  92. Thí dụ lệnh SURF >> surf(X,Y,Z) Copyright 2007 MATLAB 92
  93. Thí dụ lệnh SURFC >> surfc(X,Y,Z) Copyright 2007 MATLAB 93
  94. Thí dụ lệnh SURFNORM >> surfnorm(X,Y,Z) Copyright 2007 MATLAB 94
  95. Thí dụ lệnh CONTOUR >> contour(X,Y,Z) Copyright 2007 MATLAB 95
  96. ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt)  CÁC LỆNH QUAN SÁT . View . Rot90 . Slice . Colormap . colorbar Copyright 2007 MATLAB 96
  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. Copyright 2007 MATLAB 97
  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) Copyright 2007 MATLAB 98
  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 ] Copyright 2007 MATLAB 99
  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]) Copyright 2007 MATLAB 100
  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 Copyright 2007 MATLAB 101
  102. ĐỒ HỌA TRONG KHÔNG GIAN 3 CHIỀU (tt) Copyright 2007 MATLAB 102
  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. Copyright 2007 MATLAB 103
  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ổ Sau đó trở lại cửa sổ mà ta muốn chèn và nó vào một nơi ta mong muốn. Copyright 2007 MATLAB 104
  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ì − Để 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. Copyright 2007 − Hiệu chỉnh M-FILE: MATLAB 105
  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 Copyright 2007 MATLAB 106
  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) Copyright 2007 MATLAB 107
  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 Copyright 2007 MATLAB 108
  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 Copyright 2007 MATLAB 109
  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‟); Copyright 2007 MATLAB 110
  111. M-FILE, or SCRIPT (tt)  Giải PTB2 bằng M-FILE Copyright 2007 MATLAB 111
  112. M-FILE, or SCRIPT (tt) >> ptb2 Nhap a = 1 Nhap b = -2 Nhap c = 1 Nghiem cua phuong trinh bac 2: 1 1 Copyright 2007 MATLAB 112
  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) Copyright 2007 MATLAB 113
  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ả. Copyright 2007 MATLAB 114
  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: 1 S AB AC 2 . Trong đó, ký hiệu (^) chỉ tích có hƣớng của hai vectơ AB và AC. Copyright 2007 MATLAB 115
  116. M-FILE, or SCRIPT (tt) Trong cửa sổ Editor/Debugger, ta soạn các dòng lệnh nhƣ sau: Copyright 2007 MATLAB 116
  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ự). Copyright 2007 MATLAB 117
  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) Copyright 2007 MATLAB 118
  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 Copyright 2007 MATLAB 119
  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) Copyright 2007 MATLAB 120
  121. Toolbox Symbolic  Định nghĩa biểu thức symbolic Biểu thức Trong MATLAB 1 „1/(2*x^n)‟ 2.xn a b M M = sym(„[a,b;c,d]‟) c d b x3 f dx f = int(„x^3/sqrt(1-x)‟,‟a‟,‟b‟) a 1 x Copyright 2007 MATLAB 121
  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] Copyright 2007 MATLAB 122
  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 Copyright 2007 MATLAB 123
  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) Copyright 2007 MATLAB 124
  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. Copyright 2007 MATLAB 125
  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) Copyright 2007 MATLAB 126
  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 Copyright 2007 MATLAB 127
  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 Copyright 2007 MATLAB 128
  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: Copyright 2007 MATLAB 129
  130. SIMULINK Lấy một khối từ thư viện Copyright 2007 MATLAB 130
  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. Copyright 2007 MATLAB 131
  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 = Copyright 2007 0 2 4 6 8 MATLAB 132
  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 Copyright 2007 MATLAB 133
  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 Copyright 2007 MATLAB 134
  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) Copyright 2007 MATLAB 135
  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. Copyright 2007 MATLAB 136
  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 Copyright 2007 MATLAB 137
  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 Copyright 2007 MATLAB 138
  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 Copyright 2007 MATLAB 139
  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. Copyright 2007 MATLAB 140
  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 Copyright 2007 MATLAB 141
  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 Copyright 2007 MATLAB 142
  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 Copyright 2007 MATLAB 143
  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. Copyright 2007 MATLAB 144
  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 Copyright 2007 MATLAB 145
  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. Copyright 2007 MATLAB 146
  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. Copyright 2007 MATLAB 147
  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. Copyright 2007 MATLAB 148
  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 Copyright 2007 MATLAB 149
  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 Copyright 2007 MATLAB 150
  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. Copyright 2007 MATLAB 151
  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. Copyright 2007 MATLAB 152
  153. CÁC PHÉP TOÁN MA TRẬN  Phép chia: . A\B % 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) Copyright 2007 MATLAB 153
  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 Copyright 2007 MATLAB 154
  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\(L\b) Copyright 2007 MATLAB 155
  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\(L\b)  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 \ (LP\b) Copyright 2007 MATLAB 156
  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, Copyright 2007 MATLAB 157
  158. TẠO GIAO DIỆN Các công cụ hổ trợ giao diện Copyright 2007 MATLAB 158
  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. Copyright 2007 MATLAB 159
  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 Copyright 2007 MATLAB 160
  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 Copyright 2007 MATLAB 161
  162. TẠO GIAO DIỆN (tt)  Align Objects (căn lề các đối tƣợng) . Tools/Align Objects / Copyright 2007 MATLAB 162
  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) Copyright 2007 MATLAB 163
  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. Copyright 2007 MATLAB 164
  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. Copyright 2007 MATLAB 165
  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 Copyright 2007 MATLAB 166
  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) Copyright 2007 MATLAB 167
  168. TẠO GIAO DIỆN (tt)  XÂY DỰNG GIAO DIỆN Start Xác định công việc Draw GUI TEST DESIGN Viết code Test code Stop Copyright 2007 MATLAB 168
  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. Copyright 2007 MATLAB 169
  170. TẠO GIAO DIỆN (tt)  Bài tập: . XÂY DỰNG GIAO DIỆN Tag EditA EditB EditC EditX1 EditX2 a. Control b. Active Giao diện ở chế độ thiết kế và thực thi Copyright 2007 MATLAB 170
  171. TẠO GIAO DIỆN (tt)  Thí dụ 2: xây dựng một giao diện đơn giản sau Copyright 2007 MATLAB 171
  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); Copyright 2007 MATLAB 172
  173. TẠO GIAO DIỆN (tt)  Lƣu thành file giaodien.m >>giaodien % thi hanh  Quan sát kết quả trên hình sau (Lƣu ý các thuộc tính: Name, Position) >>set(fig) % xem thuộc tính của figure trong cửa sổ lệnh Copyright 2007 MATLAB 173
  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. Copyright 2007 MATLAB 174
  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); Copyright 2007 MATLAB 175
  176. TẠO GIAO DIỆN (tt)  Lưu và thi hành file này. Copyright 2007 MATLAB 176
  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], Copyright 2007 'BackgroundColor',[0.65 0.65 0.65]); MATLAB 177
  178. TẠO GIAO DIỆN (tt)  Lưu và thi hành file này. Copyright 2007 MATLAB 178
  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. Copyright 2007 MATLAB 179
  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 Copyright 2007 MATLAB 180
  181. TẠO GIAO DIỆN (tt) Copyright 2007 MATLAB 181
  182. TẠO GIAO DIỆN (tt)  Lưu và thi hành file này. Copyright 2007 MATLAB 182
  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''))']); Copyright 2007 MATLAB 183
  184. TẠO GIAO DIỆN (tt)  Lưu và thi hành file này. Copyright 2007 MATLAB 184
  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. Copyright 2007 MATLAB 185
  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 Copyright 2007 MATLAB 186
  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 = A\B; J = A.\B; K = A/B; L = A./B; M = A.^B; N = A^2,0; O = 2,0.^A Copyright 2007 MATLAB 187
  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 = A\5; J = A.\5 Copyright 2007 MATLAB 188
  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. Copyright 2007 MATLAB 189
  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 Copyright 2007 MATLAB 190
  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. Copyright 2007 MATLAB 191
  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. Copyright 2007 MATLAB 192