Matlab ứng dụng cho ngành hóa học và công nghệ hóa học

doc 97 trang vanle 3260
Bạn đang xem 20 trang mẫu của tài liệu "Matlab ứng dụng cho ngành hóa học và công nghệ hóa học", để 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:

  • docmatlab_ung_dung_cho_nganh_hoa_hoc_va_cong_nghe_hoa_hoc.doc

Nội dung text: Matlab ứng dụng cho ngành hóa học và công nghệ hóa học

  1. ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA HÓA HỌC MATLAB ỨNG DỤNG CHO NGÀNH HÓA HỌC VÀ CÔNG NGHỆ HÓA HỌC HÀ NỘI-2003
  2. 2 Lời giới thiệu MATLAB integrates mathematical computing, visualization, and a powerful language to provide a flexible environment for technical computing. MATLAB includes tools for: Data acquisition Data analysis and exploration Visualization and image processing Algorithm prototyping and development Modeling and simulation Programming and application development
  3. 3 Mục lục 1. Cài đặt và giao diện của matlab 8 1.1. Cấu hình yêu cầu với Matlab 6.0, 6.5 8 1.2. Cài đặt phần mềm 8 1.3. Giao diện 8 2. Những khái niệm cơ sở 9 2.1. Các phím tắt 9 2.2. Lập trình với Matlab 10 2.2.1. Biến trong matlab 11 2.2.2. Nhập dữ liệu 13 2.2.3. Làm việc với workspace 13 2.2.4. Làm việc với command history 14 2.2.5. Làm việc với current directory, quản lý tệp 16 3. Các dạng hiển thị số và các hàm toán học thông dụng 17 3.1. Các dạng hiển thị số 17 3.2. Số phức 18 3.3. Các hàm toán học thông dụng 18 4. Quản lý ma trận dữ liệu 19 4.1. Ma trận 1 chiều 20 4.1.1. Ma trận hàng 20 4.1.2. Ma trận cột 21 4.2. Ma trận nhiều chiều 22 4.3. Các phép toán trong ma trận 22 4.5. Địa chỉ dữ liệu trong ma trận 23 4.6. Các hàm thông dụng 24 6. Quản lý văn bản 26 7. Quản lý thời gian 28 7.1 Các hàm thời gian 28 7.2. Lập lịch các tháng 29 7.3. Hiển thị ngày giờ hiện tại 29 7.3. Tính khoảng thời gian 30 8. Cấu trúc vòng lặp và điều kiện 31
  4. 4 8.1. Vòng lặp for 31 8.2. Vòng lặp while 32 8.3. Cấu trúc điều kiện if-else-end 32 8.4. Cấu trúc switch-case 33 9. Phân tích dữ liệu và các hàm chuyển đổi Fourier 33 10. Tạo và giải hệ phương trình tuyến tính 37 11. Đa thức và các hàm nội suy 39 11.1. Các phép toán đối với đa thức 39 11.1.1. Cộng, trừ hai đa thức 40 11.1.2. Nhân, chia hai đa thức 40 11.1.3. Tính giá trị đa thức 41 11.1.4. Đạo hàm và tích phân 41 11.1.5. Nghiệm của phương trình đa thức 42 11.2. Các phép nội suy dữ liệu 42 12. Hàm số 48 12.1. Khảo sát hàm số 48 * Vẽ đồ thị hàm số: 48 * Xác định các cực trị trong lân cận hẹp 48 12.2. Tìm giao điểm của đồ thị hàm số với trục hoành và với đồ thị hàm số khác 49 12.3. Đạo hàm 49 12.4. Tích phân 49 13. Hộp công cụ 50 13.1. Giới thiệu các hộp công cụ 50 13.2. Hộp công cụ toán học 51 13.1.1. Biến tượng trưng 51 * Khái niệm 51 * Đổi tên biến 52 * Hàm double chuyển một hằng tượng trưng thành kiểu số 53 13.1.2. Các phép toán trên biểu thức tượng trưng 53 * Các hàm số, ma trận sử dụng ký tự +, -, *, /, ^ để thực hiện các phép toán cộng trừ, nhân, chia, mũ hóa 53 * Hàm compose(f,g)=f(g(x)) kết hợp hai hàm số và finverse(g) xác định hàm ngược của g 54 13.1.3. Đạo hàm và tích phân 54 13.1.4. Giải các phương trình tượng trưng 57 14. Đồ họa trong matlab 60 14.1. Đồ họa trong không gian hai chiều 60 14.1.1. Các hàm vẽ đồ thị 60 14.1.2. Các tùy chọn 62 14.1.3. Hệ trục tọa độ, nhãn, lưới, hộp chứa trục, chú thích 63 14.2. Đồ họa trong không gian 3 chiều 66 14.2.1. Đồ thị bề mặt và lưới 66 14.2.3. Các tùy chọn, hệ trục tọa độ, nhãn, lưới, hộp chứa trục, chú thích 69
  5. 5 14.2.4. Điều khiển màu và ánh sáng 72 Các khối lệnh cơ bản 74 Các lệnh đa năng 74 Quản lý hàm và lệnh 74 Quản lý biến và không gian làm việc 75 Kiểm soát command window 75 Làm việc với file và môi trường hoạt động 75 Khởi động và thoát chương trình MATLAB 76 Các ký tự đặc biệt và toán tử 76 Các hàm logic 77 Xây dựng và gỡ rối ngôn ngữ lập trình 77 MATLAB là một ngôn ngữ lập trình 77 Điều khiển luồng (Control Flow) 77 Nhập dữ liệu (Interactive Input) 77 Lập trình hướng đối tượng (Object-Oriented Programming) 78 Gỡ rối 78 Các ma trận cơ sở và thao tác với ma trận (Elementary Matrices and Matrix Manipulation) 78 Ma trận cơ sở và mảng (Elementary Matrices and Arrays) 78 Hằng số và biến đặc biệt (Special Variables and Constants) 79 Ngày tháng và thời gian (Time and Dates) 79 Thao tác với ma trận (Matrix Manipulation) 79 Các hàm vector (Vector Functions) 80 Các ma trận chuyên dụng (pecialized Matrices) 80 Các hàm toán học cơ sở (Elementary Math Functions) 80 Các hàm toán học chuyên dụng (Specialized Math Functions) 81 Chuyển đổi hệ trục tọa độ (Coordinate System Conversion) 81 Hàm ma trận và đại số học tuyến tính (Matrix Functions - Numerical Linear Algebra ) 81 Phân tích ma trận (Matrix Analysis) 81 Các phương trình tuyến tính (Linear Equations) 82 Giá trị duy nhất và giá trị riêng (Eigenvalues and Singular Values) 82 Các hàm ma trận (Matrix Functions) 82 Các hàm cấp dưới (Low Level Functions) 82 Phân tích dữ liệu và hàm chuyển đổi Fourier (Data Analysis and Fourier Transform Functions) 82 Sai phân hữu hạn (Finite Differences) 83 Sự tương quan (Correlation) 83 Lọc và xếp trật tự (Filtering and Convolution) 83 Các hàm nội suy và đa thức (Polynomial and Interpolation Functions) 84 Đa thức (Polynomials) 84 Nội suy dữ liệu (Data Interpolation) 84
  6. 6 Các phương pháp toán học không tuyến tính và các hàm chức năng (Function Functions - Nonlinear Numerical Methods) 85 Hàm ma trận rời rạc (Sparse Matrix Functions) 85 Các ma trận rời rạc cơ sở (Elementary Sparse Matrices) 85 Chuyển đổi giữa ma trận rời rạc và ma trận đầy đủ (Full to Sparse Conversion) 85 Làm việc với dữ liệu khác 0 của ma trận rời rạc (Working with Nonzero Entries of Sparse Matrices) 85 Hình ảnh ma trận rời rạc 86 Thuật toán xắp xếp (Reordering Algorithms) 86 Quy tắc, Số điều kiện, Thứ tự (Norm, Condition Number, and Rank) 86 Phương thức rời rạc của các phương trình tuyến tính (Sparse Systems of Linear Equations) 86 Giá trị duy nhất và giá trị riêng rời rạc (Sparse Eigenvalues and Singular Values) 86 Các hàm tạo âm thanh (Sound Processing Functions) 87 Các hàm âm thanh chung (General Sound Functions) 87 Các hàm âm thanh chuyên dụng (SPARC station-Specific Sound Functions) 87 Hàm âm thanh với format wav (.WAV Sound Functions) 87 Các hàm xâu ký tự (Character String Functions) 87 Chung (General) 87 Chuyển đổi giữa xâu và hàm (String to Function Handle Conversion) 87 Thao tác với xâu (String Manipulation) 87 Chuyển đổi giữa xâu và số (String to Number Conversion) 88 Chuyển đổi cơ số (Radix Conversion) 88 Các hàm vào/ra file (File I/O Functions) 88 File Opening and Closing 88 Dữ liệu ngôn ngữ máy (Unformatted I/O) 88 Dữ liệu đã format (Formatted I/O) 88 Vị trí file (File Positioning) 88 Chuyển đổi xâu (String Conversion) 88 Vào ra file chuyên dụng (Specialized File I/O) 89 Các hàm bitwise (Bitwise Functions) 89 Các hàm cấu truc (Structure Functions) 89 Các hàm đối tượng Matlab (MATLAB Object Functions0 89 Giao diện Malab với Java (MATLAB Interface to Java) 89 Các hàm mảng tế bào (Cell Array Functions) 90 Các hàm mảng nhiều chiều (Multidimensional Array Functions) 90 Đồ thị và hình ảnh dữ liệu (Plotting and Data Visualization) 90 Đồ thị và biểu đồ cơ bản (Basic Plots and Graphs) 90 Vẽ đồ thị 3 chiều (Three-Dimensional Plotting) 90 Đồ thị cắt lớp thể tích (Volumetric slice plot) 91 Chú thích và đường lưới hệ trục đồ thị (Plot Annotation and Grids) 91 Đồ thị bề mặt, lưới, đường đồng mức (Surface, Mesh, and Contour Plots) 91 Hình ảnh khối (Volume Visualization) 91
  7. 7 Thiết lập phạm vi (Domain Generation) 92 Điều khiển góc nhìn (View Control) 93 Ánh sáng (Lighting) 93 Tính trong suốt (Transparency) 93 Cách tạo màu (Color Operations) 94 Bản đồ màu (Colormaps) 94 In ấn (Printing) 94 Kênh điều khiển chung và đồ họa (Handle Graphics, General) 94 Làm việc với dữ liệu ứng dụng (Working with Application Data) 95 Tạo kênh điều khiển đối tượng và đồ họa (Handle Graphics, Object Creation) 95 Điều khiển cửa sổ hình ảnh và đồ họa 95 Điều khiển đồ họa và hệ trục 95 Thao tác với đối tượng 95 Tác động người sử dụng đưa vào (Interactive User Input) 96 Miền quan tâm (Region of Interest) 96 Giao diện đồ họa (raphical User Interfaces) 96 Hộp thoại (Dialog Boxes) 96 Phát triển giao diện người sử dụng (User Interface Development) 96 Vào ra cổng nối tiếp (Serial Port I/O) 96 Tạo một đối tượng cổng nối tiếp 96 Viết và đọc dữ liệu (Writing and Reading Data) 96 Định hình và trả lại thuộc tính (Configuring and Returning Properties) 97 Thay đổi trạng thái (State Change) 97 Lệnh đa năng (General Purpose) 97
  8. 8 1. Cài đặt và giao diện của matlab 1.1. Cấu hình yêu cầu với Matlab 6.0, 6.5 Để có thông tin mới nhất về yêu cầu của hệ thống chúng ta có thể vào MathWorks Web site (www.mathworks.com), system requirements page. Matlab là một phần mềm có yêu cầu khá cao với hệ thống máy tính, để chạy phần mềm này máy tính cần đảm bảo những yếu tố tối thiểu sau: Bộ xử lý: Pentium, Pentium Pro, Pentium II, Pentium III, Pentium IV, or AMD Athlon Hệ điều hành: Microsoft Windows 95, Windows 98 (original and Second Edition), Windows NT 4.0 (with Service Pack 5 for Y2K compliancy) or Windows 2000 Ổ CD-ROM để cài đặt. Tối thiểu 64 MB RAM đối với Windows 98, NT 4.0 và 2000; nên có 128 MB RAM. Đối với Window XP nên có 256 MB RAM Không gian ổ cứng đòi hỏi tùy thuộc kích thước partition và lựa chọn của bạn. Cài đặt đầy đủ các lựa chọn phần mềm Matlab 6.5 chiếm khoảng 900 MB ổ cứng Card hình tối thiểu 8 bit và màn hình hiển thị tối thiểu 256 màu Những phần bổ trợ nên có Card tăng tốc độ đồ họa Printer Microsoft Word 7.0 (Office 95), 8.0 (Office 97), or Office 2000 is required to run the MATLAB Notebook. Để tạo các MEX-files của riêng bạn cần có: Compaq Visual Fortran 5.0 or 6.1, Microsoft Visual C/C++ version 5.0 or 6.0, Borland C/C++ version 5.0, 5.02, Borland C++Builder version 3.0, 4.0, or 5.0, Lcc 2.4 (bundled with MATLAB) Adobe Acrobat Reader để in các tài liệu do Matlab cung cấp trên mạng. 1.2. Cài đặt phần mềm 1.3. Giao diện Sau khi cài đặt Matlab lần đầu tiên chạy chương trình, phần mền hiển thị Hình 1: Giao diện mặc định của Matlab
  9. 9 giao diện mặc định như hình 1. (Desktop layout default) Trên của sổ chính có tiêu đề MATLAB chứa 3 cử sổ nhỏ ở trạng thái gắn dính (dock) với cửa sổ chính. Nếu chúng ta muốn di chuyển tự do các cửa sổ này chúng bấm vào nút trên thanh tiêu đề các cửa sổ nhỏ hoặc bấm giữ chuột trái vào thanh tiêu đề và kéo thả. Khi các cửa sổ tự do chúng có thêm thanh menu (hình 2) để các cửa sổ trở về trạng thái như cũ chúng ta vào View Dock (Workspace hoặc current directory ). Matlab có 6 kiểu giao diện khác nhau: Default, Command Window Only, Single, Short History, Tail History, Five Panel (Hinh 3). Hình 2: Cửa sổ workspace tự do Hình 3: Các kiểu giao diện của Matlab 2. Những khái niệm cơ sở 2.1. Các phím tắt ↑ hoặc Ctrl+p Gọi lại lệnh vừa thực hiện trước đó ESC hoặc ↓ Xóa lệnh vừa gọi → hoặc Ctrl+f Chuyển con trỏ sang phải một ký tự ← hoặc Ctrl+b Chuyển con trỏ sang trái một ký tự Ctrl+l hoặc Ctrl+← Chuyển con trỏ sang trái một từ Ctrl+r hoặc Ctrl+→ Chuyển con trỏ sang phải một từ Ctrl+a hoặc Home Chuyển con trỏ về đầu dòng Ctrl+k Xóa từ vị trí con trỏ đến cuối dòng Ctrl+break Kết thúc vòng lặp Shift+→ hoặc ← Để chọn đoạn văn bản cần xóa hay copy Lệnh hệ thống clc Xóa cửa sổ dòng lệnh clf Xóa cửa sổ đồ họa
  10. 10 computer Đưa ra tên loại máy tính Ctr-c Dừng chương trình khi máy ở tình trạng vòng lặp không kết thúc demo Xem các chương trình mô tả khả năng của matlab exit, quit Thoát Matlab help Lệnh nhận trợ giúp input Nhập dữ liệu từ bàn phím load Tải các biến đã lưu trong 1 file vào không gian làm việc Pause Tạm ngừng chương trình save Lưu giữ không gian làm việc 2.2. Lập trình với Matlab Matlab là phần mềm hỗ trợ tính toán và hiển thị mạnh với các bộ lệnh thuộc nhiều lĩnh vực: toán học, công nghệ thông tin, công nghệ hóa học, thống kê kế toán, kinh tế và không ngừng được cập nhật. Matlab giải quyết các vấn đề toán học từ đơn giản tới phức tạp nhất. Sau khi khởi động chương trình trong cửa sổ chính gồm 3cửa sổ nhỏ: Workspace, Command History, Command Window. * Các phép tính thông dụng và các ký hiệu trong Matlab Ký Phép tính Ví dụ hiệu + Cộng 2+3 - Trừ 23-56 * Nhân số, ma trận 12*67 ^ Lũy thừa 2^2=4 \ Chia ngược 45\23=0,5111 / Chia thuận 23/45=0,5111 : Dấu hai chấm ( ) [ ] {} Các dấu ngoặc sử dụng trong phép toán . Chấm thập phân Sự tiếp tục , Dấu phẩy ; Chấm phẩy % Viết chú thích sau dấu % ! Chấm than ' Chuyển vị và nháy đơn .' Chuyển vị liên hợp = Chuyển đổi == Dấu bằng
  11. 11 Lớn hơn >= lớn hơn hoặc bằng > VD1: Tính trung bình các bình phương của: 12, 17, 23 Tại Command Window ta viết các lệnh như sau: >> a=12 Hình 4 a = 12 >> b=17 b = 17 >> c=23 c = 23 >> kq=(a^2+b^2+c^2)/3 kq = 320.6667 >> Tại cửa sổ Workspace và Commad History ta thu được kết quả như Hình 4 và Hình 5 Cửa sổ Workspace được gọi là không Hình 5 gian làm việc của Matlab, nó chứa các biến đang sử dụng (a, b, c, kq). Cửa sổ history ghi lại toàn bộ quá trình thao tác của chúng ta. 2.2.1. Biến trong matlab * Các phiên bản trước 6.5 các biến, tên hàm và hàm con, tên trường cấu trúc (structure field), M-file, MEX-file và MDL-file giới hạn 31 ký tự. Từ phiên bản Matlab 6.5 các tên này có tối đa 63 ký tự. Chúng ta có thể kiểm tra bằng hàm: >>namelengthmax ans =
  12. 12 63 Nếu chúng ta đặt biến lớn hơn 63 ký tự Malab tự động bỏ các ký tự từ 64 trở đi. * Các quy định trong đặt tên biến Quy định Ví dụ Tên biến phân biệt chữ hoa và chữ X, x là hai biến khác nhau thường Tên biến phải bắt đầu là chữ sau đó có a23_er4 đúng thể là số hoặc gạch dưới và không sử dụng 1233smds sai các ký tự đặc biệt khác a#sf23 sai Tên biến phải viết liên tục Qwer12 đúng qwqe 45dr sai * Ngoài các biến trong quá trình quá trình lập trình chúng ta đưa vào, Matlab còn có các biến đặc biệt. Nếu chúng ta đặt tên biến trùng với biến đặc biệt thì khi Matlab sử dụng đến biến đó giá trị biến của chúng ta sẽ bị thay đổi hoặc giá trị của biến đặc biệt không được sử dụng, tới khi chúng ta xóa biến do chúng ta đặt trùng. Tên biến đặc biệt Giá trị ans Kết quả phép toán eps Chỉ độ chính xác của các phép tính toán (2.2204e-016 đơn vị) flops Số của phép toán số thực i và j i = j = (-1)^(1/2) inf Để chỉ số vô cùng lớn (a/0, a khác 0) NaN hoặc nan Chỉ số không xác định (0/0) nargin Số các đối số được đưa vào hàm đang sử dụng narout Số các đối số hàm đưa ra pi 3.1416 realmax Số lớn nhất của số thực (1.7977e+308) realmin Số nhỏ nhất của số thực (2.2251e-308) Các lệnh đối với các biến trong workspace clear, clear variables, Xóa toàn bộ biến trong không gian làm việc clear global Xóa biến toàn bộ clear functions xóa các M-, MEX- function clear biến Xóa từng biến riêng biệt clear biến1 biến2 biến3 Xóa các biến chọn clear all Xóa tất cả các biến, hàm, liên kết MEX who Hiển thị các biến định trong workspace whos Hiển thị các biến cùng các thông tin kích thước, số byte, kiểu mảng exist (‘a’) Kiểm tra xem ‘a’ là biến được định nghĩa hay hàm được định nghĩa, cho kết quả từ 0-8. Để có thêm thông tin chúng ta thực hiện lệnh: >> help clear
  13. 13 >> help who 2.2.2. Nhập dữ liệu Để nhập giữ liệu cho một chương trình chúng ta có thể nhập trực tiếp trong quá trình viết chương trình. Tuy nhiên, điều đó có thể gây khó khăn trong lưu trữ và quản lý dữ liệu. Matlab cho phép nhập dữ liệu từ một file văn bản format dạng *.txt. Matlab quản lý và xử lý dữ liệu dạng ma trận. Khi dùng phần mềm notepad, wordpad, để lập file dữ liệu chúng ta chú ý giữa các số của cột cách nhau ít nhất 1 dấu cách (chúng ta cũng có thể thay bằng dấu ‘,’ hoặc Tab hoặc theo kiểu tự chọn, dùng enter để phân cách giữa các hàng. Ví dụ chúng ta vào File Import data và nhập file dữ liệu 5bien.txt được soạn thảo như sau: a b c d e 12 23 234 34 345 23 23 34 23 12 23 123 234 234 23 Matlab xắp xếp lại như hình 6 Hình 6 Trên Hình 6 chúng ta chọn next từ đó có hai cách đặt biến cho dữ liệu Dạng 1: có 3 biến, biến data là ma trận 5x5 và 2 biến còn lại là textdata = [a b c d e]và colheaders=[a b c d e] dạng matran hàng 1x5. Dạng 2: có 5 biến cột a=[12;23;12;123;23], b=[23;23;23;234;0], c=[234;34;0;234;0], d=[34;24;0;0;0], e=[345;0;0;0;0] dạng ma trận cột 5x1 2.2.3. Làm việc với workspace Nhấp chuột phải vào 1 biến trong workspace ta nhận được menu như hình 7
  14. 14 Hình 7 * Open dùng để biết và thay đổi các thuộc tính của biến Ví dụ biến data khi mở ta có các thuộc tính sau Biến data là một ma trận 5 hàng năm cột ta có thể thay đổi số hàng (ô size), số cột (ô by) và thay đổi giá trị các số trong ma trận. Kiểu format các số trong ma trận trên dạng shotG, chúng ta sẽ tìm hiểu các dạng format số trong phần sau. * Trong mục Graph là các dạng biểu diễn đồ thị 2D, 3D, của biến data. * Import data mở thêm các biến lưu trong file dữ liệu *.mat. Chúng ta lưu ý các biến mới mở cùng tên sẽ ghi đè lên các biến hiện thời trong cửa sổ workspace. * Workspace có thể được save lại dưới dạng file *.mat của 1 số biến lựa chọn hoặc tất cả các biến trong workspace. Khi cần sử dụng, từ menu của workspace chúng ta chọn import data và mở lại file này. 2.2.4. Làm việc với command history Cửa sổ command history lưu trữ các lệnh được thực hiện ở command window. Để thực hiện lại một lệnh hay nhóm lệnh trước đó chúng ta có thể kéo thả 1 lệnh hay một nhóm lệnh từ command history vào trong command window. Chúng ta cũng có thể kéo 1 lệnh hay một nhóm lệnh trong command window vào dòng lệnh hiện thời để thực hiện lại các lệnh đó. Từ command history nếu một nhóm lệnh nào đó phải sử dụng nhiều lần chúng ta có thể save chúng dưới dạng M-file (Create M-File). Khi cần thực hiện lại nhóm lệnh này chúng ta chỉ việc đánh tên M-file và dấu nhắc lệnh và bấm enter. Giả sử trong trong command window chúng ta Hình 8 thực hiện các lệnh >> a=1:10 a =
  15. 15 Columns 1 through 10 1 2 3 4 5 6 7 8 9 10 >> a(1)=[ ] a = Columns 1 through 9 2 3 4 5 6 7 8 9 10 >> a(3)=[ ] a = Columns 1 Column 8 2 3 5 6 7 8 9 10 >> b=a*3+5 b = Columns 1 through 8 11 14 20 23 26 29 32 35 Khi đó trong cửa sổ command history các lệnh được lưu như sau a=1:10 a(1)=[ ] a(3)=[ ] b=a*3+5 Khi 4 lệnh này được save thành M-File có tên là “nhomlenh.m”, để thực hiện lại 4 lệnh này ta chỉ việc đánh lệnh: >>nhomlenh a = Columns 1 through 10 1 2 3 4 5 6 7 8 9 10 >> a(1)=[ ] a = Columns 1 through 9 2 3 4 5 6 7 8 9 10 >> a(3)=[ ] a = Columns 1 Column 8 2 3 5 6 7 8 9 10 >> b=a*3+5 b = Columns 1 through 8 11 14 20 23 26 29 32 35 Như vậy chúng ta có thể sử dụng M-File như một chương trình con hay hàm con, M- file phải có phần mở rộng là “m”. Matlab đưa vào một số hàm ứng dụng trong M-File để có giao tiếp tốt hơn với người lập trình:
  16. 16 Hàm Chức năng disp (ans) Hiển thị các kết quả mà không hiển thị tên biến echo on, echo off, echo file on, Điều khiển cửa sổ lệnh lặp lại các lệnh của M- echo file off, echo on all, echo off all File Input M-File nhận dữ liệu từ bàn phím Keyboard Trao quyền điều khiển tạm thời cho bàn phím >>return dừng lệnh keaboard, M-File tiếp tục chạy các lệnh Pause Dừng chương trình tới khi phím bất kỳ được bấm pause(n) Dừng n giây waitforbuttonpress Dừng tới khi phím chuột hoặc bàn phím được bấm 2.2.5. Làm việc với current directory, quản lý tệp Current directory là nơi lưu trữ các file dữ liệu và M-File mà Malab xử dụng như địa chỉ đầu tiên khi tìm kiếm các M-File trong các thư mục có trong đường dẫn của Matlab. Bấm chuột phải ta được menu như hình 9, với M-File ta có thể chọn Open để mở, sửa chữa, với các file *.mat khi ta chọn open các biến của file được đưa vào không gian làm việc hiện thời của Matlab. Trong quá trình làm việc các file dữ liệu của chúng ta có thể nằm ở thư mục bất kỳ để đưa về Current directory chúng ta bấm vào nút để chọn thư mục chứa file cần sử dụng. Hình 9 Một chú ý đó là khi chúng ta sử dụng một hàm, thủ tục tự tạo dạng M-File như một lệnh trong command history Matlab chỉ tìm kiếm file chứa lệnh trong đường dẫn đã được đặt sẵn. Vì vậy, file của chúng ta có thể đang tồn tại nhưng Matlab không nhận ra nếu như nó không nằm trong đường dẫn đã đặt. Để đặt đường dẫn cho thư mục chứa file cần sử dụng, chúng ta vào file Set Path Matlab sẽ hiển thị cửa sổ Set Part (Hình 10) trong đó hiển thị đầy đủ các folder đã được đặt đường dẫn. Chúng ta chọn Hình 10
  17. 17 Add Folder , sau đó chọn folder chứa các file cần sử dụng rồi chọn Save Close. Bài tập: 1. Viết bảng dữ liệu sau dưới dạng file *.txt Nguyelieu Sanpham Thơigianluu A(mol/L) (Amol/L) (s) 2.00 0.65 300 2.00 0.92 240 2.00 1.00 250 1.00 0.56 110 1.00 0.37 360 0.48 0.42 24 0.48 0.28 200 0.48 0.20 560 a) Nhập dữ liệu theo hai dạng, 8x3 và 3 vec tơ cột, lưu giá trị các biến. b) Tính tổng theo hàng theo cột. c) Lưu các lệnh dưới dạng M-file và thực lại các tính toán theo mục b. 2. Viết M-file tính cho phép nhập mảng 1 chiều x để tính các giá trị y= a*x^3+b*x^2+c*x+d với điều kiện a,b,c,d,x nhập từ bàn phím. Đặt tên M-file là tgtrb3 3. Cut trtrb3 tử thư mục work trong matlab ra ngoài ổ C và đặt đường dẫn cho matlab truy cập tới địa chỉ đó. 3. Các dạng hiển thị số và các hàm toán học thông dụng 3.1. Các dạng hiển thị số Trước hết chúng ta xét một số vô hạn không tuần hoàn 2^(1/2), theo mặc định Matlab hiển thị dạng shortG: a=2^(1/2) a=1.4142 Để hiển thị giá trị của a Matlab có một số khuôn dạng sau: Định dạng Lệnh Hiển thị a Hiển thị số 3-2i short format short 1.4142 3.0000 - 2.0000i shortG format short g 1.4142 3 - 2i shortE format short e 1.4142e+000 3.0000e+000 -2.0000e+000i long format long 1.41421319796954 3.00000000000000 - 2.00000000000000i longG format long g 1.41421319796954 3 - 2i longE format long e 1.414213197969543e+000 3.000000000000000e+000 - 2.000000000000000e+000i
  18. 18 hex format hex 3ff6a09e04ad9cb8 4008000000000000 c000000000000000i bank format bank 1.41 3.00 + format + + + rational format 1393/985 3 - 2i rational Chúng ta phải hiểu rằng Matlab luôn tính toán với cấp độ chính xác nhất có thể, khi biến a hiển thị dạng shortG: a=2^(1/2)= 1.4142 không có nghĩa là giá trị của a dừng lại ở 4 số sau dấu phẩy, theo ngầm định matlab tính toán với hàng trăm số sau dấu phẩy của a. Để thay đổi dạng hiển thị số mặc định chúng ta vào File Preferences Array Editor sau đó lựa chọn dạng format phù hợp. Ngoài ra Preferences là mục cho phép chúng ta thay đổi nhiều giao diện giữa người lập trình và phần mềm. 3.2. Số phức Malab có hai biến đặc biệt đó là i=j= 1 dùng cho phần ảo của số thực, vai trò của i và j là tương tự nhau. Ưu điểm đặc biệt của Matlab đó là tính toán với số phức tương tự như số thực. Trong toán học số phức có thể biểu diễn dưới dạng sau: A,θ=A.eiθ=a+bi iθ Trong đó A,θ và A.e là các dạng biểu diễn ở tọa độ cực. A=a 2 b 2 , θ = arc[tan(b/a)], a=A cosθ, b=A sinθ * Các lệnh chuyển hệ trục tọa >> c=3-2i c = 3.0000 - 2.0000i Lệnh Kết quả Ý nghĩa real(c) 3 Xác định phần thực imag(c) -2 Xác định phần ảo abs(c) 3.6056 Tính argument angle(c) -0.5880 Tính góc số phức theo radian conj(c) 3.0000 + 2.0000i Số phức liên hợp 3.3. Các hàm toán học thông dụng acos(x) Hàm ngược của hàm cosin acosh(x) Hàm ngược của hàm hypecbolcosin asin(x) Hàm ngược của hàm sin asinh(x) Hàm ngược của hàm hypecbolsin atan(x) Hàm ngược của hàm tang atan2(x,y) Hàm ngược tang của thương số phần thực x chia cho phần thực y
  19. 19 atanh(x) Hàm ngược của hàm hypepoltang cos(x), sin(x), tan(x), cosh(x), sinh(x), tanh(x) log(x) Logarit tự nhiên log10(x) Logarit cơ số 10 exp(x) e^x sqrt(x) Căn bậc 2 của x fix(x) Xấp xỉ 0 ceil(x) Xấp xỉ dương vô cùng floor(x) Xấp xỉ âm vô cùng gdc(x,y) Ước số chung lớn nhất của 2 số nguyên x,y lcm(x,y) Bội số chung nhỏ nhất của hai số nguyên x,y rem(x,y) Phần dư của phép chia x cho y round(x) Phần nguyên của x sign(x) Trả về dấu của x Bài tập 1. Nhập dữ liệu từ file *.txt có nội dung như bảng sau: a. Tính các giá trị: 1000 C 1 x A a 2ln x A 1000 C 1 X A A A V CA b) Viết M-file chuyển mảng v và C A thành 1 mảng số phức ‘c’ với các phần tử cột v là phần thực, các phần tử tương ứng phần CA là phần ảo 1,5 10 c) Thực hiện các lệnh real(c) imag(c) 2,5 50 abs(c) angle(c) 4,0 100 6,5 200 20 500 4. Quản lý ma trận dữ liệu Matlab làm việc với các đại lượng vô hướng, vectơ, và ma trận. Đại lượng vô hướng chỉ đơn giản là ma trận 1x1, và vectơ chính là ma trận 1 cột hoặc 1 dòng. Tất cả các dạng dữ liệu này Matlab kiểm soát dưới dạng ma trận.
  20. 20 Phần này sẽ giới thiệu các thao tác và các hàm cơ bản với ma trận. 4.1. Ma trận 1 chiều 4.1.1. Ma trận hàng Để tìm hiểu cách thiết lập và xử lý dữ liệu ma trận 1 chiều chúng ta xét ví dụ: VD2: Trong quá trình phân tích Amoni theo phương pháp quang học chúng ta thu được dữ liệu về đường chuẩn như sau: Nồng độ (ppm) 0.4 0.8 1.2 1.6 2 Độ hấp thụ 0.125 0.220 0.309 0.399 0.497 Hãy vẽ đồ thị. Chúng ta cần 2 biến dưới dạng 2 ma trận hàng để quản lý dữ liệu của nồng độ và độ hấp thụ. Dữ liệu nồng độ là dữ liệu có quy luật do đó chúng ta sử dụng lệnh sau: >>nd=linspace(0.4,2,5) nd = 0.4000 0.8000 1.2000 1.6000 2.0000 >>ht=[0.125 0.220 0.309 0.399 0.497] ht = 0.1250 0.2200 0.3090 0.3990 0.4970 >>plot(ht,nd) >>xlabel(‘do hap thu’) >>ylabel(‘nong do’) linspace là câu lệnh tạo ma trận hàng cú pháp như sau linspace(a,b,c) trong đó a là giá trị đầu, b là giá trị cuối và c là số giá trị nằm trong đoạn [a, b] Dữ liệu về độ hấp thụ không có quy luật do đó chúng ta phải nhập từng giá trị, khi chúng ta nhập dữ liệu phải chú ý giữa các giá trị phải cách nhau một dấu cách hoặc dấu ‘,’, các giá trị phải nằm trong dấu ngoặc vuông [ ]: Ngoài 2 cách tạo ma trận hàng như trên chúng ta có thể tạo các cách sau: * Tạo ma trận hàng mà các phần tử liên tiếp cách nhau 1 đơn vị >>x=0.4:6 x = 0.4000 1.4000 2.4000 3.4000 4.4000 5.4000 * Tạo ma trận hàng mà các phần tử liên tiếp cách nhau một giá trị xác định >> x=0.1:0.4:2 x = 0.1000 0.5000 0.9000 1.3000 1.7000 * Chúng ta có thể sử dụng các phép toán trong tạo ma trận >> x=(0.1:0.4:2)*sin(pi/4) x = 0.0707 0.3536 0.6364 0.9192 1.2021
  21. 21 * Tạo ma trận hàng theo hàm logarit >> x=logspace(1, 3, 3) x = 10 100 1000 Tạo ma trận hàng từ 101 đến 103 chứa 3 giá trị. 4.1.2. Ma trận cột Khi nhập một ma trận hang giữa các dữ liệu trong ma trận ta sử dụng dấu cách hoặc dấu phẩy, để nhập 1 ma trận cột chúng ta phân cách dữ liệu bằng dấu ‘;’ ví dụ: >> b=[1;2;3] b = 1 2 3 Ngoài ra chúng ta có thể dùng toán tử chuyển vị để chuyển từ ma trận hàng thành ma trận cột: >>c=x’ c = 10 100 1000 >>c=x.’ c= 10 100 1000 Chúng ta có hai phép toán chuyển vị là (’) và (.’) hai phép chuyển vị này chỉ khác nhau khi dữ liệu là số phức. Toán tử (.’) chỉ đơn giản là chuyển vị ma trận, còn toán tử (‘) chuyển cả các số phức trong ma trận nguồn thành số phức liên hợp: >>d=c+b*i d = 10 + 1i 100 + 2i 1000 + 3i >> e=d' e = 10 - 1i 100 - 2i 1000 - 3i >> e=d.' f = 10 + 1i 100 + 2i 1000 + 3i
  22. 22 4.2. Ma trận nhiều chiều Khi nhập một ma trận nhiều chiều ngoài việc nhập dữ liệu từ file chúng ta có thể nhập dữ liệu từ bàn phím. Trong chúng ta phải chú ý giữa các dữ liệu trong một hàng phải cách nhau một dấu ‘,’ hoặc dấu cách, giữa các hàng phải cách nhau bởi dấu ‘;’ hoặc enter. >>g=[1 2 3;4 5 6; 7 8 9] g = 1 2 3 4 5 6 7 8 9 >>g=[1 2 3 4 5 6 7 8 9] g = 1 2 3 4 5 6 7 8 9 Matlab cung cấp 2 hàm cho phép gọi ma trận chỉ gồm các phần tử 0 hoặc 1: >>h=ones(3,2) h = 1 1 1 1 1 1 >> k=zeros(3,4) k = 0 0 0 0 0 0 0 0 0 0 0 0 Ta cũng có thể tạo ma trận 0 hay 1 theo kích thước ma trận khác: >>m=ones(size(g)) m = 1 1 1 1 1 1 1 1 1 Về mặt cú pháp khi ta viết ones(n) hay zeros(n) nghĩa là tạo ma trận vuông n chiều còn khi viết ones(n,m) hay zeros(n,m) nghĩa là tạo ma trận n hàng m cột. 4.3. Các phép toán trong ma trận * Nhân ma trận .* Nhân ma trận theo từng vị trí tương ứng hai ma trận ^ Lũy thừa ma trận .^ Lũy thừ ma trận theo từng vị trí tương ứng hai ma trận \ Chia trái ma trận / Chia phải ma trận
  23. 23 ./ and .\ Chia ma trận theo từng vị trí tương ứng hai ma trận ' Chuyển vị chuyển liên hợp .' Chuyển vị không chuyển liên hợp Để hiểu rõ hơn giữa phép toán sử dụng dấu (.) và không sử dụng ta hãy xét ví dụ sau >> n n = 2 2 2 2 2 2 2 2 2 >> g g = 1 2 3 4 5 6 7 8 9 >> h=n.*g h = 2 4 6 8 10 12 14 16 18 >>k=n*g k = 24 30 36 24 30 36 24 30 36 Các phép toán sử dụng dấu ‘.’ thực hiện trên các vị trí tương ứng của hai ma trận h(i,j)=n(i,j)*g(i,j) trong đó i chỉ vị trí hàng, j chỉ vị trí cột. Các phép toán không sử dụng dấu ‘.’ tuân theo quy định toán học về định thức ma trận. h(i, j) n(i,x)*g(x, j) x 1:3 4.5. Địa chỉ dữ liệu trong ma trận Khi truy xuất tới một phần tử trong ma trận chúng ta sử dụng chỉ số hàng và chỉ số cột: >>h(2,2) ans= 10 >>h(2,3)=10 % gán dữ liệu ở hàng 2 cột 3 của ma trận h bằng 10 h = 2 4 6 8 10 10 14 16 18 >>h(3,:)=10 % gán tất cả các giá trị hàng thứ 3 bằng 10, dấu ‘:’ chỉ tất cả các hàng hoặc cột
  24. 24 h = 2 4 6 8 10 10 10 10 10 >>h(:,4)=0 % tăng thêm cột thứ 4 bằng 0 h = 2 4 6 0 8 10 10 0 10 10 10 0 >> h(:,3)=[] % bớt cột thứ 3 của ma trận h h = 2 4 0 8 10 0 10 10 0 >> x x = 10 100 1000 >> h(2,:)=x % thay hàng 2 bằng ma trận hàng x h = 2 4 0 10 100 1000 10 10 0 Chúng ta có quy định chung về địa chỉ của ma trận như sau: h(m,n) Ma trận con 1 phần tử ở hàng m cột n của ma trận h h(:,n) Ma trận con là ma trận cột chứa các phần tử ở cột n của ma trận h h(m,:) Ma trận con là ma trận hàng chứa các phần tử ở hàng m của ma trận h h(:) Ma trận cột chứa tất cả các phần tử trong ma trận h bằng cách nối liên tiếp các cột lại với nhau h(m) Chỉ phần tử thứ m trong ma trận h theo cách đếm liên tiếp từ trên xuống dưới, từ trái qua phải >>h(8) 1 4 7 ans = 2 5 8 1000 Hình: 12: Thứ tự trong ma trận 3 6 9 4.6. Các hàm thông dụng p=find(h) Cho kết quả là ma trận cột các chỉ số của dữ liệu lớn hơn 1 trong ma trận h [m,n]=find(h) Cho kết quả là hai ma trận cột m chứa các chỉ số hàng, n chứa các chỉ số cột của các phần tử lớn hơn 1 trong ma trận h. Ta có thể đưa
  25. 25 thêm các hàm toán vào các dữ liệu trong ma trận h như : find(h>34), find(sin(h)>0.5) isequal(g,h) Cho giá trị là 1 nếu hai ma trận giống nhau, là 0 nếu số hàng, số cột hay có 1 phần tử khác nhau ismember(g,h) Cho kết quả là ma trận có kích thước bằng ma trận g. Với mỗi phần tử trong ma trận g Malab tìm kiếm trong ma trận h nếu có phần tử có giá trị bằng thì trả kết quả 1, nếu không có thì trả giá trị 0. intersect(g(:),h Trả kết quả là ma trận cột các phần tử bằng nhau được sắp xếp từ (:)) nhỏ đến lớn setdiff(g(:),h(:) Trả kết quả là ma trận cột các phần tử có trong g mà không có ) trong h, xắp xếp từ nhỏ đến lớn setxor(g(:),h(:) Trả kết quả là ma trận cột các phần tử không phải là phần tử chung ) của g và h union(g(:),h(:)) Trả kết quả là ma trận cột tất cả các phần tử có trong g hoặc h size(g) Trả kết quả là ma trận hàng với hai dữ liệu là số hàng và số cột ma trận g size(g,1) Trả kết quả là số hang size(g,2) Trả kết quả là số cột length(g) Trả kết quả là số chiều lớn hơn >> h=[23 54 0;7 -13 54; -98 345 12] h = 23 54 0 7 -13 54 -98 345 12 >> p=find(h) p = 1 2 3 4 5 6 8 9 >> [m,n]=find(h) m = 1 2 3 1 2
  26. 26 3 2 3 n = 1 1 1 2 2 2 3 3 >> find(sin(h)>0.5) ans = 2 3 Bài tập: 1. Viết chương trình nhập hai số từ bàn phím, sử dụng lệnh factor để tác các số thành các thừa số nguyên tố. Tìm các thừa số chung và các thừa số khác nhau của hai mảng 1 chiều đó từ đó tính USCLN, BSCNN. 2. Theo dõi nhiệt độ tại các vị trí khác nhau của một thùng phản ứng tĩnh thu được kết quả như sau Thoi gian Trung tam 10 cm 20cm Thành 1 20.3 20.3 20.4 21.0 2 53.4 54.4 47.5 22.3 3 60.2 59.6 54.3 25.6 4 59.7 59.4 55.8 27.8 5 54.4 55.3 47.5 20.1 6 45.6 43.7 39.6 22.4 7 33.6 32.8 30.3 26.4 8 29.3 28.7 25.4 20.1 9 26.4 26.4 26.5 23.6 10 26.7 26.5 23.5 21.4 a) Nhập dữ liệu từ file *.txt dạng ma trận 10x5 b) Gán cột 1 bằng biến a, xóa cột 1 khỏi ma trận c) Sử dụng hàm plot vẽ đồ thị với trục hoành là a c) Tìm nhiệt độ cao nhất, nhỏ nhất 6. Quản lý văn bản Matlab quản lý các ký tự văn bản theo bảng mã ASCII. Dữ liệu nằm giữa hai dấu nháy đơn ‘’ được hiểu là văn bản. Ví dụ
  27. 27 >> a='Khoa Hoa hoc, truong DHKHTN' a = Khoa Hoa hoc, truong DHKHTN >> size(a) ans = 1 27 >> abs(a) ans = Columns 1 through 13 75 104 111 97 32 72 111 97 32 104 111 99 44 Columns 14 through 26 32 116 114 117 111 110 103 32 68 72 75 72 84 Column 27 78 >> b=double(a) b = Columns 1 through 13 75 104 111 97 32 72 111 97 32 104 111 99 44 Columns 14 through 26 32 116 114 117 111 110 103 32 68 72 75 72 84 Column 27 78 >> char(b) ans = Khoa Hoa hoc, truong DHKHTN Các hàm double và abs chuyển về dạng số của các ký tự hàm char là hàm ngược lại chuyển số về dạng ký tự, hàm size cho biết số ký tự trong xâu. Chúng ta cũng có thể trích dẫn đoạn văn bản trong xâu theo chiều thuận hay nghịch. >> c=a(6:12) % lấy các ký tự theo thứ tự 6 tới 12 c = Hoa hoc >> c=a(6:2:12) % cứ hai ký tự lấy 1 c = Hahc >> c=a(12:-1:6) % đảo ngược các ký tự từ 12 tới 6 c = coh aoH >> d=c' % chuyen vị hang sang cot d = c o h
  28. 28 a o H Các lệnh trên chúng ta thấy rằng khi hiển thị dữ liệu luôn có tên biến đi cùng ví dụ ‘c =’ Khi muốu hiển thị xâu văn bản mà không hiển thị biến chúng ta dùng hàm disp. >>disp(c) coh aoH Trong qúa trình làm 1 bài toán chúng ta cần viết dữ liệu dạng số vào trong xâu văn bản khi đó chúng ta phải chuyển đổi dữ liệu dạng số sang xâu, ta dùng lệnh num2str. x = 12 >> y y = 8 >> kq=['gia tri bien y bang ' num2str(y) ' ung voi bien x bang ' num2str(x)] kq = gia tri bien y bang 8 ung voi bien x bang 12 7. Quản lý thời gian Matlab lấy mốc thời gian là năm 0 theo dương lịch từ đó tính thời gian như trên trục số trước năm không các năm mang dấu âm sau năm 0 các năm mang dấu dương. Đơn vị thời gian sử dụng trong Matlab là ngày, chương trình không quản lý thời gian theo ngày tháng năm mà theo các con số ví dụ ngày 19 tháng 07 năm 2003 ứng với con số 732135 ngày (tính từ ngày dầu tiên của năm 0). Số tính ngày của Matlab chính xác hàng trăm số sau dấu phẩy, để chính xác đến giây chúng ta cần lấy tối thiểu năm số sau dấu phẩy. 7.1 Các hàm thời gian calendar Lịch clock Hiển thị thời gian hiện tại dưới dạng vector (number) cputime Thời gian Matlab đang hoạt động (giây) date Ngày hiện thời, hiển thị dạng xâu (Text) datenum Tính số ngày datestr Hiển thị ngày dạng xâu với nhiều kiểu mặc định khác nhau datevec Chuyển xâu ký tự dạng ngày sang dữ liệu dạng ma trận 1 chiều eomday Tìm ngày cuối tháng etime Tính thời gian giữa hai thời điểm now Hiển thị thời gian hiện tại tic, toc Tính thời thực hiện lệnh weekday Tìm thứ mấy trong tuần từ ngày tháng năm 7.2. Lập lịch các tháng Hàm clendar được sử dụng để hiện thị lịch một tháng của năm bất kỳ với cấu trúc câu lệnh: calendar(năm,tháng).
  29. 29 >> calendar (2004,1) Jan 2004 S M Tu W Th F S 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 0 0 0 0 0 0 7.3. Hiển thị ngày giờ hiện tại >> clock % hiển thị thời gian lúc thực hiện lệnh dưới dạng ma trận hàng %(năm, tháng, ngày, giờ, phút, giây) các phần tử format dạng số ans = Columns 1 through 3 2003 7 19 Columns 4 through 6 17 0 44.023 >> n=date n = 19-Jul-2003 Hàm now cũng đưa ra thời gian hiện tại hiển thị dưới dạng số ngày tính từ ngày thứ nhất năm 0. >> n=datestr(1) n = 01-Jan-0000 >> n=datestr(800000,1) % ngày thứ 800000 n = 28-Apr-2190 Hàm datetstr hiển thị ngày dạng xâu có 31 kiểu hiển thị ngày: Số kiểu hiển thị Dạng xâu Ví dụ 0 'dd-mmm-yyyy HH:MM:SS' 01-Mar-2000 5:45:17 1 'dd-mmm-yyyy' 01-Mar-2000 2 'mm/dd/yy' 03/01/00 3 'mmm' Mar 4 'm' M 5 'mm' 03 6 'mm/dd' 03/01 7 'dd' 01 8 'ddd' Wed 9 'd' W 10 'yyyy' 2000 11 'yy' 00
  30. 30 12 'mmmyy' Mar00 13 'HH:MM:SS' 15:45:17 14 'HH:MM:SS PM' 3:45:17 PM 15 'HH:MM' 15:45 16 'HH:MM PM' 3:45 PM 17 'QQ-YY' Q1-96 18 'QQ' Q1 19 'dd/mm' 01/03 20 'dd/mm/yy' 01/03/00 21 'mmm.dd,yyyy HH:MM:SS' Mar.01,2000 15:45:17 22 'mmm.dd,yyyy' Mar.01,2000 23 'mm/dd/yyyy' 03/01/2000 24 'dd/mm/yyyy' 01/03/2000 25 'yy/mm/dd' 00/03/01 26 'yyyy/mm/dd' 2000/03/01 27 'QQ-YYYY' Q1-1996 28 'mmmyyyy' Mar2000 29 (ISO 8601) 'yyyy-mm-dd' 2000-03-01 30 (ISO 8601) 'yyyymmddTHHMMSS' 20000301T154517 31 'yyyy-mm-dd HH:MM:SS' 2000-03-01 15:45:17 Ngược lại với hàm datestr hàm datevec chuyển ngày tháng dạng xâu (text) sang dạng ma trận 1 chiều (các phần tử format dạng số) >> datevec('28-Apr-2190') ans = 2190 4 28 0 0 0 >> eomday(2003,2) % tìm ngày cuối cùng của tháng ans = 28 7.3. Tính khoảng thời gian * Tính số ngày >> n=date n = 19-Jul-2003 >> datenum(n) ans = 731781 ans bằng tổng số ngày từ ngày đầu tiên của năm 0 tới ngày 19 tháng 7 năm 2003 * Hàm etime tính khoảng thời gian giữa hai thời điểm (tính bằng giây), hai thời điểm này phải biểu diễn dưới dạng vectơ gồm 6 phần tử dạng số (năm, tháng, ngày, giờ, phút , giây). >> t1=datevec('08-Feb-1978') t1 =
  31. 31 1978 2 8 0 0 0 >> t2=datevec('19-Jun-2003') t2 = 2003 6 19 0 0 0 >> sogiay=etime(t2,t1) sogiay = 80023680 Ngoài ra chúng ta còn gặp hàm tic, toc để tính thời gian thực hiện lệnh. Bài tập 1 Lập lịch các tháng năm sau? 2 Tìm xem ngày 1 tháng 1 năm 3000 là thứ mấy, tính số giây từ thời điểm hiện tại tới giây, phút, giờ thứ nhất ngày 1 tháng 1 năm 3000 8. Cấu trúc vòng lặp và điều kiện 8.1. Vòng lặp for Vòng lặp for cho phép lặp lại một nhóm lệnh với số lần xác định, với cú pháp như sau for n= ma trận % dữ liệu dạng ma trận, được hiểu dưới dạng vectơ hàng có thể là nhiều hàng hay 1 hàng Nhóm lệnh end VD: Tính hiệu bình phương từng cặp số trong hai dãy số 23, 445, 23 và 234, 23, 234 >> hbp=zeros(1,3) % (1) hbp = 0 0 0 >> n=0 n = 0 >> dulieu=[23 445 23;234 23 234] dulieu = 23 445 23 % dãy 1 234 23 234 % dãy 2 >> for x=dulieu n=n+1; hbp(n)=x(1)^2-x(2)^2 end hbp = -54227 0 0 hbp = -54227 197496 0
  32. 32 hbp = -54227 197496 -54227 % giá tương ứng của 23^2-234^2; 445^2-23^2; 23^2-234^2 Khi không khởi tạo hbp giá trị của ma trận hàng hbp được lấp đầy dần, quá trình khởi tạo (1) thực hiện lệnh cấp bộ nhớ 1 lần cho biến hbp để thúc đẩy nhanh quá trình tính toán thay vì mỗi khi n tăng 1 đơn vị matlab lại phải cấp thêm bộ nhớ cho biến hbp. Do n thuộc dạng ma trận dữ liệu số nên ta có thể khởi tạo n giống như khởi tạo ma trận ví dụ như n=1:10, n=10,-1,1 8.2. Vòng lặp while Khác với vòng lặp for vòng lặp while thực hiện số vòng lặp không xác định tới khi biểu thức điều kiện bị vi phạm thì dừng lại. Cú pháp vòng lặp while như sau: >>while biểu thức điều kiện nhóm lệnh end Ví dụ tìm ước số chung lớn nhất và bội số chung nhỏ nhất của 174 và 36 >> m=174 m1=m >> n=36 n1=n >> While m~=n if m>n m=m-n else n=n-m usc=m bsc=m1*n1/usc end 8.3. Cấu trúc điều kiện if-else-end Cấu trúc này được áp dụng khi chúng ta muốn một nhóm lệnh được thực hiện chỉ khi một điều kiện nào đó được thỏa mãn. Cú pháp câu lệnh: >> if biểu thức điều kiện khối các lệnh end Cấu trúc này có thể được rẽ nhánh gồm nhiều biểu thức điều kiện với từ khóa elseif >> if biểu thức điều kiện khối các lệnh elseif biểu thức điều kiện khối các lệnh elseif biểu thức điều kiện khối các lệnh else khối các lệnh
  33. 33 end Ví dụ: >> j=0 for x=1:1000 if round(sqrt(x))^2==x j=j+1 y(j)=x end end % tìm các số chính phương từ 1 tới 1000 8.4. Cấu trúc switch-case Cấu trúc áp dụng khi chúng ta cần biết đặc tính của dữ liệu để thực hiện các phép toán cho phù hợp, nó có cấu trúc >>switch biểu thức điều kiện case kiểm tra đặc tính 1 nhóm lệnh case kiểm tra đặc tính 1 nhóm lệnh otherwise nhóm lệnh end * Chúng ta chú ý rằng khi thực hiện các lệnh trực tiếp trên command window bấm phím enter thay cho dấu thực hiện câu lệnh, trong các M-file chỉ có dòng lệnh cuối cùng là có thể kết thúc được bằng phím enter do đó tất cả các câu lệnh phải có dấu ‘;’ để thực hiện lệnh. Bài tập 1. Từ năm 2000 tới năm 3000 hãy tìm các năm mà tháng 2 có 29 ngày? (sử dụng vòng lặp for, cấu trúc if và hàm eoday) 2. Tìm các số nguyên tố từ 1 tới 1000 (có thể áp dụng hàm factor, size, câu lệnh for) 9. Phân tích dữ liệu và các hàm chuyển đổi Fourier Matlab quản lý dữ liệu dạng ma trận nên chúng ta dễ dàng xử lý, truy xuất từng dữ liệu riêng lẻ cũng như theo các hàng hay theo các cột. Ví dụ: Kết quả thí nghiệm với các hệ phản ứng loại bỏ nitơ trong nước thải rác bằng 1 loại cỏ, đánh giá bằng khối lượng nitơ (kg) và sự chuyển hóa giữa các dạng. Dữ liệu được ghi trong file kqtnito.txt như sau. Thietbi Bandau Cuoicung NH3_N NO2_N NO3_N AT1 0.1422 0.0263 88 7 5 AT2 0.1422 0.0291 88 8 4 BT1 0.0293 0.0073 104 5 -9 BT2 0.0334 0.0107 103 6 -9
  34. 34 BT3 0.0925 0.0105 94 5 2 B1T4 0.0852 0.0268 88 6 6 CT1 0.1342 0.0341 84 17 -2 CT2 0.1351 0.0392 87 17 -4 CT3 0.1401 0.0606 89 15 -4 DP2 1.5870 0.0111 83 17 0 DP6 1.6310 0.0512 83 19 -2 DP9 1.5379 0.0441 81 10 -1 EP2 1.5668 0.0409 33 65 2 EP4 1.7058 0.3877 41 55 4 EP6 1.7699 0.5063 53 45 2 EP9 1.5096 0.2408 42 55 3 Để nhập dữ liệu ta vào File import data >> a=data a = 0.1422 0.0263 88.0000 7.0000 5.0000 0.1422 0.0291 88.0000 8.0000 4.0000 0.0293 0.0073 104.0000 5.0000 -9.0000 0.0334 0.0107 103.0000 6.0000 -9.0000 0.0925 0.0105 94.0000 5.0000 2.0000 0.0852 0.0268 88.0000 6.0000 6.0000 0.1342 0.0341 84.0000 17.0000 -2.0000 0.1351 0.0392 87.0000 17.0000 -4.0000 0.1401 0.0606 89.0000 15.0000 -4.0000 1.5870 0.0111 83.0000 17.0000 0 1.6310 0.0512 83.0000 19.0000 -2.0000 1.5379 0.0441 81.0000 0 -1.0000 1.5668 0.0409 33.0000 65.0000 2.0000 1.7058 0.3877 41.0000 55.0000 4.0000 1.7699 0.5063 53.0000 45.0000 2.0000 1.5096 0.2408 42.0000 55.0000 3.0000 >> ptxl=a(:,2)./a(:,1)*100 % tính phần trăm giá trị tương ứng ở cột 2 so với cột 1 (phần trăm còn lại sau xử lý) ptxl = 18.4951 20.4641 24.9147 32.0359 11.3514 31.4554 25.4098 29.0155
  35. 35 43.2548 0.6994 3.1392 2.8675 2.6104 22.7283 28.6061 15.9512 >> gttb=mean(a) % giá trị trung bình theo cột gttb = 0.7651 0.0954 77.5625 21.3750 -0.1875 >> gttb1=mean(a,1) % giá trị trung bình theo cột gttb1 = 0.7651 0.0954 77.5625 21.3750 -0.1875 >> gttb2=mean(a,2) % giá trị trung bình theo hàng gttb2 = 20.0337 20.0343 20.0073 20.0088 20.2206 20.0224 19.8337 20.0349 20.0401 20.3196 20.3364 16.3164 20.3215 20.4187 20.4552 20.3501 >> xltn=min(ptxl) % tìm giá trị nhỏ nhất trong ma trận cột ptxl (xử lý tốt nhất) xltn = 0.6994 >> tb=find(ptxl==xltn) % tìm địa chỉ phần tử trong cột có giá trị bằng xltn tb = 10 >> xlkn=max(ptxl) % tìm giá trị lớn nhất xlkn = 43.2548 >> tbkn=find(ptxl==xlkn) % tìm địa chỉ tbkn =
  36. 36 9 >> tentb=1:16 tentb = Columns 1 through 13 1 2 3 4 5 6 7 8 9 10 11 12 13 Columns 14 through 16 14 15 16 >> plot(tentb,a(:,1:2)) % vẽ đồ thị cột 1 và 2 >> xlabel('thu tu thiet bi') >> ylabel('khoi luong nito (kg)') >> plot(tentb,a(:,3:5)) >> xlabel('thiet bi') >> ylabel('phan tram') >> b=diff(a) % độ chênh lệch giữa hai phần tử kề nhau trong mảng b = 0 0.0028 0 1.0000 -1.0000 -0.1129 -0.0218 16.0000 -3.0000 -13.0000 0.0041 0.0034 -1.0000 1.0000 0 0.0591 -0.0002 -9.0000 -1.0000 11.0000 -0.0073 0.0163 -6.0000 1.0000 4.0000 0.0490 0.0073 -4.0000 11.0000 -8.0000 0.0009 0.0051 3.0000 0 -2.0000 0.0050 0.0214 2.0000 -2.0000 0 1.4469 -0.0495 -6.0000 2.0000 4.0000 0.0440 0.0401 0 2.0000 -2.0000 -0.0931 -0.0071 -2.0000 -19.0000 1.0000 0.0289 -0.0032 -48.0000 65.0000 3.0000 0.1390 0.3468 8.0000 -10.0000 2.0000 0.0641 0.1186 12.0000 -10.0000 -2.0000 -0.2603 -0.2655 -11.0000 10.0000 1.0000 Phép toán cơ bản (Basic Operations) cumprod cumprod(b,n), n=1 tích lũy theo cột, n=2 tích lũy theo hàng cumsum Tổng tích lũy cumtrapz Tổng tích lũy của giá trị trung bình 2 số liên tiếp (n=1 tính theo cột, n=2 tính theo hàng) factor Tách số thành các thừa số nguyên tố inpolygon Tìm các điểm trong vùng đa giác max Xác định giá trị lớn nhất theo 1 chiều mean Xác định giá trị trung bình theo 1 chiều median Giá trị trung gian trong mảng min Xác định giá trị nhỏ nhất theo 1 chiều
  37. 37 perms Tất cả khả năng có thể xảy ra của phép hoán vị 1 tập số polyarea Diện tích của đa giác primes Tạo ra danh sách các số nguyên tố prod Tích số 1 chiếu các phần tử trong ma trận sort Xếp các phần tử theo chiều tăng dần sortrows Xếp các dòng theo chiều tăng dần std Độ lệch chuẩn sum Tổng các phần tử theo 1 chiều ma trận trapz Hàng hay cột cuối cùng của lệnh cumtrapz var Sự thay đổi Sai phân hữu hạn (Finite Differences) del2 Toán tử rời rạc Laplacian diff Tính độ chênh lệch giữa các phần tử và đạo hàm gần đúng gradient Gradient vi phân Biến đổi Fourier (FourierTransforms) abs Giá trị tuyệt đối và agument số phức angle Góc pha cplxpair Xắp xếp các số phức thành các cặp liên hợp phức fft Biến đổi Fourier rời rạc 1 chiều fft2 Biến đổi Fourier rời rạc 2 chiều fftshift Shift DC component of fast Fourier transform to center of spectrum ifft Biến đổi Fourier rời rạc ngược 1 chiều ifft2 Biến đổi Fourier rời rạc ngược 2 chiều ifftn Biến đổi Fourier rời rạc ngược n chiều 10. Tạo và giải hệ phương trình tuyến tính Matlab cung cấp các hàm xác định ma trận nghịch đảo, định thức, nhân, chia ma trận do đó chúng ta có thể ứng dụng giải các hệ phương trình tuyến tính. VD: Giải hệ phương trình 2x1 + 5x2 + 7x3 = 12 5x1 + 8x2 + 34x3 = 45 34x1 + 65x2 + 12x3 = 157 Biểu diến dưới dạng ma trận ta có thể viết lại như sau 2 5 7 x1 12 5 8 34 . x2 = 45 34 65 12 x3 157 a . x = b Khi giải với matlab ta chỉ cần nhập hai ma trận a và b
  38. 38 >> a=[2 5 7;5 8 34; 34 65 12] a = 2 5 7 5 8 34 34 65 12 >> b=[12; 45; 157] b = 12 45 157 Đây là hệ 3 biến 3 phương trình nếu nếu det(a) khác không hệ có bộ nghiệm duy nhất. >> det(a) ans = 1623 Do đó ta có thể sử dụng hai phép toán để tính nghiệm hệ phương trình. * Như đã giới thiệu phần 4 matlab cung cấp các hàm nhân, chia ma trận do đó ta có thể tính nghiệm trực tiếp bằng phép chia ma trận (không sử dụng dấu ‘.’): >> x=a\b % phép chia trái x = 6.3494 -1.0222 0.6303 * Hệ phuơng trình a.x=b ↔ x=a-1.b, lệnh inv(a) cho phép tính a-1 >> c=inv(a) c = -1.3025 0.2434 0.0702 0.6753 -0.1319 -0.0203 0.0327 0.0246 -0.0055 >> x=c*b x = 6.3494 -1.0222 0.6303 Đối với các hệ mà số phương trình độc lập tuyến tính lớn hơn số biến thì hệ vô nghiệm song matlab sử dụng phuơng pháp bình phương tối thiểu để thực hiện phép chia a\b nên vẫn đưa ra kết quả của x (cho sai lệch nhỏ nhất khi thay x vào các phương trình). Với các hệ có số biến lớn hơn số phương trình thì hệ có vô số nghiệm. Khi thực hiện phép toán a\b matlab lựa chọn giải pháp số phần tử 0 cực đại để đưa ra 1 bộ nghiệm của hệ. Bài tập 1. Giải hệ phương trình a) b)
  39. 39 2x – y – z – t = -1 3x1 - 2x2 - 5x3 + x4 = 3 x - 2y + z + t = -2 2x1 - 3x2 + x3 + 5x4 = -3 x + y -2z + t = 4 x1 + 2x2 - 4x4 = -3 x + y + z – 2t = -8 x1 - x2 - 4x3 + 9x4 = 22 3x -3x 2. a) Phù hợp hóa đường cong theo mô hình: y=co + c1e + c2e với các số liệu như sau xi 0 1 2 3 yi 1 2 2 1 b) co=0. tìm c1, c2 c) y=ae-bx , tìm a, b Thể hiện trên màn hình đồ họa. 2 3 3) Phù hợp hóa dữ liệu theo đường cong y=c o + c1x + c2x + c3x , vẽ đồ thị dữ liệu và đường cong. x 0.5 1.0 2.1 3.4 y 0.6 1.4 2.0 3.6 11. Đa thức và các hàm nội suy 11.1. Các phép toán đối với đa thức Matlab quản lý các đa thức dưới dạng các vectơ hàng là các hệ số của biến (hàm số với biến đặc trưng mục 12) do đó ta dễ dàng thực hiện các phép toán cộng trừ, nhân chia, đạo hàm. VD: Ta có hai hàm số dạng đa thức: g(x) = x2+ 3x -5 và h(x) = 2x3+7x2+12x-15 Ta nhập vào chương trình tương tự như nhập ma trận hàng và thực hiện các phép toán như sau: >> g=[1 3 -5] g = 1 3 -5 >> h=[2 7 12 -15] h = 2 7 12 -15 11.1.1. Cộng, trừ hai đa thức Trước hết chúng ta phải nắm được rằng với một đa thức viết dưới dạng ma trận hàng tính từ phải sang trái bậc của biến tăng từng bậc từ 0 tới bậc cao nhất do đó nếu giả sử 3 0x có hệ số bằng 0 ta vẫn phải nhập giá trị 0 ở vị trí thứ 4 từ phải qua trái. Cộng hai đa thức cũng tương tự như cộng ma trận hàng. Số phần tử trong hàng phải tương đương Các vị trí thiếu phải được thêm phần tử 0 Tính tổng g và h ta viết >> f=h+[0 g]
  40. 40 f = 2 8 15 -20 tương ứng với phương trình: f(x)=2x3 + 8x2 +15x – 20 11.1.2. Nhân, chia hai đa thức Matlab sử dụng hàm conv để nhân hai đa thức và sử dụng hàm deconv để chia hai đa thức. >> tich=conv(h,g) % nhân hai đa thức, = conv(g,h) = 2x5+13x4+23x3-14x2- 105x+75 tich = 2 13 23 -14 -105 75 >> [thuong,sodu]=deconv(h,g) % nếu vế trái chỉ có một phần tử thì phép chia chỉ thu được đa thức thương thuong = 2 1 sodu = 0 0 19 -10 Như vậy phép chia này ta được hàm thương là: 2x + 1, số dư là: 19x – 10 * Khi ta xem xét phép chia hai đa thức dạng như một phân thức matlab cung cấp hàm residue để biến đổi phân thức thành đa thức cộng với các phân thức có tử thức là đa thức bậc 0 còn mẫu thức là đa thức bậc 1. x 3 x 0.5 0.5 x x x 2 1 x 2 1 x (0 i) x (0 i) >> a=[1 0 0 0] a = 1 0 0 0 >> b=[1 0 1] b = 1 0 1 >> [tu mau th]=residue(a,b) tu = -0.5000 -0.5000 m = 0 + 1.0000i 0 - 1.0000i th = 1 0 residue là hàm hai chiều [a,b]=residue(tu m th) trả lại tử thức và mẫu thức.
  41. 41 11.1.3. Tính giá trị đa thức Với đa thức bậc cao như đa thức y=2x5+13x4+23x3-14x2-105x+75 việc vẽ đồ thị và tính giá hàm số ở một số điểm xác định sẽ tương đối phức tạp nếu không có các hàm hỗ trợ. >>x=linspace(-100,100,101) % lấy 101 điểm trong đoạn [-100,100] >>giatriham=polyval(y,x) % tính giá trị hàm y=2x5+13x4+23x3-14x2-105x+75 tại 101 điểm có hoành độ là ma trận hàng x các giá trị tính được ghi trong ma trận hàng giatriham >>plot(x,giatriham) % vẽ đồ thị các điểm tương ứng trong hai ma trận x và giatriham 11.1.4. Đạo hàm và tích phân Matlab sử dụng hàm polyder để tính đạo hàm va polyint để tính tích phân đa thức >> h h = 2 7 12 -15 >> dh=polyder(h) dh = 6 14 12 Kết quả được hiểu là: dh=6x2+14x+12 >> tp=polyint(h) tp = 0.5000 2.3333 6.0000 -15.0000 0 Kết quả được hiểu là: tp=0.5x4+2.3333x3+6x2-15x * Chú ý với các phân thức có tử thức và mẫu thức là các đa thức ta cũng có thể tính đạo hàm bằng hàm polyder. Ví dụ xét phân thức 1/x >> a=[1] % tử thức 1 a = 1 >> b=[1 0 ] % mẫu thức x + 0 b = 1 0 >> [t,m]=polyder(a,b) % đạo hàm phân thức được tử/mẫu = -1/(x2 +0x+0) t = -1 m = 1 0 0 11.1.5. Nghiệm của phương trình đa thức Hàm roots được sử dụng để tính nghiệm của phương trình đa thức, các nghiệm được biểu diễn dưới dạng số thực và số phức.
  42. 42 >> h h = 2 7 12 -15 >> nghiem=roots(h) nghiem = -2.1481 + 2.1923i -2.1481 - 2.1923i 0.7961 11.2. Các phép nội suy dữ liệu Bài toán đặt ra là trong thí nghiệm chúng ta thu được hai thông số phụ thuộc lẫn nhau và cần tìm một phương trình dạng đa thức mô tả sự phụ thuộc của thông số này vào thông số kia, đồng thời nội suy các điểm trung gian. VD: Xem xét ảnh hưởng của pH tới tốc độ nitrat hóa amoni bằng bùn hoạt tính pH 7.20 7.45 7.60 7.80 8.25 8.50 8.70 9.00 rv(mN/l.min) 0.04 0.08 0.20 0.21 0.19 0.17 0.13 0.06 >> pH=[7.20 7.45 7.60 7.80 8.25 8.50 8.70 9.00] pH = Columns 1 through 7 7.2000 7.4500 7.6000 7.8000 8.2500 8.5000 8.7000 Column 8 9.0000 >> rv=[0.04 0.08 0.20 0.21 0.19 0.17 0.13 0.06] rv = Columns 1 through 7 0.0400 0.0800 0.2000 0.2100 0.1900 0.1700 0.1300 Column 8 0.0600 >> plot(pH,rv,'b-',pH,rv,'r*') % nối các điểm (x,y) >> xlabel('pH') >> ylabel('r (mgN/l.min)') Bây giờ chúng ta xác định mối liên hệ giữa pH và rv bằng phương trình bậc n=4 >> f=polyfit(pH,rv,4) f = 0.0839 -2.6504 31.1149 -160.6671 307.7544 >> hold on >> x=linspace(7,9,100) >> y=polyval(f,x)% thay x vào hàm f để tính y >> plot(x,y)
  43. 43 >> ylabel('r (mgN/l.min)') >> xlabel('pH') Matlab sử dụng phương pháp bình phương tối thiểu để xác định hàm số phù hợp mô tả sự biến thiên của dữ liệu. Như vậy khi sử dụng lệnh polyfit bậc của hàm số do chúng ta lựa chọn. Khi bậc càng cao thì hệ số tương quan hồi quy R càng gần 1 hay đường cong đi sát các điểm thực nghiệm hơn như kết quả nội suy có thể sai số lớn hơn nếu nó không mô tả đúng xu thế của sự biến đổi do đó chúng ta cần chọn hàm số phù hợp theo kinh nghiệm. Khi có 1 tập dữ liệu chúng ta cũng có thể nội suy dữ liệu mà không cần thiết phải thiết lập phương trình khi sử dụng hàm interft, interp1 cho hàm số 1 biến, interp2 cho hàm số hai biến, interp3, interpn. Đồng thời chúng ta có thể sử dụng các hàm này để thêm điểm vào tập dữ liệu để được đồ thị mịn hơn. >> pH pH = Columns 1 through 7 7.2000 7.4500 7.6000 7.8000 8.2500 8.5000 8.7000 Column 8 9.0000 >> rv rv = Columns 1 through 7 0.0400 0.0800 0.2000 0.2100 0.1900 0.1700 0.1300 Column 8 0.6000 >> pH1=7.5 pH1 = 7.5000 >> rv1=interp1(pH,rv,pH1,'linear') % tương tự lệnh rv1=interp1(pH,rv,pH1) rv1 = 0.1200 Điểm (pH,rv)=(7.5,0.12) nằm trên đường thẳng nối hai điểm (7.45;0.08) và (7.6;0.2) >> rv1=interp1(pH,rv,pH1,'cubic') % nội suy theo đường cong phù hợp nhất rv1 = 0.1163 Để thấy rõ hơn khả năng làm mịn hóa đường cong chúng ta thêm nhiều điểm vào giữa các giá trị dữ liệu: >> pHmr=linspace(7.2,9,100) % mở rộng số điểm pH, lấy 100 điểm từ 7.2 tới 9 >> rvmr=interp1(pH,rv,pHmr,'cubic') >> hold on >> plot(pHmr,rvmr) Lệnh rvmr=interp1(pH,rv,pHmr,'cubic') nội suy rvmr từ pHmr theo đường cong đi qua các điểm (pH,rv).
  44. 44 Hình bên chúng ta thấy 3 kiểu nội suy dữ liệu: theo hàm số, theo đường nối thẳng, và theo đường nối cong. Đối với lệnh interp2 chúng ta hãy xem xét các mô phỏng bền mặt đáy hồ, chiều ngang chia thành 10 đường, chiều dọc chia thành 17 đường và đo độ sâu ở các vị trí giao nhau và thu được mảng dữ liệu như sau: bm=[0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 -0.1 0 0 0 0 0; 0 0 0 -1 -2 0.1 -1 0 0 0; 0 0 -0.5 -2 -1 1 1 -1 0 0; 0 0 -0.1 -1 -1.2 -1 -0.1 -1 0 0; 0 0 -0.1 -1 -2.5 -2.8 -2.5 -1 0 0; 0 0 -0.1 -1 -2.5 -2.6 -2.5 -1 0 0; 0 0 -0.1 -1 -1.5 -2 -1.5 -1 0 0; 0 0 -0.1 -1 1 -0.5 -2 -0.5 0 0; 0 0 0 -2 1 -0.1 -2.5 -1 0 0; 0 0 0 -1 -2 -4 -2.7 -1 0 0; 0 0 0 -0.7 -2 -2 -1 -0.1 0 0; 0 0 0 -0.1 -0.5 -1 -0.3 0 0 0; 0 0 0 0 0 -0.1 0 0 0 0; 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0] >>x=0:9 >>y=0:16 >>mesh(x,y,bm) Thực hiện nội suy dữ liệu theo đường cong: >>x1=linspace(0,9,50) >>y1=linspace(0,16,100) >>[x2,y2]=meshgrid(x1,y1) >>bmmr=interp2(x,y,bm,x2,y2,'cubic') >>mesh(x2,y2,bmmr) Khi x1,y1 là hai ma trận hàng thì nhất thiết phải sử dụng lệnh meshgrid để nó tạo nên hai ma trận x2, y2 có số chiều như nhau để thỏa mãn câu lệnh interp2. Ta không cần sử dụng lệnh meshgrid nếu y1 là ma trận cột. >> saunhat=min(min(bmmr)) % giá trị min thứ nhất cho ra kết quả theo cột saunhat = -3.9959 Bài tập 1. Tìm điểm trên đồ thị f=2x2+3x+1 gần gốc tọa độ nhất với độ chính xác tự chọn?
  45. 45 2. Một thiết bị hình hộp không có nắp, thể tích 1000cm3, tìm kích thước để tốn ít nguyên liệu chế tạo nhất (không đề cập tới độ dày)? 3. Một hỗn hợp gồm benzen và toluen chứa bf% mol benzen được dự định tách với sản phẩm đầu cột chứa bd% mol benzen và sản phẩm cuối cột chứa không quá bw% mol benzen. Hỗn hợp này được cung cấp nhiệt và được dẫn vào cột tách tại điểm sôi của nó, hơi đi ra khỏi cột tách được ngưng tụ nhưng không được làm lạnh và được chia làm hai phần; một phần hồi lưu trở lại cột tách còn một phần được lấy ra làm sản phẩm đầu cột của quá trình tách. Người ta dự định vận hành cột tách với tỉ số hồi lưu hl kmol/kmol sản phẩm. Bằng phương pháp nội suy vẽ đồ thị đường cân bằng lỏng hơi. Nhập các thông số bf, bd, bw từ bàn phím tính số đĩa lí thuyết, áp dụng với bf=40%, bd=10%, bw=90%, hl=3mol/L Biết nồng độ cấu tử nhẹ trong pha lỏng và pha hơi nằm cân bằng như sau: x 0.00 0.20 0.40 0.60 0.80 1.00 y 0.00 0.37 0.60 0.80 0.90 1.00 Phương trình đường làm việc cột trên L n D y n x n 1 x d 1.13 Vn Vn Phương trình đường làm việc cột dưới Lm W ym x m 1 x W 1.14 Vm Vm 4. Một cột chưng cất phân đoạn liên tục được sử dụng để tách một hỗn hợp chứa 0,695 phần mol n-heptan (C7H16) và 0,305 phần mol n-octan (C8H18) để cho sản phẩm tinh khiết đến 99% mol. Cột này được vận hành ở áp suất 101,3 kN/m 2 với tốc độ hơi là 0,6 m/s. Nguyên liệu ở trạng thái lỏng ở tại điểm sôi của nó và được nạp với tốc độ 1,25 kg/s. Nhiệt độ sôi ở đỉnh cột là 372 K. Dữ liệu cân bằng lỏng-hơi: y 0,96 0,91 0,83 0,74 0,65 0,50 0,37 0,24 x 0,92 0,82 0,69 0,57 0,46 0,32 0,22 0,13 a/ Xác định Rmin b/ Xác định đường kính cột khi  = 2Rmin. * Đường làm việc đi qua xf,yf, lấy tốc độ hơi = 0.6m/s 5. Người ta dự định tiến hành một phản ứng A R trong một thiết bị phản ứng lí tưởng gián đoạn. Tốc độ phản ứng ở các nồng độ tương ứng xác định được như sau:
  46. 46 CA (mol/lít) 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 1,0 1,3 2,0 0,1 0,3 0,5 0,6 0,5 0,2 0,1 0,0 0,0 0,0 0,0 -rA (mol/lit 5 0 6 5 45 42 phút) Vẽ đồ thị (CA, 1/-rA) Nếu nồng độ của nguyên liệu ban đầu C A0 = 1,3 mol/lít thì thời gian lưu của phản ứng sẽ là bao nhiêu nếu nồng độ chất A trong sản phẩm là 0,3 mol/lít. 6. Một phản ứng đồng thể trong pha lỏng có phương trình phản ứng và phương trình tốc độ như sau: 2 A R, rA kC A Khi phản ứng tiến hành trong một thiết bị IMR có thể tích V thì độ chuyển hoá của phản ứng là 50%. a) Độ chuyển hoá của phản ứng sẽ là bao nhiêu nếu phản ứng được tiến hành trong một thiết bị phản ứng IMR có thể tích bằng 6 lần thiết bị IMR ban đầu? b) Độ chuyển hoá của phản ứng sẽ là bao nhiêu nếu phản ứng được tiến hành trong một thiết bị phản ứng PFR có thể tích bằng thể tích thiết bị IMR ban đầu? CA0 CAf Thiết bị IMR  2 kCAf C Af dC Thiết bị PFR  A kC 2 C A 0 A 7 Một phản ứng phân huỷ chất A trong pha khí A R có dữ liệu động học như sau: CA(mol/lít) 1 2 4 6 8 10 -rA(mol/lít giây) 0,01 0,02 0,04 0,09 0,16 0,25 Người ta dự định tiến hành phản ứng này trong một thiết bị phản ứng PFR để đạt được độ chuyển hoá là 80% khi nguyên liệu đầu chứa chất A tinh khiết có nồng độ là 10 mol/lít. Xây dựng đồ thị (C A, 1/-rA), tính thời gian lưu của thiết bị phản ứng này trong trường hợp trên. V CA dC  A V r CA 0 A 8. Phản ứng phân huỷ một chất lỏng A được tiến hành trong phòng thí nghiệm bằng một thiết bị IMR. Tại trạng thái dừng xác định được các số liệu động học như sau:
  47. 47 Nồng độ chất A (mol/lít) Thời gian lưu (s) Nguyên liệu Sản phẩm 2,00 0,65 300 2,00 0,92 240 2,00 1,00 250 1,00 0,56 110 1,00 0,37 360 0,48 0,42 24 0,48 0,28 200 0,48 0,20 560 Để phản ứng đạt được độ chuyển hoá là 75% khi nồng độ chất A trong nguyên liệu đầu CA0 = 0,8 mol/lít thì thời gian lưu cần thiết là bao nhiêu nếu: Dựng đồ thị (CA,-rA) và CA,1/-rA) a) Phản ứng được tiến hành trong thiết bị PFR b) Phản ứng được tiến hành trong thiết bị IMR Thời gian lưu thiết bị IMR: C C  A0 A rA Thời gian lưu thiết bị PFR: C A dC  A r C A 0 A 9. Một phản ứng trong pha khí A 3R được thực hiện trong thiết bị IMR có thể tích V = 1 lit. Nồng độ ban đầu của khí A là CAo= 120 mmol/lit. Người ta đưa khí này vào thiết bị phản ứng ở áp suất 30 atm và nhiệt độ 30 oC với các tốc độ nạp liệu khác nhau, sau đó tiến hành xác định nồng độ của khí ở lối ra thu được bảng dữ liệu sau: V lÝt / phót 0,06 0,48 1,5 8,1 CA, mmol/lit 30 60 80 105 n Phương trình tốc độ phản ứng phân hủy A có dạng: -rA= k (CA) Vẽ đồ thị và xác định n theo phương pháp bình phương tối thiểu, viết phương trình động học của phản ứng phân huỷ chất A.
  48. 48 Hệ số thay đổi thể tích V V  XA 1 XA 0 V: Thể tích hỗn hợp A V XA 0 V V0 1 A x A xA: Hệ số chuyển hóa Thiết bị IMR V C X  A0 A  V rA 12. Hàm số 12.1. Khảo sát hàm số * Vẽ đồ thị hàm số: >> y='(x^3+2)/(x^2+1)' >> fplot(y,[-3,3]) * Xác định các cực trị trong lân cận hẹp >> xmin=fminbnd(y,0,2) xmin = 1.0000 >> x=xmin x = 1.0000 >> ymin=eval(y) ymin = 1.5000 Để xác định cực đại của hàm số chúng ta không có hàm xác định trực tiếp giá trị cực đại do đó chúng ta dựa vào hàm fmin. Chúng ta biết rằng hoành độ cực đại trong khoảng - 0.5 tới 0.5 của hàm (x^3+2)/(x^2+1) chính là hoành độ cực tiểu của hàm - (x^3+2)/(x^2+1). >> xmax=fminbnd(yn,-0.5,0.5) xmax = -3.2016e-006 >> x=xmax x = -3.2016e-006 >> ymax=eval(y) ymax = 2.0000
  49. 49 12.2. Tìm giao điểm của đồ thị hàm số với trục hoành và với đồ thị hàm số khác Việc tìm giao điểm đồ thị hai hàm số Matlab sử dụng hàm fzero, ví dụ (x o,yo) là giao điểm đồ thị hai hàm số g(x) và h(x) như vậy x o chính là nghiệm phương trình f(x)=g(x)- h(x)=0. >> xnghiem=fzero(y,-3) % Nghiệm pt f(x) = 0 gần -3 nhất xnghiem = -1.2599 12.3. Đạo hàm Ở mục trước chúng ta đã sử dụng hàm diff để tính chênh lệch giữa các giá trị trong cột hay hàng, ngoài ra hàm diff có vai trò rất hữu dụng trong việc tìm đạo hàm: >> y='(x^3+2)/(x^2+1)' y = (x^3+2)/(x^2+1) >> g=diff(y) g = 3*x^2/(x^2+1)-2*(x^3+2)/(x^2+1)^2*x 12.4. Tích phân Matlab sử dụng 3 hàm quad, quadl, trapz, dblquad, triplequad để tính tích phân. >> F = inline('1./(x.^3-2*x-5)') F = Inline function: F(x) = 1./(x.^3-2*x-5) >> Q = quad(F,0,2) Q = -0.4605 Hàm quad sử dụng phép cầu phương Simson, với khoảng chia 10 -6 , trả kết quả dạng số. Hàm lấy tích phân phải sử dụng các phép toán cho mảng (không sử dụng các phép toán cho ma trận): .*, ./, +, -, .^ Dạng đầy đủ của hàm quad quad(fun,a,b,tol,trace,p1,p2, ) trong đó fun, a, b bắt buộc -6 phải có. tol theo mặc định là 10 chúng ta có thể thay đổi giá trị này. Hàm quadl sử dụng phép cầu phương Lobatto. Cách sử dụng tương tự hàm quad Để tính tích phân có cận một hàm số ta phải xử lý hàm đó bằng lệnh inline, lệnh này cấu trúc ngầm lại hàm số cho phù hợp với cách tính toán trong matlab. dblquad, triplequad là các hàm tính tích phân 2 lớp, 3 lớp với các thực hiện tương tự. Hàm trapz tính tích phân theo phương pháp hình thang. Lệnh trapz(y) với y là ma trận hàng tính diện tích các cột với các bước 1 đơn vị (hình bên), lệnh trapz(x,y) (trong đó x, y là hai mảng 1 chiều cùng kích thước) tính diện tích
  50. 50 hình nằm dưới đường nối các điểm có hoành độ x, tung độ y. >> trapz(y) ans = 17.3500 13. Hộp công cụ 13.1. Giới thiệu các hộp công cụ Hộp công cụ toán học cung cấp các hàm chuyên dụng là kết quả làm việc của các nhà nghiên cứu hàng đầu thế giới trong các lĩnh vực như: điều khiển, xử lý tín hiệu, thống kê, Hộp công cụ Chức năng Communications Thiết kế phân tích các hệ thống thông tin liên lạc Control System Thiết kết phân tích hệ thống điều khiển phản hồi Curve Fitting Thực hiện chọn kiểu mô tả và phân tích Data Acquisition Thu tập và gửi dữ liệu từ nguồn liệu đưa vào Cơ sở dữ liệu Biển đổi dữ liệu với cơ sở dữ liệu liên quan Thiết kế bộ lọc hiết kế và phân tích nâng cao bộ lọc các điểm cố và biến đổi. Tài chính Mô hình hóa dữ liệu tài chính và phát triển thuật toán phân tích tài chính. Fuzzy Logic Thiết kế và mô phòng hệ thống fuzzy logic Image Processing Phát triển thuật toán, phân tích, xử lý ảnh Instrument Control Điều khiển và liên kết với thiêt bị đo và kiểm tra LMI Control Thiết kế các bộ điều khiển sơ cấp sử dụng kỹ thuật tối ưu hóa lồi MATLAB Link for Code Composer Studio Sử dụng MATLAB với bộ xử lý tín hiệu số RTDX-enabled Texas Instruments Mapping Phân tích và hiển thị đồ họa thông tin địa lý Model Predictive Control Điều khiển định sẵn các quá trình lớn, nhiều biến Mu-Analysis and Synthesis Thiết kế bộ điều khiển phản hồi nhiều biến cho các hệ thống với mô hình không ổn định. Neural Network Thiết kế mô phỏng các hệ thần kinh Optimization Giải quyết các vấn đề về tối ưu hóa ở quy mô lớn và tiêu chuẩn Partial Differential Equation Giải và phân tích các phương trìn vi phân từng phần Robust Control Thiết kế các bộ điều khiển phản hồi không tinh vi Signal Processing Thực hiện việc phát triển các thuật toán, phân tích, xử lý tín hiệu Statistics Cung cấp các mô hình gần đúng và thuật toán thống kê Symbolic Math Thực hiện các tính toán số học chính xác và tính toán trên biến tượng trưng. System Identification Tạo các mô hình động lực tuyến tính từ dữ liệu vào /ra Virtual Reality Tạovà điều khiển hiện thực ảo từ MATLAB và Simulink Wavelet Phân tích, nén, loại nhiễu tín hiệu, ảnh sử dụng kỹ thuật wavelet
  51. 51 13.2. Hộp công cụ toán học 13.1.1. Biến tượng trưng * Khái niệm Như đã trình bày trong phần trước để biểu diễn một đa thức chúng có hai phương pháp: biểu diễn hệ số và biểu diễn dưới dạng xâu kí tự. Với các hàm số phức tạp chúng ta mới biết một phương đó là biểu diễn dưới dạng xâu ký tự. Mỗi phương pháp đều có các phép toán, các hàm tìm nghiệm, cực trị, riêng. Hàm số biểu diễn qua biến đặc trưng có giao diện tương tự như ngôn ngữ viết thông dụng. Matlab sử dụng hàm sym để tạo biến đặc trưng, các biểu thức toán học sử dụng biến đó là các hàm đặc trưng. Ví dụ: >> x = sym('x'); Chúng ta cũng có thể viết nhiều lệnh để tạo nhiều biến tượng trưng >> a = sym('a'); t = sym('t'); x = sym('x'); y = sym('y') hoặc >> syms a t x y Các biến đặc trưng này được sử dụng như các đối số trong nhiều biểu thức khác nhau. >> r = x^2 + y^2 r = x^2+y^2 Nếu các hàm số sử dụng các biến đặc trưng quá phức tạp ta có thể đơn giản hóa bằnd lệnh "simple" hay "simplify" >> f = cos(x)^2 + sin(x)^2 f = cos(x)^2+sin(x)^2 >> f = simple(f) f = 1 Chúng ta cũng có thể tạo các hằng số đặc trưng với hàm sym >> pi = sym('pi') pi = pi >> s = sym('sqrt(2)') s = sqrt(2) Các vectơ và ma trận sử dụng các biến tượng trưng >> n = 4 >> x=sym(‘x’) >> A = x.^((0:n)'*(0:n))
  52. 52 A = [ 1, 1, 1, 1, 1] [ 1, x, x^2, x^3, x^4] [ 1, x^2, x^4, x^6, x^8] [ 1, x^3, x^6, x^9, x^12] [ 1, x^4, x^8, x^12, x^16] >> D = diff(log(A)) D = [ 0, 0, 0, 0, 0] [ 0, 1/x, 2/x, 3/x, 4/x] [ 0, 2/x, 4/x, 6/x, 8/x] [ 0, 3/x, 6/x, 9/x, 12/x] [ 0, 4/x, 8/x, 12/x, 16/x] Biểu diễn độ chính xác số học biến tượng trưng, VD tính chính xác 15/37 tới 100 số sau dấu phẩy >> vpa 15/39 100 ans = .384615384615384615384615384615384615384615384615384615384615384615384 6153846153846153846153846153846 * Đổi tên biến Để đổi ta sử dụng hàm subs(hàm số, biến cũ, biến mới) >> x=sym(‘x’) x = x >> y=sym('y') y = y >> f=(2*x^2+3*x) f = 2*x^2+3*x+1 >> f1=subs(f,x,y) f1 = 2*y^2+3*y+1 * Hàm double chuyển một hằng tượng trưng thành kiểu số >> a=sym('sin(5)') a = sin(5) >> b=double(a) b = -0.9589
  53. 53 13.1.2. Các phép toán trên biểu thức tượng trưng * Các hàm số, ma trận sử dụng ký tự +, -, *, /, ^ để thực hiện các phép toán cộng trừ, nhân, chia, mũ hóa Ví dụ: >> x=sym('x') x = x >> f=(2*x^2+3*x+1) f = 2*x^2+3*x+1 >> g=(sin(x^2)) g = sin(x^2) >> h=f/g h = (2*x^2+3*x+1)/sin(x^2) >> k=h^x k = ((2*x^2+3*x+1)/sin(x^2))^x Tạo biến tượng trưng t t = sym('t') t = t Tạo ma trận tượng trưng 2 chiều với góc t G = [ cos(t) sin(t); -sin(t) cos(t)] G = [ cos(t), sin(t)] [ -sin(t), cos(t)] Phép nhân hai ma trận G*G ans = [ cos(t)^2-sin(t)^2, 2*cos(t)*sin(t)] [ -2*cos(t)*sin(t), cos(t)^2-sin(t)^2] ma trận này đơn giản hóa bằng cách biểu diễn qua góc 2*t ans = simple(ans) ans = [ cos(2*t), sin(2*t)] [ -sin(2*t), cos(2*t)] G là ma trận trực giao, chuyển vị chính là nghịch đảo >> G.'*G
  54. 54 ans = [ cos(t)^2+sin(t)^2, 0] [ 0, cos(t)^2+sin(t)^2] ans = simple(ans) ans = [ 1, 0] [ 0, 1] * Hàm compose(f,g)=f(g(x)) kết hợp hai hàm số và finverse(g) xác định hàm ngược của g >> l=compose(f,g) l = 2*sin(x^2)^2+3*sin(x^2)+1 >> m=finverse(f) m = -3/4+1/4*(1+8*x)^(1/2) >> m=finverse(g) m = asin(x)^(1/2) % hàm finverse chỉ đưa ra một kết quả mặc dù có thể tồn tại nhiều hơn một kết quả. 13.1.3. Đạo hàm và tích phân Đạo hàm và tích phân tính bởi hàm "diff" and "int" >> diff(x^3) ans = 3*x^2 >> int(x^3) ans = 1/4*x^4 >> int(exp(-t^2)) ans = 1/2*pi^(1/2)*erf(t) Với các hàm số có nhiều đối số matlab đạo hàm biến gần x nhất theo thứ tự abc, trừ khi đối số được xác định. Sau đây là các biểu thức tích phân, hai biểu thức đầu đối số tự chọn lầ x, hai biểu thức sau đối số được chon là a. >> [int(x^a), int(a^x), int(x^a,a), int(a^x,a)] ans = [ x^(a+1)/(a+1), 1/log(a)*a^x, 1/log(x)*x^a, a^(x+1)/(x+1)] Biến đổi vi phân và tích phân dữ liệu >> x = sym('x') x = x
  55. 55 % Khi đã thiết lập biến tượng trưng hàm EZPLOT cho phép vẽ đồ thị các hàm số với biến tượng trưng. >> f = 1/(5+4*cos(x)) >> ezplot(f) f = 1/(5+4*cos(x)) % Có rất nhiều các hàm sử dụng được với biến tượng trưng ví dụ với hamd “diff”. >> f1 = diff(f) ezplot(f1) f1 = 4/(5+4*cos(x))^2*sin(x) % hàm DIFF có thể xác định được đạo hàm cấp n ví dụ với đạo hàm cấp hai >> f2 = diff(f,2) ezplot(f2) f2 = 32/(5+4*cos(x))^3*sin(x)^2+4/(5+4*cos(x))^2*cos(x) % hàm “int “ cho phép lấy tích phân của hàm số chứa biến tượng trưng, ví dụ với tích phân hai lần: >> g = int(int(f2)) >> ezplot(g) g = -8/(tan(1/2*x)^2+9) Mới nhìn ta thấy ràng đồ thị của f và g như nhau nhưng quan sát kỹ chúng ta thấy rằng chúng khác nhau về hàm số và giá trị y. >> subplot(1,2,1) >> ezplot(f)
  56. 56 >> subplot(1,2,2) >> ezplot(g) % ta hãy xét e là sự khác nhua giữa f và g. Đó lad một biểu thức phức tạp nhưng nhìn đồ thị thì như là hằng số. >> e = f - g >> subplot(1,1,1) >> ezplot(e) e = 1/(5+4*cos(x))+8/(tan(1/2*x)^2+9) Đồ thị chỉ ra rằng sự khác nhau thực sự là một hằng số. >> e = simple(e) ezplot(e) e = 1 13.1.4. Giải các phương trình tượng trưng Ví dụ với phương trình bậc 2 % Chúng ta có thể xác định nghiệm mà không cần chú thích syms a b c x >> x = solve(a*x^2 + b*x + c); % Chúng ta cũng có thể tìm nghiệm phương trình và sử dụng chú thích >> x = solve('a*x^2 + b*x + c = 0'); % Cả hai trường hợp trên đều choc hung một kết quả
  57. 57 x = [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))] % Giải pháp cho đường bậc ba là >> x = solve('a*x^3 + b*x^2 + c*x + d') % lệnh này thường cho kết quả phức tạp, ta có thể đơn giản hóa bằng lệnh >> pretty(x) % Dạng phương trình khác >> x = solve('p*sin(x) = r') % lệnh này chọn x làm ẩn số và cho kết quả tính theo r, p. x = asin(r/p) % Với phương trình hai ẩn số hàm solve cho kết quả là một véc tơ >> [x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0') x = [ 1] [ 3] y = [ 1] [ -3/2] % Giải pháp này cũng đưa ra kết quả với câu lệnh phức hợp >> S = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0') S = x: [2x1 sym] y: [2x1 sym] >> S.x ans = [ 1] [ 3] >> S.y ans = [ 1] [ -3/2] % Ví dụ sau coi a là hằng số và giải hai phương trình để tìm u và vu and v. >> [u,v] = solve('a*u^2 + v^2 = 0','u - v = 1') u = [ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))+1] [ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))+1] v = [ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))] [ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))] % thêm phương trình thứ 3 để tính giá trị 3 biến
  58. 58 [a,u,v] = solve('a*u^2 + v^2','u - v = 1','a^2 - 5*a + 6') a = [ 2] [ 2] [ 3] [ 3] u = [ 1/3+1/3*i*2^(1/2)] [ 1/3-1/3*i*2^(1/2)] [ 1/4+1/4*i*3^(1/2)] [ 1/4-1/4*i*3^(1/2)] v = [ -2/3+1/3*i*2^(1/2)] [ -2/3-1/3*i*2^(1/2)] [ -3/4+1/4*i*3^(1/2)] [ -3/4-1/4*i*3^(1/2)] % Nếu khi tìm ẩn số mà hàm solve không tìm ra giải pháp phân tích nó sẽ cho kết quả dạng 32 số >> [x,y] = solve('sin(x+y)-exp(x)*y = 0','x^2-y = 2') x = -6.0173272500593065641097297117905 y = 34.208227234306296508646214438330 % Tương tự, với chú thích “D” có nghĩa là đạo hàm để giải các phương trình vi %phân đơn giản bằng hàm “dsolve” >> y = dsolve('Dy = -a*y') y = C1*exp(-a*t) % chỉ định điều kiện thêm vào >> y = dsolve('Dy = -a*y','y(0) = 1') y = exp(-a*t) % Đạo hàm cấp 2 định nghĩa bởi "D2”. >> y = dsolve('D2y = -a^2*y', 'y(0) = 1, Dy(pi/a) = 0') y = cos(a*t) % một phương trình không tuyến tính tạo ra hai đáp án trong 1 véc tơ >> y = dsolve('(Dy)^2 + y^2 = 1','y(0) = 0') y = [ sin(t)] [ -sin(t)]
  59. 59 Bài tập 1. Tìm mô hình động học cho phản ứng: 2A + B A 2B Biết biểu thức xác định tốc độ phản ứng như sau: 0,72C 2 C r A B A2 B 1 2CA Cơ chế nào của phản ứng là phù hợp với phương trình tốc độ của phản ứng nếu như về mặt hoá học phản ứng chỉ ra rằng hợp chất trung gian chứa một tổ hợp các phân tử phản ứng và không xảy ra phản ứng liên tục? (Thiết lập các phương trình với biến tượng trưng và thực hiện các phép toán.) 2. Phản ứng phân huỷ đinitơ oxit: 1 N O N O 2 2 2 2 Biểu thức tính vận tốc của phản ứng tìm được như sau: k N O2 r 1 2 N 2O 1 k 2 N 2O Hãy đưa ra một cơ chế phản ứng để giải thích cho biểu thức tính vận tốc tìm được ở trên. (Thiết lập các phương trình với biến tượng trưng và thực hiện các phép toán.) 3. Tìm mô hình động học cho phản ứng: H2 + Br2 2HBr Biết rằng biểu thức xác định vận tốc của phản ứng suy ra từ thực nghiệm như sau: 1 k H Br  2 r 1 2 2 HBr HBr k 2 Br2  (Thiết lập các phương trình với biến tượng trưng và thực hiện các phép toán.) 14. Đồ họa trong matlab Matlab ứng dụng đồ họa trong các công việc tài chính, thống kê, phân tích tín hiệu, kỹ thuệt phân tử, động lực học chất lỏng, khoa học khí quyển, 14.1. Đồ họa trong không gian hai chiều 14.1.1. Các hàm vẽ đồ thị Trong tọa độ phẳng đồ thị có thể biểu diễn đạt dưới dạng đường, cột, bậc thang, đường với khoảng sai số, dạng cây, dạng tọa độ cực.
  60. 60 * Đồ thị dạng đường >> x=0:0.05:5 >> y=sin(x.^2) >> plot(x,y) Hàm plot vẽ đồ thị ứng với các cặp điểm của hai ma trận hàng x và y. Khi ta chỉ sử dụng 1 biến y thì lệnh plot(y) mặc định giá trị của x là số thứ tự các phần tử trong ma trận hàng y. Trong trường hợp y là số phức Matlab vẽ đồ thị phần thực và phần ảo: plot(y)=plot(real(y), imag(y)) % đồ thị cột hình chuông >> x = -2.9:0.2:2.9; >> bar(x,exp(-x.*x)); % đồ thị bậc thang sóng hình sin >> x=0:0.25:10 >> stairs(x,sin(x))
  61. 61 % đồ thị thể hiện sai số >> x=-2:0.1:2 >> y=erf(x) >> e = rand(size(x))/10 >> errorbar(x,y,e) % Đồ thị tọa độ cực >> t=0:.01:2*pi >> polar(t,abs(sin(2*t).*cos(2*t))) % đồ thị dạng cây x = 0:0.1:4; y = sin(x.^2).*exp(-x); stem(x,y) 14.1.2. Các tùy chọn Trên một đồ thị của hàm số Matlab cung cấp 4 tùy chọn cho người sử dụng Kiểu đường - (đường liền) (đường gạch đứt) : (đường chấm) -. (đường chấm gạch) (ﭐ)Kiểu dấu tọa độ các điểm vẽ ‘marker’ o x + * . s d() ,^(Δ) p() h( ) Độ dày đường nối các điểm ‘linewidth’ Mặc định 0.5 pt Kích thước điểm đánh dấu ‘MarkerSize’ Mặc định 6pt Màu vẽ cyan hoặc c (lục lam), red hoặc r (đỏ), green hoặc g (xanh lá cây), blue hoặc b (xanh da trời), magenta hoặc m (tím), yellow hoặc y (vàng), black hoặc b (đen),
  62. 62 white hoặc w (trắng), black hoặc k (đen) >> x=0:0.1:8 >> hndl=plot(x,sin(x)) set(hndl,'Marker','x') set(hndl,'LineWidth',1) set(hndl,'MarkerSize',6) set(hndl,'Color','black') Ngoài việc sử dụng hàm set để tùy chọn màu sắc, kích thước đồ thị chúng ta có thể thiết lập các tùy chọn này ngay trong hàm plot, các tùy chọn này được viết dưới dạng chuỗi ký tự. >> y=sin(x) >> z=cos(x) >> plot(x,y,'b >',x,z,'mp') % vẽ đồ thị y=sin(x) màu blue, đường gạch đứt, điểm vẽ hình tam giác hướng phải và đồ thị z=cos(x) màu magenta, điểm vẽ hình sao 14.1.3. Hệ trục tọa độ, nhãn, lưới, hộp chứa trục, chú thích * Các thay đổi với hệ trục tọa độ axis([xmin xmax ymin ymax]) Thiết lập giới hạn x, y trên các trục tọa độ v=axis lập véc tơ v lấy các trị [xmin xmax ymin ymax] trên các trục tọa độ axis auto trả lại thang chia mặc định axis manual Giữ thang chia ở giới hạn hiện tại, nếu hold on đồ vẽ sau giữ cùng giới hạn axis tight đặt giới hạn hệ trục theo khoảng dữ liệu axis ij chuyển sang chế độ hệ tọa độ ma trận, gốc tọa độ ở góc trên bên trái. Trục i theo chiều thẳng dứng, đánh số từ trên xuống dưới, trục j theo chiều ngang đánh số từ trái qua phải
  63. 63 axis xy trở về hệ trục tọa độ đề cac axis equal thiết lập thang chia giống nhau cho cả các trục tọa độ axis image tương tự axis equal nhưng khung hệ trục vừa chứa vùng giữ liệu axis square lập khung hệ trục hình vuông axis normal trả lại kích thước đầy đủ của khung hệ tọa độ axis on, axis off bật tắt chế độ hiển thị trục tọa độ, nhãn trục, đánh dấu diểm và nền * Lưới, khung trong hệ trục tọa độ Lệnh grid on, grid off bật tắt chế độ vẽ lưới trên hệ tọa độ. Lệnh box on, box off bật tắt chế độ vẽ khung hệ tọa độ * Nhãn, chú thích Nhãn chú thích các trục tọa độ được hiển thị bằng lệnh xlabel(‘xâu kí tự’), ylabel(‘xâu ký tự’). Lệnh title(‘chuỗi ký tự’) cho phép hiển thị tiêu đề trên đỉnh cho đồ thị. Để hiển thị chuỗi ký tự tại tọa độ (x,y) bất kỳ trên đồ thị ta sử dụng lệnh text(x,y,’xâu ký tự’), lệnh gtext(‘xâu ký tự’) có chức năng tương tự nhưng cho phép chúng ta chọn vị trí đặt xâu ký tự. Ví dụ: >> x=-6:0.4:6 >> y=(sqrt(x.^2+3.*x+4))./(x+4)+x.^3 >> plot(x,y,'-kx') % đồ thị có điểm ngắt quãng đó là x=-4 trong trường hợp này lệnh plot vẽ đồ thị theo điểm dó đó không thể hiện rõ tiệm cận. Ta có thể dùng lệnh fplot đêt thấy rõ hơn tiệm cận. >> f='(sqrt(x.^2+3.*x+4))./(x+4)+x.^3' f = (sqrt(x.^2+3.*x+4))./(x+4)+x.^3 >> fplot(f,[-6,6])
  64. 64 Trở lại với lệnh plot(x,y) bây giờ chúng ta thêm các chú thích vào đồ thị. >> xlabel('Bien doc lap x') >> ylabel('Bien phu thuoc y') >> title('Do thi ham so y=(sqrt(x.^2+3.*x+4))./(x+4)+x.^3') >> text(-4,-100,'x=-4 ham so khong xac dinh') Theo mặc định khi chúng ta vẽ một đồ thị khác Matlab sẽ xóa hình vẽ trước đi và vẽ hình và mới trên cửa sổ đó, để giữ đồ thị này chúng ta mở cửa sổ mới bằng lệnh figure(n) trong đó n là chỉ số cửa sổ chúng ta tự chọn. Muốn vẽ nhiều đồ thị trên hệ trục tọa độ trên ta sử dụng lệnh hold on để giữ đồ thị vừa vẽ lại và lệnh hold off có chức năng ngược lại. Để biết đồ họa đang ở trạng thái hold on hay hold off chúng ta sử dụng lệnh ishold. Ngoài phương pháp dùng các câu lệnh như trên (chỉ phù hợp khi chúng ta thiết lập một M-file) trong trường hợp thao tác trực tiếp với dữ liệu, trong cửa sổ đồ họa chúng ta có đầy đủ các lựa chọn để thay đổi các thuộc tính giao diện của đồ thị.
  65. 65 Mục edit Nhóm lệnh Cut, Copy, paste, clear được sử dụng cắt, copy, chèn, xóa các mục được chọn. Lệnh copy figure: Cho phép copy toàn bộ đồ thị và chú thích để có thể chèn vào các tài liệu khác như word hay exel Lệnh copy option: Thay đổi các thuộc tính màu sắc, kích thước, kiểu format ảnh copy. Figure Properties: Thay đổi hầu hết các thuộc tính của chuỗi ký tự và đường vẽ đồ thị. Axes Properties: Thay đổi thuộc tính của hệ tọa độ Mục insert: Thêm và thay đổi nhãn, chú thích, trục tọa độ, mũi tên, đường thẳng Tuy nhiên cũng như nhiều các phần mềm được viết gần đây chúng ta chỉ cần nháy đúp vào các mục cần thay đổi hoặc nháy chuột phải vào các mục đó là có thể thay đổi các tùy chọn theo ý muốn.
  66. 66 14.2. Đồ họa trong không gian 3 chiều 14.2.1. Đồ thị bề mặt và lưới Đồ thị bề mặt và lưới được xây dựng dựa trên nguyên tắc nối các điểm có cùng tọa độ x và các điểm có cùng tạo độ y. Cũng có thể nói đồ thị bề mặt và lưới hình học hóa các ma trận hai chiều. Chúng ta hãy xét ví dụ với ma trận hai chiều thiết lập bởi hàm peaks. Đây là một hàm mẫu hai biến trong matlab. * Vẽ đồ thị lưới >> z=peaks(25) % lập ma trận z gồm 25 hàng, 25 cột. >> mesh(z); % vẽ đồ thị lưới x,y ngầm định là chỉ số phần tử hàng và phần tử cột. Lệnh đầy đủ vẽ đồ thị lưới MESH(X,Y,Z,C) trong đó x, y, z là các thông số phương ngang, phương dọc và phương thẳng đứng, C là thông số hệ màu. Lệnh MESH(X,Y,Z) sử dụng C = Z, màu sắc của lưới thể hiện chiều cao (độ lớn) của z. * Vẽ đồ thị bề mặt >> z=peaks(25) >> surf(z) % đồ thị bề mặt >> colormap(jet) Lệnh colormap dùng màu sắc để mô tả độ cao thấp của biến z. * Vẽ đồ thị bề mặt với bóng >> z=peaks(25) >> surfl(z)
  67. 67 >> shading interp % tạo bóng >> colormap(pink) % chọn màu Ngoài các hàm mesh, surf matlab cung cấp một số hàm khác với cấu trúc câu lệnh tương tự như meshz, waterfall * Biểu diễn độ cao qua các đường đồng mức >> z=peaks(25) >> contour(z,16) % biểu diễn độ cao z qua 16 đường đồng mức. Ngoài ra chúng ta có thể sử dụng hàm pcolor(z) để thể hiện độ cao theo màu sắc. * Đồ thị biểu diễn sự biến thiên >> [x,y] = meshgrid(-2:.2:2, -2:.2:2) z = x .* exp(-x.^2 - y.^2) [px,py] = gradient(z,.2,.2) >> contour(x,y,z), hold on >> a=quiver(x,y,px,py) >> set(a,'Color','black') >> hold off Đồ thị quiver biểu diễn sự biến thiên giá trị dưới dạng các mũi tên với hai phần (px,py) tại điểm có tọa độ (x,y). Trong đó px tương ứng với dz/dx, py tương ứng với dz/dy tương ứng với các khoảng chia 0.2 theo truc ox và 0.2 theo trục oy. * Đồ thị cắt lớp >> [x,y,z] = meshgrid(-2:.2:2,- 2:.2:2,-2:.2:2)
  68. 68 v = x .* exp(-x.^2 - y.^2 - z.^2) slice(v,[5 15 21],21,[1 10]) axis([0 21 0 21 0 21]) colormap(jet) Hàm slice vẽ đồ thị lớp của các hình khối. tại mặt x=5; 15; 21, y=21, z=1; 10 14.2.2. Đồ thị đường, điểm trong không gian 3D PLOT3(x,y,z), trong đó x, y, z là 3 vectơ có cùng độ dài, vẽ đồ thị đường trong không gian 3 chiều đi qua các điểm có tọa độ tương ứng là các phần tử trong 3 vectơ x, y, z. PLOT3(X,Y,Z), khi X, Y và Z là các ma trận 3 chiều cùng kích thước, vẽ nhiều đường thẳng theo các dữ liệu cột của X, Y, Z Để thay đổi kiểu đường, kiểu đánh dấu điểm, màu sắc chúng ta đưa vào thông số s PLOT3(X,Y,Z,s) trong đó s là 1, 2 hay 3 ký tự xâu mô tả đặc tính (14.1) PLOT3(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3,s3, ) vẽ nhiều đồ thị trên hệ trục. Ví dụ đường helix: >> t = 0:pi/50:10*pi plot3(sin(t),cos(t),t) 14.2.3. Các tùy chọn, hệ trục tọa độ, nhãn, lưới, hộp chứa trục, chú thích Đồ thị trong không gian 3 chiều cũng xử dụng các hàm chú thích đồ thị như nhãn, tiêu đề, các hàm về hệ trục tọa độ và tạo lưới tương tự đồ thị hai chiều. Do có 3 trục tọa độ nên chúng ta có 3 hàm nhãn trục xlabel, ylabel, zlabel, chú thích đồ thị text(x,y,z,’chu thich’). Cửa sổ đồ thị 3D cũng giữ nguyên các nguyên tắc thay đổi giao diện như đồ thị 2D tuy nhiên các công cụ rotate 3D và camera toolbar hữu ích hơn.
  69. 69 rotate 3D camera toolbar Khi chọn biểu tượng rotate 3D chúng ta có thể quan sát đồ thị dưới mọi góc độ. Công cụ trong camera toolbar được sử dụng để di chuyển, phóng to thu nhỏ, quay, thay đổi ánh sáng của đồ thị. >> [x,y] = meshgrid(-2:.2:2, -2:.2:2) z = x .* exp(-x.^2 - y.^2) [px,py] = gradient(z,.2,.2) >> a=mesh(x,y,z) a = 101.0045 Chúng ta hãy xem xét tính chất của đồ thị từ menu Edit Figure Properties (tính chất của Axes, Curent Object cũng ở cùng cửa sổ) * Edit Properties for: cho phép chúng ta lựa chọn thay đổi đồ thị và các giao diện của nó như trục số, bề mặt. a) Khi “figure:1” được chọn lập tức các thông số có thể sửa đổi được xuất hiện tiếp sau:
  70. 70 Do đồ thị 2 không được chọn nên khi nháy phím chọn các yếu tố có thể thay đổi được của figure không hiện ra. Cửa sổ lựa chọn figure cho phép những thay đổi giao diện ngoài đồ thị. Color: Thay đổi màu nền cửa sổ đồ thị, chúng ta có thể nhập dạng số hoặc chon màu (chú ý các số phải ≥0 và ≤1 chúng ta sẽ tìm hiểu về phối màu của matlab trong mục sau) Menu bar: Tắt bật thanh menu Figure number: Tắt bật hiển thị số thứ tự của hình được vẽ Window name: Đặt tên cửa sổ đồ họa Renderer mode: Theo mặc định là openGL, openGL là phương thức được Matlab sử dụng để truy cập phần cứng đồ họa của hệ thống máy tính, thông thường nhanh hơn Painters và Z-buffer. b) Khi axes được chọn Cửa sổ giao diện như hình bên, chúng ta có thể thay đổi các thuộc tính của các trục Ox, Oy, Oz, kiểu đường, tương quan đồ thị và trục số, ánh sáng, góc nhìn Mỗi trục số (ví dụ Ox) chúng ta có thay đổi các thông số: Label: Chú thích trục số Color: Thay đổi màu sắc trục số Grid: Hiển thị lưới đồ thị Limit: Giới hạn trục số Ticks: Vị trí vạch chia chia trục số Lable: Hiển thị số cho các vị trí chia Scale: Cho phép chon hệ trục dạng tuyến tính hoặc dạng logarit, Normal và Reverse là hai hướng ngược chiều của trục tọa độ. Set axes auto shape: Tự động vẽ trục tọa độ Set tight limits: Vẽ hệ trục tọa độ có giới hạn vừa bằng vungd giữ liệu.
  71. 71 Cửa sổ style Title: Chú thích đồ thị Properties: Thay đổi màu sắc, font chữ Axes box: Bật tắt khung hệ trục tọa độ Background: Đặt nền mặt phẳng tạo bởi các trục số Axes line width: Độ rộng đoạn thẳng vẽ trục số (pt) Các lựa chọn tiếp theo để thy đổi font chữ. * Cửa sổ Aspect cho phép thay đổi tương kích thước giữa đồ thị và hệ trục tọa độ. * Lights: Chiếu sáng đồ thị từ nguồn sáng tại vị trí khác nhau. Nếu ta đặt nguồn sáng phía dưới đồ thị ngược chiều nhìn ta sẽ được đồ thị tối, ngược lại ta sẽ được đồ thị sáng thể hiện rõ các màu sắc. * Viewpoint: Thay đổi góc quan sát đồ thị. Chúng có thể thay đổi góc trông để nhìn đồ thị theo phương ngang, từ dưới lên c) Khi surf được chọn >> [x,y] = meshgrid(-2:.2:2, -2:.2:2) z = x .* exp(-x.^2 - y.^2) a=mesh(x,y,z) Trên cửa sổ Property Editor – Surface – Data chúng ta có thể chọn các phím Edit data để thay đối dữ liệu nguồn. Colormaps: Lựa chọn các hệ màu tô bề mặt lưới (14.2.4). Cửa sổ Face Color: Tô màu bề mặt phía dưới lưới, nếu chúng ta chọn none lúc đó bề mặt trong suốt chúng ta có thể thấy các đường lưới chia trục tọa độ. Lệnh Faceted CData (flat) nội suy dữ liệu tuyến tính nên màu trong một ô lưới là giống nhau. Mapped CData (texturemap) mịn hóa bề mặt đồ thị. Blended CData (interp) nội suy dữ liệu theo phương pháp đường cong nên sự chuyển màu mịn hơn. Lighting: Cung cấp một số kiểu ánh mặc định Alpha: Bao hàm một số lệnh như: clear(0.0) tắt chế độ bề mặt dưới lưới, transparent (0.5) độ trong suốt là 0.5, opaque (1.0) hoàn toàn không nhìn thấy đường vẽ phía sau. Ngoài ra còn một số phím cung cấp các dạng dao diện khác nhau của đồ thị.
  72. 72 Color(none) 14.2.4. Điều khiển màu và ánh sáng Mô hình màu RGB (red-green-blue) được sử dụng để hiển thị đồ họa trên màn hình màu CRT (màn hình sử dụng ống phóng điện tử). Từ ba màu gốc khi phối trộn cho ta các màu sắc khác nhau, với quy ước thang màu từ 0 tới 1. Chúng ta có thể sử dụng các các số từ 0 tới 1 cho mỗi màu đề phối tạo màu cho nền cửa cửa sổ, trục số Đối với đồ thị chúng có thể sử dụng các bản đồ màu để chứa thông tin. >> colormap(M) Thông thường khi ta vẽ đồ thị lưới hay mặt Matlab tự động đặt chế độ màu jet Ngoài việc tác động vào đồ họa từ cửa sổ đồ họa chúng ta có thể sử dụng các hàm trong Command Window. Các hàm kiểm soát ánh sáng và màu sắc Điều khiển màu sắc colormap - Bảng màu caxis - Khoảng giá trị thanh màu hiện thời shading - Color shading mode. hidden - Tắt bật chức năng nhìn qua lưới đồ thị brighten - Thay đổi độ sáng tối của bảng màu colordef - Mặc định màu sắc graymon - Mặc định đồ họa đối với màn hình đen trắng Ánh sáng surfl - Vẽ và tạo bóng 3D đồ thị bằng chiếu sáng lighting - Sử dụng chức năng chiếu sáng surface và patch material - Điểu khiển tính chất phản xạ của bền mặt tạo bởi các hàm SURF, MESH, PCOLOR, FILL, and FILL3 specular - Điều khiển tính phản chiếu diffuse - R = DIFFUSE(Nx,Ny,Nz,S) trả lại hệ số phản xạ của bề mặt với các vec tơ trực giao [Nx,Ny,Nz]. S là 3 vec tơ xác định hướng nguồn sáng. S cũng có thể là hai vec tơ surfnorm - Trả lại trạng thái thông thường
  73. 73 Các thang màu sử dụng với lệnh colormap hsv - Bão hòa màu sắc hot - Đen - đỏ - vàng - trắng gray - Thang màu xám tuyến tính bone - Thang màu xám pha xanh lơ nhẹ copper - Thanh màu đồng tuyến tính pink - Chuyển màu tùng lam của màu hồng white - Trắng hoàn toàn flag - Xen kẽ đỏ, trắng, xanh da trời, đen lines - Màu nét vẽ colorcube - Hình khối màu được làm nổi bật vga - Sử dụng 16 màu jet - Sự biến thiên màu sắc bão hòa. prism - Bản đồ màu kiểu lăng kính tán sắc cool - Chuyển màu giữa lục lam và tím. autumn - Chuyển màu giữa đỏ và vàng. spring - Chuyển màu giữa tím và vàng winter - Chuyển màu giữa xanh lam và xanh lá cây summer - Chuyển màu giữa xanh lá cây và vàng Các khối lệnh cơ bản Các lệnh đa năng Quản lý hàm và lệnh addpath Thêm thư mục và đường dẫn của MATLAB doc Hiển thị tài liệu HTML trong Help browser docopt Hiển thị vị trí thư mục help file nền UNIX platforms genpath Tạo đường dẫn dạng xâu help Hiển thị các file help dạng M-file cho các hàm của MATLAB trong the Command Window helpbrowser Hiển thị Help browser truy cập tất cả MathWorks trợ giúp trực tuyến helpdesk Hiển thị Help browser
  74. 74 helpwin Hiển thị M-file help và cung cấp truy cập tới M-file help cho tất cảc các hàm lasterr Thông báo lỗi cuối cùng lastwarn Thông báo cảnh báo cuối cùng license Đưa ra số đăng ký sản phẩm lookfor Tìm kiếm theo từ khóa trong tất cả mục từ của help partialpath Một phần tên đường dẫn path Kiểm soát thư mục của MATLAB tìm kiếm đường dẫn pathtool Mở GUI để nhìn và thay đổi đường dẫn của MATLAB profile Khởi động M-file profiler, công cụ gỡ rối và tối ưu mã profreport Tạo 1 báo cáo hiện trạng rehash Khởi tạo lại caches (vùng nhớ lưu trữ) hàm và file hệ thống rmpath Loại bỏ thư mục từ đường dẫn tìm kiếm của MATLAB support Mơ trang wed trợ giúp công nghệ MathWorks type Danh sách file ver Hiển thị thông tin phiên bản của MATLAB, Simulink, and toolboxes version Số phiên bản MATLAB web Dẫn đến Help browser hoặc Web browser tại file hoặc Web site what Danh sách các file đặc trưng của MATLABở thư mục hiện tại whatsnew Hiển thị README file của MATLAB và toolboxes which Vị trí các hàm và file Quản lý biến và không gian làm việc clear Xóa các dữ liệu trong workspace disp Hiển thị văn bản hoặc mảng length Chiều dài của vec tơ load Lấy lại các biến từ đĩa memory Trợ giúp vì sự giới hạn bộ nhớ mlock Chống xóa M-file munlock CHo phép xóa tất cả M-file openvar Thay đổi đặc tính biến trong Array Editor pack Hợp nhất bộ nhớ không gian làm việc save Lưu các biến trong workspace và đĩa saveas Lưu hình ảnh hoặc model sử dụng các format đặc biệt size Cho chiều của mảng who, whos Danh sách các biến trong không gian làm việc workspace Hiển thị Workspace Browser, giao diện đồ họa để quản lý workspace Kiểm soát command window clc Xóa chữ trong Command Window echo Lấy lại lệnh trong quá trình thực hiện M-file format Điều khiển hiển thị format cho đầu ra home Di chuyển con trỏ lên góc trên bên trái của Command Window more Quản lý các trang đưa ra đối với Command Window
  75. 75 Làm việc với file và môi trường hoạt động beep Tạo âm thanh bíp cd Thay đổi thư mục làm việc checkin Kiểm tra file trong hệ thống điều khiển nguồn checkout Kiểm tra file ngoài hệ thống điều khiển nguồn cmopts Lấy tên hệ thống điều khiển nguồn, và các file kế hoạch PVCS copyfile Copy file customverctrl Cho phép người sử dụng tác động vào hệ thống nguồn delete Xóa file và đồ thị diary Lưu công việc trong command window vào đĩa dir Hiển thị danh sách thư mục dos Thực hiện 1 lệnh DOS và trả lại kết quả edit Sửa chữa, soạn thảo 1 M-file fileparts Lấy đường dẫn tên file filebrowser Hiển thị trình duyệt Current Directory, để xem file fullfile Xây dựng tên file đầy đủ từ đường dẫn info Hiển thị thông tin liên hệ hoặc các file Readme của hộp công cụ inmem Các hàm trong bộ nhớ ls Hiển thị các thư mục trên HĐH UNIX matlabroot Lấy thư mục gốc cài đặt matlab mkdir Tạo thư mục mới open Mở các file dựa trên phần mở rộng pwd Hiển thị thư mục hiện tại tempdir Trả lại tên của thư mục tạm thời của hệ thông tempname Tên duy nhất cho file lưu tạm thời undocheckout Trả lại kiểm tra trước từ hệ thống điều khiển nguồn unix Thực hiện lệnh UNIX và trả lại kết quả ! Thực hiện lệnh hệ điều hành Khởi động và thoát chương trình MATLAB finish MATLAB kết thúc M-file exit Kết thúc MATLAB matlab Khởi động MATLAB (Hệ thồng UNIX) matlabrc MATLAB khởi động M-file quit Kết thúc MATLAB startup MATLAB khởi động M-file Các ký tự đặc biệt và toán tử + Cộng - Trừ * Nhân ma trận .* Nhân mảng ^ Lũy thừa ma trận .^ Lũy thừa mảng kron Tích cơ Kronecker \ Chia trái
  76. 76 / Chai phải ./ and .\ Chia mảng trái và phải : hai chấm ( ) Ngoặc tròn [ ] Ngoặc vuông {} Ngoặc xoắn . Dấu chấm thập phân Sự tiếp tục , Dấu phẩn ; Dấu chấm phẩy % Chú thích ! Chấm than ' Chuyển vị và nháy trên .' Chuyển vị không liên hợp = Gán == Bằng Dấu quan hệ lớn nhỏ & Logic và | Logic hoặc ~ Logic không xor Logic hoặc tuyệt đối Các hàm logic all Kiểm tra xác định xem tất cả các phẩn tử có phải là khác không hay không any Kiểm tra xen có bất cứ phần tử nào khác không không exist Kiểm tra xem có 1 biến hay file nào đang tồn tại hay không find Tìm các chỉ số và các giá trị các thành phần khác không is* Dò tìm trạng thái isa Dò tìm thành phần của 1 lớp cho sẵn iskeyword Kiểm tra xem 1 xâu có là từ khóa của MATLAB hay không isvarname Kiểm tra xem 1 xâu có là tên 1 biến có hiệu lực của Matlab hay không logical Biến đổi giá trị dạng số sang logic mislocked True nếu M-file không thể xóa Xây dựng và gỡ rối ngôn ngữ lập trình MATLAB là một ngôn ngữ lập trình builtin Thực hiện các hàm thiết lập từ phương pháp xếp chồng eval Giải thích các xâu có trong biểu thức của MATLAB evalc Đánh giá biểu thức của MATLAB với sự sao chép evalin Đánh giá câu lệnh trong không gian làm việc feval Đánh giá hàm function Các hàm M-file global Định nghĩa biến toàn bộ nargchk Kiểm tra số của các đối số đưa vào persistent Xác định biến cục bộ
  77. 77 script Tập lệnh M-files Điều khiển luồng (Control Flow) break Thoát việc thực hiện vòng lặp for hay while case Câu lệnh chuyển catch Khởi động việc bắt giữ các khối thông tin continue Bỏ qua sự kiểm soát tới vòng lặp tiếp theo của vòng lặp for hay while else Điều kiện thực hiện câu lệnh elseif Điều kiện thực hiện câu lệnh end Thoát for, while, switch, try và if ở cuối câu lệnh error Hiển thị thông báo lỗi for Lặp lại câu lệnh với số lần xác định if Thực hiện các câu lệnh điều kiện otherwise Mặc định đường dẫn của câu lệnh switch return Trả về hàm gọi switch Lựa chọn trong số nhiều trường hợp dựa trên biểu thức try Bắt đầu kiểm tra khối dữ liệu warning Hiển thị cảnh báo while Lặp lại các biểu thức với số lần không xác định Nhập dữ liệu (Interactive Input) input Đòi hỏi người sử dụng nhập dữ liệu keyboard Gọi bàn phím trong M-file menu Tạo ra 1 danh sách cho người sử dụng chọn nhập dữ liệu pause Tạm dừng thực hiện lưu thông tin và file tạm thời Lập trình hướng đối tượng (Object-Oriented Programming) class Tạo đối tượng hoặc trả lại lớp của đối tượng double Chuyển sang độ chính xác theo kiểu double inferiorto Quan hệ lớp dưới inline Xây dựng đối tượng nội tuyến int8, int16, int32 Chuyển sang số nguyên có dấu isa Dò tìm đối tượng của một lớp đã cho loadobj Mở rộng hàm nhập cho các đối tượng sử dụng saveobj Lưu bộ lọc cho các đối tượng single Chuyển sang độ chính xác kiểu single superiorto Liên hệ lớp cao hơn uint8, uint16,uint32 Chuyển sang số nguyên không dấu Gỡ rối dbclear Xóa điểm ngắt dbcont Trở lại quá trình thực hiện dbdown Chuyển ngữ cảnh không gian làm việc địa phương dbmex Gỡ rối MEX-file có hiệu lực dbquit Thoát chức năng gỡ rối dbstack Hiển thị hàm gọi ngăn xếp
  78. 78 dbstatus Danh sách tất cả các điểm ngắt dbstep Thực hiện 1 hay nhiều dòng từ điểm ngắt dbstop Đặt điểm ngắt trong 1 hàm M-file dbtype Danh sách M-file với số dòng dbup Chuyển ngữ cảnh không gian làm việc địa phương Các kênh điều khiển hàm function_handle Kiểu dữ liệu MATLAB là 1 kênh điều khiển tới 1 hàm functions Trả lại thông tin về 1 kênh điều khiển hàm func2str Xây dựng 1 xâu tên hàm từ 1 kênh điều khiển hàm str2func Xây dựng 1 kênh điều khiển hàm từ 1 xâu tên hàm Các ma trận cơ sở và thao tác với ma trận (Elementary Matrices and Matrix Manipulation) Ma trận cơ sở và mảng (Elementary Matrices and Arrays) blkdiag Xây dựng 1 ma trận đường chéo khối từ các đối số đưa vào eye Ma trận đơn vị linspace Tạo vec tơ tuyến tính cách đều logspace Tạo vec tơ cách đều theo logarit numel Số các phần tử trong ma trận hay các tế bào trong mảng ones Tạo mảng tất cả các phần tử bằng 1 rand Tạo các số hay mảng bất kỳ phân bố đều randn Tạo các số hay mảng bất kỳ phân bố thông thường zeros Tạo mảng không : (colon) Vec tơ cách đều Hằng số và biến đặc biệt (Special Variables and Constants) ans Cho kết phép toán gần nhất computer Xác định các máy tính mà MATLAB đang chạy eps Dấu chấm động liên quan tới độ chính xác i Thành phần ảo Inf Vô cực inputname Tên đối số nhập j Thành phần ảo NaN Phủ định số nargin, nargout Số của các đối số hàm số nargoutchk Số hợp lệ của các đối số đưa ra pi Tỷ số giữa chu vi và đường kính vòng tròn realmax Số lớn nhất chương trình có thể tính toán được realmin Số nhỏ nhất chương trình có thể tính toán được varargin,varargout Bỏ qua hoặc trả lại các số thay đổi của các đối số Ngày tháng và thời gian (Time and Dates) calendar Lịch clock Thời gian hiện tại, vec tơ ngày tháng cputime Thời gian sử dụng CPU
  79. 79 date Xâu ngày tháng hiện tại datenum Dãy số ngày tháng datestr Format xâu ngày tháng datevec Các thành phần ngày tháng eomday Ngày cuối của tháng etime Thời gian trôi qua now Ngày tháng và thời gian hiện tại tic, toc Theo dõi thời gian weekday Ngày của tuần Thao tác với ma trận (Matrix Manipulation) cat Mảng phụ thuộc diag Ma trận đường chéo và đường chéo của ma trận fliplr Lật ma trận từ trái sang phải flipud Lật ma trận từ trân xuống dưới repmat Tái tạo và xếp kề 1 mảng reshape Phục hồi hình dạng 1 mảng rot90 Quay ma trận 90 độ tril Tách phần tam giác dưới của ma trận triu Tách phần tam giác trên của ma trận : (colon) Chỉ số mảng và xắp xếp lại mảng Các hàm vector (Vector Functions) cross Nhân chéo vec tơ dot Nhân điểm vec tơ intersect Tập hợp giao nhau của hai vec tơ ismember Dò tìm thành phần của tập hợp setdiff Trả lại tập hợp các phần tử khác nhau của hai vec tơ setxor Tập hợp phần không giao nhau của 1 trong hai vec tơ union Tập hợp của hai vec tơ unique Các thành phần độc nhất của 1 vec tơ Các ma trận chuyên dụng (pecialized Matrices) compan Ma trận Companion gallery Các ma trận thử hadamard Hadamard hankel Hankel hilb Hilbert invhilb Nghịch đảo của ma trận Hilbert magic Magic square pascal Pascal toeplitz Toeplitz wilkinson Ma trận kiểm tra Wilkinson's eigenvalue Các hàm toán học cơ sở (Elementary Math Functions) abs Giá trị tuyệt đối và agumen của số phức
  80. 80 acos,acosh Hàm ngược cosine và cosine hyperbol acot,acoth Ihàm ngược cotangvà cotang hyperbol acsc,acsch Hàm ngược cosec và cosec hyperbol angle Góc pha asec,asech ÀHm ngược sec và sec hyperbol asin, asinh Hàm ngược sin và sin hyperbol atan,atanh Hàm ngược tang và tang hyperbol atan2 Hàm ngược tang góc phần tư ceil Làm tròn tới vô cùng complex Xây dựng dữ liệu phức từ phần thực và phần ảo conj Liên hợp phức cos, cosh Cosin và cosin hyperbol cot, coth Cotang và cotang hyperbol csc, csch Cosec và cosec hyperbol exp Theo quy luật mũ fix Làm tròn tới không floor Làm tròn tới âm vô cùng gcd Ước số chung lớn nhất imag Phần ảo của số phức lcm Bội só chung lớn nhất log Logarit tự nhiên log2 Logarit cơ số 2 và tách số dấu chấm động thành phần mũ và phần giá trị log10 Logarit cơ số 10 mod Dấu số dư nchoosek Hệ số nhị thức hoặc tất cả tổ hợp real Real part of complex number rem Số dư round Làm tròn tới số nguyên gần nhất sec, sech Sec và sec hyperbol sign Hàm dấu sin, sinh Sin và sin hyperbol sqrt Căn bậc 2 tan, tanh Tang và tang hyperbol Các hàm toán học chuyên dụng (Specialized Math Functions) airy Các hàm Airy besselh Cá hàm Bessel lọa 3 (Hàm Hankel) besseli, besselk Các biến thể hàm Bessel besselj, bessely Hàm Bessel beta, betainc, betaln Các hàm Beta ellipj Các hàm elip Jacobi ellipke Các số nguyên thuộc elip loại 1 và loại 2 erf, erfc, erfcx, erfinv Hàm sai số expint Số nguyên thuộc mũ factorial Hàm giai thừa gamma, gammainc,gammaln Các hàm Gamma legendre Các hàm Legendre kết hợp
  81. 81 pow2 Lũy thừa cơ số 2 và thang số dấu chấm động rat, rats Xấp xỉ phân số hữu tỷ Chuyển đổi hệ trục tọa độ (Coordinate System Conversion) cart2pol Chuyển hệ tọa độ đề các sang hệ tọa độ cực hoặc trụ cart2sph Chuyển hệ tọa độ đề các sang hệ tọa độ cầu pol2cart Chuyển hệ tọa độ cực hoặc trụ sang hệ tọa độ đề các sph2cart Chuyển hệ tọa độ cầu sang hệ tọa độ đề các Hàm ma trận và đại số học tuyến tính (Matrix Functions - Numerical Linear Algebra ) Phân tích ma trận (Matrix Analysis) cond Số điều kiện đối với phép nghịch đảo condeig Số điều với các giá trị riêng det Định thức norm Các tiêu chuẩn ma trận, vec tơ null Không gian trống của 1 ma trận orth Tính trực giao (ange space of a matrix) rank Hạng của một ma trận rcond Ức lượng số điều kiện đảo ma trận rref,rrefmovie Reduced row echelon form subspace Angle between two subspaces trace Tổng các phần tử đường chéo Các phương trình tuyến tính (Linear Equations) chol Thừa số Cholesky inv Ma trận nghịch đảo lscov Phương pháp bình phương tối thiểu với sự đồng biến đã biết lu Thừa số ma trận LU lsqnonneg Bình phươg tối thiểu không phủ định minres Phương pháp dư tối thiểu pinv Giả đảo ma trận Moore-Penrose qr Phân tích 3 mặt trực giao symmlq Phương pháp LQ đối xứng Giá trị duy nhất và giá trị riêng (Eigenvalues and Singular Values) balance Tăng độ chính xác trong tính toán giá trị riêng cdf2rdf Chuyển dạng đường chéo phức sang dạng đường chéo thực eig Giá trị riêng và vec tơ riêng gsvd Phân tích giá trị riêng chung hess Dạng Hessenberg của 1 ma trận poly Đa thức với nghiệm đặc biệt qz Tìm thừ số QZ cho giá trị kế thừ chung rsf2csf Chuyển dạng Schur thực sang dạng Schur phức schur Sự phân tích Schur