Chuyên đề MATLAB

24 466 3
Chuyên đề MATLAB

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chuyên đề: Lập trình điều khiển trong Matlab Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội CHUYÊN ĐỀ THIẾT KẾ HỆ THỐNG ĐIỀU KHIỂN DÙNG MATLAB CHƯƠNG 1 – MÔI TRƯỜNG PHÁT TRIỂN ỨNG DỤNG TRÊN MATLAB 1.1. Sơ lược về MATLAB Matlab là 1 ngôn ngữ hiệu năng cao được dung cho tính toán kỹ thuật. Nó tích hợp các công cụ lập trình, hiển thị, tính toán dữ liệu trong 1 môi trường dễ sử dụng, nơi mà các vấn đề, các giải pháp được đưa ra trong 1 dạng toán học rất thông dụng. Matlab bao gồm: - Các hàm tính toán và toán học - Các môi trường phát triển các thuật toán - Mô hình hóa và mô phỏng - Hiển thị, khảo sát, phân tích dữ liệu - Các giao diện đồ họa mang tính chất kỹ thuật và khoa học - Môi trường phát triển ứng dụng gồm phát triển các giao diện đồ họa người dùng GUI Matlab là một hệ thống tương tác mà các phần tử dữ liệu cơ bản là 1 mảng không yêu cầu phải đặt kích thước. Điều này cho phép giải quyết rất nhiều vấn đề tính toán kỹ thuật, đặc biệt là khi giải quyết bài toán về vector, ma trận. Matlab (MATrix LABoratory) khi mới được phát triển thì nó được viết để cung cấp các công cụ cho việc tính toán, thao tác trên ma trận. Matlab được đặc trưng bởi các giải pháp xây dựng được xây dựng trước cho các ứng dụng cụ thể và được gọi là các toolbox. Vĩ dụ: - Simulink là công cụ giúp mô phỏng - DSP: toolbox phục vụ xử lý tín hiệu số (phân tích, chuỗi…) - Math: cung cấp các hàm toán học - Realtime Workshop: mô phỏng thời gian thực - Neural Network: mạng nơ ron - Fuzzy: hàm điều khiển mờ 1.2. Hệ thống phần mềm Matlab Phần mềm Matlab gồm 5 phần chính: 1.2.1. Môi trường phát triển Đây là một tập các công cụ và phương tiện hỗ trợ cho việc sử dụng các hàm, các file của Matlab. Phần lớn các công cụ này dùng cho giao diện người dùng. Nó bao gồm: - Matlab desktop - Cửa sổ lệnh: Comman Window, Command History - Các trình duyệt xem trợ giúp - Các file và tìm kiếm các đường dẫn Chuyên đề: Lập trình điều khiển trong Matlab Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội 1.2.2. Thư viện các hàm toán học của Matlab Đây là 1 tập hợp rất lớn các thuật toán cho việc tính toán từ những hàm tính toán cơ bản như +, - , x, /, sin, cos,… cho tới những hàm tính toán phức tạp hơn như nghịch đảo, ma trận, tính định thức…. 1.2.3. Ngôn ngữ Matlab Đây là ngôn ngữ thao tác trên mảng và ma trận bậc cao với các câu lệnh điều khiển, rẽ nhánh, các hàm, cấu trúc dữ liệu, các dữ liệu vào ra và tính năng lập trình hướng đối tượng. 1.2.4. Quản lý giao diện đồ họa Đây là hệ thống các công cụ đồ họa Matlab. Nó bao gồm các lệnh cho phép hiển thị dữ liệu dưới dạng 2D, 3D, xử lý ảnh, tạo các ảnh động và hiển thị đồ họa 1.2.5. Giao diện lập trình ứng dụng trong Matlab (API – Application Programming Interface) Đây là thư viện cho phép viết các ứng dụng bằng ngôn ngữ C để giao tiếp với môi trường Matlab, nó bao gồm các hàm cho phép gọi các chương trình con trong Matlab hoặc gọi Matlab từ chương trình viết trong C và đọc ghi MAT file *.mat CHƯƠNG 2 – THAO TÁC TRÊN MA TRẬN 2.1. Ma trận Trong Matlab, ma trận là 1 mảng hình chữ nhật chứa các số 2.1.1. Nhập ma trận Ta có thể nhập ma trận trong Matlab theo nhiều cách khác nhau: - Nhập danh sách các phần tử của ma trận >> A = [1 2 3; 4 5 6] Các hàng của ma trận cách nhau bởi một dấu “;”, các phần tử của một hàng cách nhau 1 dấu “space” - Nhập ma trận từ một file bên ngoài Ví dụ có file matran.txt có nội dung như sau : 1 2 3 4 5 6 >>load matran - Sinh ra các ma trận bằng cách sử dụng các hàm được xây dựng trước trong Matlab - Tạo ra các ma trận bằng cách viết những hàm *.m file riêng (gọi là M-file) Ví dụ : >> A = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12 ; 13 14 15 16] ↲ A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Chuyên đề: Lập trình điều khiển trong Matlab Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội 1. Tính tổng ma trận, hoán vị, tìm đường chéo chính (diag) - Tổng ma trận >>sum(A) ans = … kết quả của lệnh này sẽ tính tổng các cột của ma trận A và in ra thành một ma trận hàng Trong Matlab, khi không chỉ rõ biến đầu ra thì Matlab sử dụng biến ans để lưu giữ kết quả tính toán. Hàm “sum” sẽ thực hiện tính tổng các phần tử trong 1 cột của ma trận A và tạo nên một ma trận hàng. - Hoán vị ma trận >>A’ >>sum(A’) >>sum(A’)’ - Tìm đường chéo chính >>diag(A) ans = 1 6 11 16 >>sum(diag(A)) 2. Khái niệm chỉ số, phần tử mảng trong Matlab (subscript) Phần tử ở hàng thứ i và cột thứ j của ma trận A được ký hiệu là A(i,j) Ví dụ: A(4,2) = 14 Có thể tính tổng của mảng thông qua các chỉ số Trong Matlab, có thể truy xuất các phần tử của mảng nhiều chiều thông qua 1 chỉ số duy nhất. Matlab quan niệm 1 ma trận là một vector nối các cột. Ví dụ: A* = (1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16) Do đó: A*(7) = 10 hoặc A(7) = 10 Nếu chúng ta truy xuất các phần tử của mảng mà chỉ số vượt qua kích thước của mảng thì Matlab sẽ báo lỗi. Tuy nhiên, nếu chúng ta truyền giá trị cho một phần tử có chỉ số nằm ngoài kích thước của mảng thì sẽ được 1 mảng mới với kích thước tăng lên. Ví dụ: >>X = A >>X(4,5) = 9 X = 1 2 3 4 0 5 6 7 8 0 9 10 11 12 0 13 14 15 16 9 Chuyên đề: Lập trình điều khiển trong Matlab Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội 2.1.2. Toán tử ‘:’ (colon) Toán tử ‘:’ là một trong những toán tử quan trọng nhất của Matlab. Nó được dùng trong rất nhiều dạng khác nhau trên các ứng dụng của Matlab. Ví dụ: >>1:10 sẽ hiển thị trên 1 hàng một dãy số từ 1 đến 10 1 2 3 4 5…. 10 >>20:-7:5 -> 20 13 6 >>0:pi/4:pi -> 0 0.785 1.5708 2.862 3.1416 Tức là 0 pi/4 pi/2 3pi/4 pi Cho ma trận A - A( :) biểu diễn thành 1 vector tất cả các cột liên tiếp nhau của ma trận dưới dạng 1 hàng - A(2 :5) gồm các phần tử A(2), A(3), A(4), A(5) - A(:,3) biểu diễn tất cả các phần tử ở cột thứ 3 của A - A(:2:4) biểu diễn tất cả các phần tử ở cột từ 2 đến 4 của A - A(1:3,2:4) biểu diễn tất cả các phần tử ở hàng từ 1 đến 3 và cột 2 đến 4 của A Ví dụ: B = [2 4 10 13; 16 3 7 18; 8 4 9 25; 3 12 15 17]                    >>B(:) = ans 2 16 8 3 4 3 4 …. >>B(2:5) ans 16 8 3 4 >>B(:,3) ans 10 7 9 15 >>B(:,2:3) ans 4 10 3 7 4 9 12 15 >>C = B(2:3;1:3) C = 16 3 7 8 4 9 2.2. Biểu thức trong Matlab Giống như hầu hết các ngôn ngữ khác, Matlab cũng sử dụng các biểu thức toán học. Tuy nhiên, các biểu thức ngày cũng thao tác trên ma trận. 2.2.1. Biến Matlab không yêu cầu câu lệnh khai báo biến hay định nghĩa kích thước. Khi Matlab thấy 1 tên biến mới, nó sẽ tự động tạo ra biến và cấp phát vùng nhớ thích hợp cho biến đó. Nếu biến Chuyên đề: Lập trình điều khiển trong Matlab Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội đã tồn tại, nó chỉ thay đổi nội dung của biến và khi cần thiết, nó có thể cấp phát lại bộ nhớ cho biến. Tên biến bao gồm 1 chữ cái, theo sau có thể là bất kỳ số, chữ cái hay dấu ‘_’. Tuy nhiên, Matlab chỉ cho phép tối đa biến có độ dài 31 ký tự. Biến trong Matlab có phân biệt chữ hoa và chữ thường. 2.2.2. Số Matlab sử dụng ký hiệu số thập phan thông thường với dấu ‘.’ thập phân cho các số có phần lẻ. Ký hiệu khoa học thường sử dụng chữ e hoặc E để thể hiện phần lũy thừa 10. Còn các số phức thì dùng ký hiệu j hoặc i. Ví dụ:        Chú ý, dấu * là không cần thiết trong việc biểu thị số phức. Tức là 5*i = 5i. Tuy nhiên, hai biểu thức sau có kết quả khác nhau. >> x = 7/2i x = -3.5i (do biểu thức tương đương với x = 7/(2i)) >>x = 7/2*i x = 3.5i (tương đương x = (7/2)*i)  Ma trận số phức: >>C = [1 2] +i*[3 4] C = 1 + 3i 2 + 4i 2.2.3. Toán tử - Các toán tử trên các biểu thức số học Toán tử Biểu thức + a + b - a – b * a * b Chia trái / c = a/b ⇔ c*b = a Chia phải \ c = a\b ⇔ c*a = b Mũ ^ a^b = a b - Toán tử trên ma trận Toán tử Dạng Ví dụ + A + B [1 2] + [3 4] = [4 6] - A – B [1 2] - [3 4] = [-2 -2] .* A .*B [1 2] .* [3 4] = [1*3 2*4] = [3 8] ./ A ./ B [1 2] ./ [3 4] = [1/3 2/4] = [0.33 0.5] .\ A .\B [1 2] .\ [3 4] = [1\3 2\4] = [3 2] .^ A .^ B [1 2] .^ [3 4] = [1^3 2^4] = [1 3 4 6 ] Chuyên đề: Lập trình điều khiển trong Matlab Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội * C = A * B Nếu A(m,n) B(n,p) Thì C(m,p)          / C = A / B C = A/B ⇔A = C*B Ví dụ 1: Sau khi làm thí nghiệm, người thí nghiệm có một bảng sau về giá trị điện trở và sụt áp trên nó: 1 2 3 4 R 10 4 2.10 4 3.5.10 4 10 5 U 120 80 110 200 Tìm dòng điện và công suất bằng Matlab >>R = [10000 20000 35000 100000]; >>U = [120 80 110 200]; >>I = U./R I = 0.0120 0.004 0.0031 0.002 >>P = U.*I P = 1.44 0.32 0.3457 0.4 Ví dụ 2: >>A = [6 -2;10 3;4 7]; >>B = [9 8;-5 12]; >>C = A*B C = 64 246 75 116 1 116 2.3. Các thao tác khác trên ma trận 2.3.1. Các hàm tạo ma trận - Hàm tạo ma trận đơn vị nxn >>eye(n) Ví dụ: >>eye(3) ans = 1 0 0 0 1 0 0 0 1 >>eye(2,4) ans = 1 0 0 0 0 1 0 0 - Hàm sinh ma trận 0 Chuyên đề: Lập trình điều khiển trong Matlab Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội >>zero(n) hàm tạo ma trận nxn >>zero(n,m) hàm tạo ma trận nxm - Hàm tạo ma trận 1 >>ones(n) >>ones(n,m) - Hàm magic >>magic(n) hàm tạo một ma trận nxn mà tổng các phần tử trên cột = tổng các phần tử trên hàng = tổng các phần tử ở đường chéo. Trong đó, các số của ma trận không bị lặp lại 2 lần. Ví dụ: >>magic(4) ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 - Để tìm thêm các hàm có liên quan đến ma trận, có thể sử dụng lệnh help như sau: >>help elmat - Lệnh Load để nhập ma trận từ file text Ví dụ: có file dl.txt có dạng như sau: 1 2 3 4 5 6 thì: >>load dl.txt dl = 1 2 3 4 5 6 - Dùng m-file Ví dụ: file text1.m có dạng như sau: A = [ 1 2 3 4 5 6] %End thì >>text1 A = 1 2 3 4 5 6 - Liên kết ma trận Chuyên đề: Lập trình điều khiển trong Matlab Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội >>A = [1 2 3; 4 5 6]; >>B = [A; A.*2;A-5; A./2]; Kết quả:                                                    2.3.2. Một số lệnh khác thao tác trên mảng >>max(A) trả về 1 vector hàng các phần tử lớn nhất trong mỗi cột của ma trận A. Nếu A là một ma trận số phức thì giá trị lớn nhất được hiểu là modul của số phức >>min(A) ngược lại của max(A) >>size(A) trả về một vector hàng gồm 2 phần tử [n m] là kích thước hàng, cột của ma trận A >>sort(A) sắp xếp mỗi một cột của A theo thứ tự tăng dần >>det(A) tính định thức Ví dụ: >>A = [6 2; -10 -5; 3 0] A = 6 2 -10 -5 3 0 >>max(A) ans = 6 2 >>min(A) ans = -10 -5 >>size(A) ans = 3 2 >>sort(A) ans = -10 -5 3 0 6 2 >>C = [6 2; -10 -5; 3+4i 0] >>max(C) ans = -10 -5 >>min(C) ans = 3+4i 0 >>sort(C) ans = 3+4i 0 6 2 -10 -5 Chuyên đề: Lập trình điều khiển trong Matlab Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội - Tìm ma trận nghịch đảo >>B = inv(A) Ví dụ: >>A = magic(3) A = 8 1 6 3 5 7 4 9 2 >>B = inv(A) B = 0.1472 -0.1444 0.0639 -0.0611 0.0222 0.1056 -0.0194 0.1889 -0.1028 2.3.3. Xóa hàng và cột >>A = magic(4); >>A(:,2) = [ ] xóa tất cả các phần tử ở cột thứ 2 Ví dụ:                    >>A(:,2) = [ ] A = 16 3 13 5 10 8 9 6 12 4 15 1 >>A(1,3) = [ ] sẽ báo lỗi >>A(2:2:10) = [ ] sẽ xóa các phần tử của vector hàng A từ phần tử thứ 2 đến thứ 10 và cách nhau 2 phần tử Kết quả: A = [16 9 3 6 13 12 1] 2.4. Đa thức 2.4.1. Nhập đa thức Một đa thức f(x) bậc n được biểu diễn như sau:                             có thể biểu diễn f là 1 ma trận:               Ví dụ : >>f = [3 7 2 1] Chuyên đề: Lập trình điều khiển trong Matlab Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội thì              2.4.2. Các phép toán trên đa thức Giả sử, có 2 đa thức có bậc khác nhau :                       Do đó, để nhập đa thức này, các vector sẽ khai báo như sau: >>f = [9 -5 3 7] ; >>g = [6 -1 2] ; Tuy nhiên, nếu muốn thao tác trên 2 ma trận này, chúng nên được làm cho cùng bậc với nhau, tức là cần nâng bậc của g(x) lên cho bằng bậc của f(x) >> g = [0 6 -1 2] - Phép cộng >>h = f + g h = 9 1 2 9 - Phép tích chập (convalution) >>f = [9 -5 3 7]; >>g = [0 6 -1 2]; >>h = conv(f,g)                             h = 54 39 41 29 -1 14 - Xác định bậc của hàm >>length(conv(f,g)) = length(f)+length(g)-1 Ví dụ: Tổng hợp sơ đồ: W1 W2 X                                                       >>num1 =[2 3]; >>den1 = [3 5 1]; >>num2 = [1 0]; [...]... >>r = [3+5i;3-5i;1]; >>f = poly(r) f= 1 -7 40 -34 Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội Chuyên đề: Lập trình điều khiển trong Matlab CHƯƠNG 3 – FILE, HÀM VÀ CÁC CẤU TRÚC DỮ LIỆU 3.1 File trong Matlab Có 3 kiểu file trong Matlab: - M-file (*.m) - MAT-file (*.mat) - Các file dữ liệu (ASCII file) là các file được viết theo chuẩn mã ASCII Tùy theo mục đích... Nội Chuyên đề: Lập trình điều khiển trong Matlab Lưu ý, khi truyền tham số đầu vào cho hàm, nếu số lượng biến vào ở lời gọi hàm nhỏ hơn số lượng biến vào thực tế, Matlab sẽ nhận biến đầu tiên từ trái sang (ở Ví dụ trên, biến vào đầu tiên là x)  Truyền đối mục tùy biến cho hàm varargin và varargout Hai hàm này cho phép truyền bất cứ số lượng đối mục vào va ra nào cho một lời gọi hàm Thực chất, Matlab. .. nội dung của file_name Mặc đinh: file_name.m Trường hợp khác file_name.ext Hiển thị các file của Matlab Hiển thị các file của Matlab trong thư mục xác định Hiển thị tên thư mục hiện hành 3.1.2 M-file Matlab sử dụng 2 loại m-file là script-file và function-file - - Script-file chứa một loạt các câu lệnh của Matlab Nó thích hợp khi sử dụng nhiều lệnh hay làm việc trên các mảng Nhưu vậy, khi gọi file này... dạng: “Dien tich hinh chu nhat 3 x 5 là S = 15” 2 Function File Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội Chuyên đề: Lập trình điều khiển trong Matlab Không giống script-file, tất cả các biến trong Function file đều là biến cục bộ Các thành phần chính của 1 Function file gồm:  Dòng định nghĩa hàm Dòng H1 Các dòng help Thân hàm Các chú thích Dòng định nghĩa... trong thư mục có tên xác định (nằm trong trong danh sách thư mục làm việc của Matlab – có thể thêm hoặc bớt) Xóa file Nạp ma trận lưu trong file_name Phần mở rộng có thể là txt hoặc mat Keyword: -ascii -double Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội Chuyên đề: Lập trình điều khiển trong Matlab >>type file_name >>what >>what dir_name >>pwd Hiển thị nội dung của... Khoa Hà Nội Chuyên đề: Lập trình điều khiển trong Matlab tong = tong + u(i); end end m = tong; %End of File >> c = [1 2 3 4 5 6 7 8 9 10] >>[avg, tongch] = Test10(c) avg = 5.5 tongch = 30 4 Private-Function Là các hàm nằm trong thư mục con có tên Private Chúng chỉ được gọi đối với các hàm nằm ở thu mục mẹ Chú ý: không được đặt (add) các thư mục private nằm trong đường dẫn chứa thư mục của Matlab CHƯƠNG... học VD: 1.25e-5 Dạng khoa học như trên Dạng thập phân (số thực) Tab Hiển thị dấu ‘ Hiển thị dấu \ Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội Chuyên đề: Lập trình điều khiển trong Matlab Ví dụ: test3.m %Vi du Test3 x = -12.345; y = -12.345e-23; fprintf(‘Gia tri x = %10.2f\n’,x) fprintf(‘Gia tri y = %10.4E\n’,y); %End >>test3 Gia tri x = -12.35 Gia tri y = -12.345E-23.. .Chuyên đề: Lập trình điều khiển trong Matlab >>den2 = [1 0 1]; >>numh=conv(num1, num2) numh = 2 3 0 >>denh=conv(den1, den2) denh = 3 5 4 5 - 1 Phép chia đa thức (deconvalution) Nếu có: ( ) ( ) ( ) ( ) thì có thể sử dung... nhat %Dau vao la 2 canh % %Than ham …… Tại Worrkspace: >>help square Tinh dien tich hinh chu nhat Biên soạn: Võ Duy Thành – Bộ môn Tự động hóa – Viện Điện – Đại học Bách Khoa Hà Nội Chuyên đề: Lập trình điều khiển trong Matlab Chuong trinh tinh dien tich hinh chu nhat Dau vao la 2 canh …  Thân hàm Thân hàm là toàn bộ các mã chương trình để thực hiện các thao tác tính toán Đó chính là các câu lệnh gán,... Script-file Để tạo Script-file trong Matlab, thực hiện các bước như sau : File -> New -> M-file Matlab sẽ gọi một cửa sổ soạn thảo m-file Tại cửa sổ này, ta có thể viết các lệnh cần thiết và lưu file này thông qua menu save Ví dụ: Test1.m %Vi du Test1 a = [1 2; 3 4]; b = [5; 6]; c = a*b; %End >>test1 c = …… - Lưu ý: o Tên của script-file phải được đặt theo quy tắc đặt tên biến trong Matlab o Không được đặt tên . điều khiển hoặc mã định dạng dữ liệu cần hiển thị (Format Code and Control Code) Control Codes Format Codes Codes Miêu tả Codes Miêu tả Xuống dòng %e Dạng khoa học VD: 1.25e-5. [1 0 1]; >>numh=conv(num1, num2) numh = 2 3 0 >>denh=conv(den1, den2) denh = 3 5 4 5 1 - Phép chia đa thức (deconvalution) Nếu có:                    . bao gồm: - Matlab desktop - Cửa sổ lệnh: Comman Window, Command History - Các trình duyệt xem trợ giúp - Các file và tìm kiếm các đường dẫn Chuyên đề: Lập trình điều khiển trong Matlab Biên

Ngày đăng: 09/05/2014, 12:26

Tài liệu cùng người dùng

Tài liệu liên quan