Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 38 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
38
Dung lượng
417,58 KB
Nội dung
24 Chương 2 CƠ SỞ MATLAB 2.1 LÀM QUEN VỚI MATLAB MATLAB là từ viết tắt của Matrix Laboratory, được công ty MathWorks khai thác và phát triển. Đối tượng xử lý cơ bản của Matlab là các ma trận. Các vector và vô hướng được biểu diễn bởi các ma trận cỡ n1, 1n và 11. Xâu cũng có thể xử lí được trong Matlab, nhưng khá hạn chế. Matlab version 3.5 trở về trước hoạt động trong môi trường MS-DOS, các version sau này hoạt động trong môi trường Windows. 2.1.1 Khởi động và Thoát khỏi MATLAB Để khởi động MATLAB bạn có thể gõ lệnh Matlab trong chế độ DOS hoặc nháy chuột trái vào biểu tượng của Matlab trên màn hình của Windows. Chờ một chút bạn sẽ thấy lời chào của Matlab và sau đó là cửa sổ lệnh Command cùng với các menu quen thuộc trong Windows như File, Edit, Debug,Desktop, Window và Help hiện ra trên màn hình. Trong cửa sổ lệnh xuất hiện dấu mời của Matlab có dạng “ >> | ”. Hình 2.1 Cửa sổ lệnh Command 25 Sau pha khởi động này, Matlab sẵn sàng nhận một câu lệnh hay lời gọi chương trình. Để thoát khỏi Matlab bạn có thể gõ lệnh quit hoặc exit sau dấu mời của Matlab hay dùng chuột chọn File/Exit. Đơn giản nhất, bạn có thể dùng tổ hợp phím Ctrl-Q. Sau đây chúng tôi sẽ giới thiệu một số lệnh cơ bản của Matlab. Những lệnh bổ sung được giới thiệu trong các chương tiếp theo vì chúng liên quan với các bài toán và các thuật toán giải. Để có những thông tin đầy đủ hơn về toàn bộ những câu lệnh của Matlab bạn đọc cần tham khảo thêm các cuốn sách “ MATLAB Reference Guide” và “ MATLAB Turtorial ” đi kèm với phần mềm Matlab. 2.1.2 Trợ giúp trực tuyến trong MATLAB Matlab có trợ giúp trực tuyến đối với tất cả các lệnh và hàm nội trú. Để sử dụng trợ giúp của Matlab, bạn hãy gõ lệnh help sau đó là tên lệnh hoặc tên hàm mà bạn muốn tìm hiểu. Thí dụ 1. Nếu trong cửa sổ Command bạn gõ lệnh: >> help tanh thì kết quả là xuất hiện dòng thông báo sau đây: TANH Hyperbolic tangent. TANH(X) is the hyperbolic tangent of the elements of X. See also atanh . Thông báo trên có nghĩa là hàm TANH(X) sẽ tính tang hypecbol của tất cả các phần tử của X. Có rất nhiều tài liệu trực tuyến (theo kiểu như trên) bao gồm những tài liệu tham khảo và cả những thí dụ minh hoạ. Nếu bạn gõ lệnh help mà không xác định tên lệnh đi theo thì sẽ xuất hiện một menu gồm nhiều chủ đề (topic) để bạn có thể lựa chọn. Thí dụ 2. Nếu gõ lệnh: >> help thì kết quả trên màn hình là: HELP topics: 26 matlab\general - General purpose commands. matlab\ops - Operators and special characters. matlab\lang - Programming language constructs. matlab\elmat - Elementary matrices and matrix manipulation. matlab\elfun - Elementary math functions. matlab\specfun - Specialized math functions. matlab\matfun - Matrix functions - numerical linear algebra. matlab\datafun - Data analysis and Fourier transforms. matlab\polyfun - Interpolation and polynomials. matlab\funfun - Function functions and ODE solvers. matlab\sparfun - Sparse matrices. matlab\graph2d - Two dimensional graphs. matlab\graph3d - Three dimensional graphs. matlab\specgraph - Specialized graphs. matlab\graphics - Handle Graphics. matlab\uitools - Graphical user interface tools. matlab\strfun - Character strings. matlab\iofun - File input/output. matlab\timefun - Time and dates. matlab\datatypes - Data types and structures. matlab\winfun -Windows Operating System Interface Files(DDE/ ActiveX) matlab\demos - Examples and demonstrations. toolbox\symbolic - Symbolic Math Toolbox. nag\nag - NAG Foundation Toolbox - Numerical & Statistical Library nag\examples - NAG Foundation Toolbox - Numerical & Statistical Library toolbox\pde - Partial Differential Equation Toolbox. 27 toolbox\stats - Statistics Toolbox. signal\signal - Signal Processing Toolbox. signal\siggui - Signal Processing Toolbox GUI signal\sigdemos - Signal Processing Toolbox Demonstrations toolbox\control - Control System Toolbox. control\ctrlguis - Control System Toolbox GUI support functions. control\obsolete - Control System Toolbox obsolete commands. stateflow\sfdemos - Stateflow demonstrations and samples. toolbox\sb2sl - SystemBuild to Simulink Translator stateflow\stateflow - Stateflow simulink\simulink - Simulink simulink\blocks - Simulink block library. simulink\simdemos - Simulink 3 demonstrations and samples. simulink\dee - Differential Equation Editor toolbox\tour - MATLAB Tour MATLABR11\work - (No table of contents file) toolbox\local - Preferences. For more help on directory/topic, type "help topic". Nói chung, trong câu lệnh của Matlab có phân biệt chữ hoa và chữ thường. Hầu hết các hàm nội trú của Matlab thường được sử dụng ở dạng chữ thường. 2.1.3 Sử dụng chế độ trực tiếp hay chế độ M-file trong Matlab? Có thể sử dụng Matlab theo một trong hai chế độ làm việc khác nhau: gõ lệnh trực tiếp trong cửa sổ Command hoặc lập trình theo một giải thuật nào đó. Trong chế độ trực tiếp, người sử dụng gõ nội dung câu lệnh vào sau dấu mời của Matlab. Sau khi gõ ENTER để kết thúc dòng lệnh, toàn bộ dòng lệnh được Matlab phân tích và thực hiện ngay. Thí dụ 3. >> x =1; >> 4*atan(x) %% atan là tên hàm arctg trong Matlab 28 ans = 3.1416 >> | %% Đợi câu lệnh tiếp theo Dấu chấm phảy (;) ở cuối một câu lệnh dùng để thông báo cho Matlab không hiển thị kết quả của câu lệnh. Trong thí dụ trên, giá trị của biến x không được hiển thị, nhưng giá trị của biểu thức 4*atan(x) được lưu trữ trong biến ans và được hiển thị trên màn hình dưới dạng số thực dấu phảy tĩnh qui tròn với 5 chữ số có nghĩa. Hai câu lệnh trên cũng có thể được viết thành một chương trình đơn giản. Bạn hãy soạn thảo ra một file kiểu text có tên là Calcpi.m (để tính số ) bằng cách sử dụng một chương trình soạn thảo văn bản (Text Editor) tuỳ ý, hoặc mở menu file rồi chọn chức năng new hoặc open. Tên file chương trình phải có phần mở rộng chuẩn là m (*.m) và cần được lưu trữ vào một thư mục tên có là Work của Matlab. Nội dung của file Calpi.m có thể được viết như sau: % Matlab code to calculate the value of Pi = 3.141592653589793238 % Every line that begins with % is a comment line and will be ignored % by MATLAB x =1; 4* atan(x) Tiếp theo, để thực hiện chương trình bạn chỉ cần gõ tên của M-file: >> Calcpi Kết quả trả về trên màn hình sẽ là: ans = 3.1416 Chú ý: những dòng lệnh trong chương trình bắt đầu bằng dấu % là những dòng chú thích, chúng sẽ bị chương dịch bỏ qua. Như vậy cấu trúc của một chương trình trong Matlab khá đơn giản. Mỗi chương trình chỉ là một danh sách các dòng lệnh, được viết liên tiếp. Khi gọi tên 29 chương trình, những dòng lệnh đó lần lượt được thực hiện theo thứ tự theo danh sách đã liệt kê. 2.1.4 Một số biến gán sẵn và hàm nội trú của Matlab Trong Matlab có một số các tên hàm và biến chuẩn. Vì vậy, khi đặt tên M- file và tên biến bạn nên tránh những tên đó để tránh những xung đột không mong muốn có thể xảy ra. Sau đây là một số tên hàm và biến chuẩn hay được sử dụng: Bảng 2-1 Danh sách một số biến gán sẵn và hàm nội trú của Matlab Tên Ý nghĩa ans Tên biến chứa kết quả nếu chưa gán kết quả tính cho biến nào eps Số epsilon, số thực đủ nhỏ mà khi thêm eps vào một số thành một số khác mà Matlab sẽ phân biệt được nó với số gốc: 2.2204e-016 pi Số pi: =3.1415926 inf Số vô cùng, kết quả của phép chia 1/0 NaN Not-a-Number, số vô định, kết quả của phép chia 0/0 i (and) j Đơn vị ảo hay 1 realmin Số thực nhỏ nhất biểu diễn được trên MTĐT: 2.2251e-308 realmax Số thực lớn nhất biểu diễn được trên MTĐT: 1.7977e+308 abs(x) Hàm giá trị tuyệt đối hoặc modul của số phức x acos(x) Hàm arccos(x) asin(x) Hàm arcsin(x) atan(x) Hàm arctg(x) atan2(y,x) Hàm arctg(y/x) conj(x) Hàm tính số liên hợp của số phức x cos(x) Hàm cos(x) exp(x) Hàm e x imag(x) Phần ảo của số phức x 30 log(x) Hàm ln(x) log2(x) Hàm log 2 (x) log10(x) Hàm lg(x) real(x) Hàm lấy phần thực của số phức x sign(x) Hàm dấu của số thực x sin(x) Hàm sin(x) sqrt(x) Hàm x tan(x) Hàm tg(x) 2.1.5 Hiển thị dữ liệu trên màn hình Tất cả các biến, kể cả các biến gán sẵn lẫn các biến do người sử dụng định nghĩa đều có thể được hiển thị trên màn hình theo các định dạng khác nhau tùy theo phương án sử dụng câu lệnh FORMAT mới nhất. Câu lệnh FORMAT Cú pháp: format <string1> [ <string 2>] Giải thích. Lệnh Format dùng để thay đổi qui cách hiển thị dữ liệu. - Nếu string1 là long : hiển thị kết quả tới 16 chữ số có nghĩa; Nếu là short (giá trị mặc định): hiển thị kết quả với 5 chữ số có nghĩa; Nếu là rat: hiển thị kết quả dạng phân số (giá trị xấp xỉ). - Nếu string2 là e thì hiển thị kết quả kiểu số thực dấu phảy động; Nếu là g thì hiển thị kết quả kiểu số thực dấu phảy tĩnh. Nếu muốn biết thêm các định dạng khác bạn đọc nên tham khảo cuốn sách “MATLAB manual”. Thí dụ 4. >> 4*atan(1) ans = 3.1416 >> format long e; ans 31 ans = 3.141592653589793e+00 >> format long g ans ans = 3.14159265358979 >> format short e; ans ans = 3.1416e+00 >> format rat ; ans ans = 355/113 2.1.6 Tạo vector và ma trận Một thế mạnh của Matlab là xử lí được vector, ma trận và cả số phức. Vector và ma trận có thể được gán cho các biến theo nhiều cách khác nhau. Cú pháp của lệnh tạo vector cách đều như sau: <Var-Name> = [ First : Increment: Last] Lệnh sẽ sinh ra một vector hàng với phần tử đầu là First, phần tử cuối là Last và số gia (bước nhảy) là Increment. Mặc định của số gia là 1. Vector này sẽ được gán cho biến <Var-Name>. Thí dụ 5. >> a = [ 1 2 3 4 5 6 7 8 9 10]; %% Tạo vector hàng >> b = [ 1 ; 2 ; 3; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; 10]; % % Tạo vector cột >> c = [1:10]; % % Vector hàng giống a >> d = [1:0.5:5.5]'; % % Vector cột >> e = sin(a); % % Vector cùng cỡ với a >> A=[1 2 3 ; 4 5 6 ; 7 8 9 ]; %% Ma trận cỡ 3 3 >> B = [A; 10 11 12 ]; % % Ma trận cỡ 4 3 32 >> f = [ 0.5:2:10] f = 0.5000 2.5000 4.5000 6.5000 8.5000 2.1.7 Xử lý các phần tử ma trận Trong Matlab các phần tử của một mảng (vector hay ma trận) có thể được xác định theo nhiều cách khác nhau. Một cách đơn giản nhất là viết tên ma trận đi kèm với các chỉ số hàng và cột của của phần tử cần xử lý. Thí dụ 6. >> A=[1 2 3 ; 4 5 6 ; 7 8 9 ]; >> C = [A; 10 11 12 ]; >> C(4,2) %% Hiện phần tử hàng 4 cột 2 của ma trận C ans = 11 >> A(8) %% Hiện phần tử thứ 8 trong ma trận A ans = 6 Nếu bạn muốn rút trích cả một hàng, một cột hay một ma trận con thì dùng các câu lệnh như sau: >> A(:,2) %% Hiện cột thứ 2 của A >>A(3,:) %% Hiện hàng thứ 3 của A >> Asub = A(1:2, 2:3) ; >> C=A(:,[2 3]; Thậm chí bạn có thể rút trích dữ liệu trong các ma trận để “ lắp ghép” với nhau để tạo thành một ma trận mới: >> B =A([3 1 1], :) B = 7 8 9 33 1 2 3 1 2 3 >> E=[A B; B A] E = 1 2 3 7 8 9 4 5 6 1 2 3 7 8 9 1 2 3 7 8 9 1 2 3 1 2 3 4 5 6 1 2 3 7 8 9 2.1.8 Các phép toán trên ma trận Bảng 2-2 Danh sách các phép toán số học trên ma trận Toán tử Ý nghĩa * Phép nhân nói chung: Vô hướng –Vô hướng, Vô hướng -Vector, Vô hướng- Ma trận, Ma trận – Ma trận. . * Phép nhân phần tử với phần tử tương ứng. ^ Phép luỹ thừa. .^ Phép luỹ thừa của từng phần tử. ' Phép chuyển vị ma trận hoặc tính số phức liên hợp. .' Phép chuyển vị ma trận. + (-) Phép cộng (trừ) ma trận-ma trận, ma trận-vô hướng. / Phép chia phải. ./ Phép chia phải tương ứng từng phần tử của ma trận. Các ma trận phải cùng kích thước. \ Phép chia trái. .\ Phép chia trái tương ứng từng phần tử của ma trận. Các ma trận phải cùng kích thước. [...]... C = '); delta = b^ 2- 4 *a*c; x1=(-b+sqrt(delta))/ (2* a); x2=(-b-sqrt(delta))/ (2* a); x=[x1 x2]; format short g; disp(x); 44 Gọi thực hiện lại chương trình trên: >> GFTB2 He so A = 3 He so B = -5 He so C = 7 0.83333 + 1 .28 02i 0.83333 - 1 .28 02i 2. 2.3 Câu lệnh SWITH Cú pháp: switch case < Commands-1> case < Commands -2 > case < Commands-n> [otherwise < Commands... sau: 52 % Thi du tao ham function [ a, b, c] = Myfunc(x,y) a= log10(x)-x ^2+ 4+y; b = x+y; c=x; disp(nargin); disp(nargout); Sau đó gọi hàm: >> [a b]= Myfunc(1 ,2) 2 2 a= 5 b= 3 >> [x y z]= Myfunc(1 ,2) 2 3 x= 5 y= 3 z= 1 Tương tự, soạn 1 file tên Equa2.m với nội dung như sau : % Ham giai phuong trinh bac 2 function [x1, x2]=Equa2(a,b,c) delta = b^ 2- 4 *a*c; x1=(-b+sqrt(delta))/ (2* a); x2=(-b-sqrt(delta))/ (2* a);... quát: A x2 + Bx + C = 0, với các hệ số A,B,C được nhập từ bàn phím khi chạy chương trình Soạn thảo chương trình GFTB2.m có nội dung: % Giai phuong trinh bac 2 : Ax ^2+ Bx+C =0 a= input(' He so A = '); b= input(' He so B = '); c= input(' He so C = '); delta = b^ 2- 4 *a*c; if delta >0 43 x1=(-b+sqrt(delta))/ (2* a); x2=(-b-sqrt(delta))/ (2* a); x= [x1 x2]; fprintf('Phuong co 2 nghiem thuc x1 = %f x2= %f ',x)... inline('sin (2* pi*f + theta)') F2 = Inline function: F2(f,theta) = sin (2* pi*f + theta) >> F2 (2, 1) ans = 0.8415 >> F3 = inline('sin (2* pi*f+theta)','theta','f') F3 = Inline function: F3(theta,f) = sin (2* pi*f + theta) >> F4 = inline('x^P1+P3',3) F4 = Inline function: F4(x,P1,P2,P3) = x^P1+P3 2. 5 MỘT SỐ LỆNH BỔ TRỢ 2. 5.1 Các lệnh tính toán thời gian máy tính Bảng 2- 1 0 Danh sách các lệnh tính toán thời gian máy tính. .. agree >> C*b' ans = 68 167 26 6 >> C. ^2; %% Bình phương từng phần tử >> B= C /2; %% Có kết quả tương tự B= 2\ A 34 >> a=[1:5}; >>b=[6:10]; >> a.\b ans = 6.0000 3.5000 2. 6667 2. 2500 2. 0000 >> C = [ 1 2 3; 4 5 -6 ; 7 -8 9]; >> d = [ 10; 11; 12] ; %% Giải hệ phương trình Cx=d >> C\d ans = 2. 2667 1.9333 1 .28 89 Chú ý: phép nhân ma trận không có tính chất giao hoán Do đó nếu A và B là 2 ma trận vuông cùng cấp thì:...Khi tính toán với ma trận phải kích thước của chúng phải phù hợp Nếu không, Mat lab sẽ đưa ra thông báo lỗi Thí dụ 7 %% Tạo ra một vector cột >> d = [10 :-1 .5:5.5]'; >> C = [ 1 2 3; 4 5 6; 7 8 9]; >> b = [ 10 11 12] ; %% Tương tự như b. ^2 >> b.*b ans = 100 121 144 >> C*C' ans = 14 32 50 32 77 122 50 122 194 %% Tương tự như C*C >> C ^2 ans = 30 36 42 66 81 96 1 02 126 150 %% Câu lệnh có... hai loại: - Hàm chuẩn: Là các hàm nội trú, được lập sẵn của Matlab - Hàm do người sử dụng tạo ra: Hàm được viết dưới dạng một M-file và được lưu vào thư mục làm việc của Matlab Thí dụ19 >> rem(15 ,2. 6) ans = 2 >> x =cos (2/ 3 )-5 x= -4 .21 41 >> fix(x) ans = -4 >> ceil(x) ans = -4 >> floor(x) ans = -5 >> round(x) ans = -4 2. 4.1 File kịch bản ( Script file hay M-file) Script file là các file chương trình do... ; Ngược lại, Matlab sẽ lần lượt kiểm tra các biểu thức logic dạng , nếu một biểu thức logic là đúng thì thực hiện nhóm lệnh tương ứng… hoặc sẽ thực hiện nếu không tìm thấy biểu thức logic nào cho giá trị đúng Sơ đồ IF … ELSEIF… ELSE … END if ExpL1 Đ S Commands-1 ExpL2 Đ Đ Commands -2 S Commands-3 end Thí dụ 12 Cài đặt chương trình giải phương trình bậc 2 tổng... 4]; >> sign(x) ans = 1 -1 0 1 2. 2 .2 Câu lệnh kiểm tra và quyết định Cú pháp: if [ elseif < Commands -2 > ] … [ else < Commands-3> ] end Giải thích Câu lệnh IF dùng để kiểm tra và rẽ nhánh chương trình dựa vào giá trị của các biểu thức logic Câu lệnh con: elseif < Commands -2 > có thể không có hoặc có mặt nhiều lần trong cùng một câu lệnh IF 42 Đầu tiên, Matlab kiểm... Câu lệnh Ý nghĩa tic Khởi động đồng hồ tính thời gian toc Dừng đồng hồ tính thời gian và cho biết thời gian tính toán cputime Thời gian làm việc từ khi khởi động Matlab tính bằng giây Thí dụ 22 >> cputime ans = 8 .28 73e+003 55 %% Tính thời gian chạy chương trình Calpi >> tic; calpi;toc ans = 3.1416 Elapsed time is 0.00 020 4 seconds Để tính thời gian thực hiện chương trình bạn cũng có thể làm như sau: >> . 2 3 1 2 3 >> E=[A B; B A] E = 1 2 3 7 8 9 4 5 6 1 2 3 7 8 9 1 2 3 7 8 9 1 2 3 1 2 3 4 5 6 1 2 3 7 8 9 2. 1.8 Các phép toán trên ma trận Bảng 2- 2 Danh sách các phép toán. = [ 1 2 3; 4 5 6; 7 8 9]; >> b = [ 10 11 12] ; >> b.*b %% Tương tự như b. ^2 ans = 100 121 144 >> C*C' ans = 14 32 50 32 77 122 50 122 194 >> C ^2 %%. >> A +2* ones(size(A)) ans = 3 4 5 6 7 8 9 10 11 38 2. 2 NHỮNG CÂU LỆNH ĐIỀU KHIỂN CHƯƠNG TRÌNH 2. 2.1 Các toán tử và hàm quan hệ và logic Bảng 2- 5 Danh sách các toán tử quan