Bài giảng Lập trình Matlab cơ bản - Võ Thiện Lĩnh

BÀI 1.GIỚI THIỆU
Khả năng và những ứng dụng của Matlab
 Thư viện dựng sẵn to lớn rất phong phú nhiều lĩnh vực
 Giải quyết các vấn đề một cách số học
 Matlab ứng dụng những thuật toán đã kiểm chứng nên kết
quả đáng tin cậy.
 Lệnh và hàm sử dụng rất đơn giản.
 Có thể xây dựng những hàm riêng cho những ứng dụng
đặc biệt.
 Cung cấp thư viện hàm đồ họa rất mạnh.
 Cung cấp gói ứng dụng Simulink đầy đủ để mô phỏng
pdf 41 trang thamphan 30/12/2022 2020
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Matlab cơ bản - Võ Thiện Lĩnh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_giang_lap_trinh_matlab_co_ban_vo_thien_linh.pdf

Nội dung text: Bài giảng Lập trình Matlab cơ bản - Võ Thiện Lĩnh

  1. 5/9/2013 BÀI GIẢNG GV:ThS. Võ Thiện Lĩnh Một số vấn đề cần tìm hiểu 1. Giới thiệu Matlab 2. Cơ sở về Matlab 3. Function files và Script files. 4. Đồ họa 5. Tạo giao diện trong Matlab. 6. Simulink. 1
  2. 5/9/2013 BÀI 1.GIỚI THIỆU Quản lý không gian làm việc của Matlab  Cửa sổ trợ giúp (Help window)  Nút Start  Cửa sổ nhập lệnh (Command window)  Cửa sổ không gian làm việc (Workspace window)  Cửa sổ quá trình lệnh (Command History window)  Cửa sổ địa chỉ thư mục hiện thời (Current directory window) BÀI 2: CƠ SỞ VỀ MATLAB  Các biến và hằng số  Hàm lập sẵn  Một số ví dụ để làm quen với Matlab  Vector và ma trận  So sánh và phép tính logic  Các lệnh điều khiển chương trình 3
  3. 5/9/2013 II. Hàm lập sẵn • sqrt(x) : hàm rút căn bậc hai • exp(x) : hàm e ( e = 2,71828 ) • log(x) : hàm lôgarit tự nhiên ( cơ số e ) • log10(x): hàm lôgarit cơ số 10 • sin(x)/ cos(x) : hàm sin/ hàm cos • tan(x) / cot(x) : hàm tang/ hàm cotang • >> help LỆNH Một số hàm liên quan đến số phức như sau: • abs(z) : lấy mođun (suất) của số phức. • anglc(z): lấy góc pha của số phức. • real(x): lấy phần thực. • imag(x) : lấy phần ảo. • conj(x) : trả về số phức liên hiệp của số phức z II. Hàm lập sẵn 1. Một số lệnh Lệnh Công dụng clc Xóa (lau) cửa sổ lệnh. Mang tính chất hình thức,giá trị các biến vẫn tồn tại. clear all Giải phóng toàn bộ biến ra khỏi bộ nhớ. Xóa Workspace clear var1 var2 Giải phóng các biến var1 var2 ra khỏi bộ nhớ. quit Thoát khỏi chương trình Matlab who Liệt kê các biến hiện hành có trong bộ nhớ. ; Dấu chấm phẩy ; ở cuối dòng lệnh ngăn không cho Matlab hiển thị các kết quả ra cửa sổ lệnh. Khi dòng lệnh quá dài cần xuống dòng, dấu 3 chấm ở cuối dòng lệnh báo cho Matlab biết dòng lệnh còn tiếp tục ở dòng tiếp theo. : Dấu 2 chấm : được dùng để phát sinh một mảng có các phần tử cách đều nhau. % Dấu phần trăm % Matlab xem những gì sau dấu % là lời bình 5
  4. 5/9/2013 II. Hàm lập sẵn 2.Một số ví dụ(tt) Thành lập biểu thức: >>syms x y; >>S=2*x+3*y; Tính giá trị biểu thức S với: x=2; y=3 >>u=subs(S,{x,y},{2,3}) >>u= subs(S,x,y^2) Khai triển và rút gọn: >>v=x^2+2*x+1 >>a=factor(v),b=expand(a) >>c=factor(x^4-1), d=simplify(c) II. Hàm lập sẵn 2.Một số ví dụ (tt) 1.Giải phương trình bậc 2 trong R : 2x2 + 5x - 3 = 0 Sử dụng lệnh “solve” >>solve(‘2*x^2+5*x-3=0'); 2.Giải phương trình sau theo ẩn b và c: b2 +8c+2b=0 >>solve('b^2+8*c+2*b=0','c') >>solve('b^2+8*c+2*b=0',‘b') 3.Giải hệ phương trình sau: >> [x y] = solve('3*x+y+1', '4*y+2*x-1') 4.Giải hệ phương trình sau: 7
  5. 5/9/2013 II. Hàm lập sẵn 2.Một số ví dụ (tt) Giải phương trình vi phân sau: y’(t) + 4y(t) = e-t >> y=dsolve('Dy+4*y=exp(-t)') Giải phương trình vi phân sau: y’(t) + 4y(t) = e-t , y(0)=1 >> y=dsolve('Dy+4*y=exp(-t)','y(0)=1‘) Giải phương trình vi phân sau: y’’(t) + 4y(t) = e-2t , y(0)=1, y(pi)=0 >> y=dsolve('D2y+4*y=exp(-2*t)','y(0)=0','y(pi)=0') II. Hàm lập sẵn 3.Vector & ma trận Mảng: là tập hợp số, ký tự được sắp xếp có thứ tự • Mảng 1 chiều ( vectơ) -Vectơ hàng (row array) >>x=[2,7,0,-3] %cách nhau dấu ‘ , ’ hoặc khoảng trắng. -Vectơ cột (column array) >>v=[3;5;6;9] %cách nhau bằng dấu ‘ ; ’ • Mảng 2 chiều( ma trận) >> A=[2,4,6 ; 3,5,7 ; 4,6,8] A= 2 4 6 3 5 7 4 6 8 9
  6. 5/9/2013 II. Hàm lập sẵn 3.Vector & ma trận Tìm ma trận chuyển vị: >> A=[2,4,6 ; 3,5,7 ; 4,6,8] >> b=A’ A= b = 2 4 6 2 3 4 3 5 7 4 5 6 4 6 8 6 7 8 Truy xuất 1 phần tử của ma trận >> A(2,3) % truy xuat ptu dong 2 cot 3 >> A(:,2) % trich vecto cot thu 2 >> A(3,:) % trich vecto dong thu 3 >> A(:,2:3) % tao ma tran con gom cot 2,3 cua A >> A(1:2,:) % tao ma tran con gom cac dong 1, 2 cua A >> A([1 3],[2 3]) % tao 1 ma tran con gom cac ptu dong 1,3 va cot 2,3 II. Hàm lập sẵn 3.Vector & ma trận Tên hàm Ý nghĩa size(A) Trả về 1 vectơ dòng [m n] chứa kích thước mảng A có m dòng n cột length(A) A là 1 ma trận , sẽ trả về số lớn nhất trong 2 số m,n max(A) + Nếu A là vectơ sẽ trả về ptử lớn nhất trong A + Nếu A là 1 ma trận sẽ trả về 1 vectơ dòng chứa các phần tử lớn nhất của mỗi cột. min(A) Tương tự như hàm max(A) nhưng lựa chọn phần tử bé nhất. sum(A) Tính tổng các ptử trong từng cột của ma trận A, kết quả chứa trong 1 vectơ dòng. sort(A) Sắp xếp mỗi cột cuả ma trận A theo thứ tự giá trị tăng dần từ dòng 1 đến dòng cuối , kết quả là 1 ma trận cùng kích thước với A [x,k] =max(A) Tương tự max(A) nhưng giá trị các phần tử lớn nhất được lưu trong vectơ dòng x và các chỉ số tương ứng được lưu trong vectơ dòng k [x,k] = min(A) Có ý nghĩa tương tự nhưng trả về các phần tử nhỏ nhất. [u,v,w]=find(A) Tìm những phần tử khác 0 của ma trận A. Vectơ u chỉ số dòng , v chỉ số cột của những ptử khác 0, w chỉ chứa các ptử khác 0 của A 11
  7. 5/9/2013 III. Các phép tính về mảng Giải hệ phương trình 4x1 - 2x2 -10x3 = -10 2x1 +10x2 -12x3 = 32 -4x1 - 6x2 +16x3 = -16 Cách 1: >> A=[4 -2 -10;2 10 -12;-4 -6 16] >> B=[-10;32;-16] >> X=A\B % dùng cho tất cả Cách 2: >> C=inv(A) %ma trận đảo của A, dùng cho ma trận vuông >> X=C*B IV.Cấu trúc điều khiển 1. Cấu trúc IF if (biểu thức logic 1) Ví dụ : Tính giá trị của y theo các miền giá trị khác nhau của x như Lệnh hoặc nhóm lệnh 1 sau: Nếu x 5 , y=25*x Lệnh hoặc nhóm lệnh 2 Lệnh như sau : if x>5 else y=25*x elseif x>=0 Lệnh hoặc nhóm lệnh 3 y=x^2 end else y=0 end 13
  8. 5/9/2013 IV.Cấu trúc điều khiển 2.Cấu trúc switch switch Ví dụ: case n1 diem = input('Nhap diem :'); switch diem case {9,10} case n2 disp('Loai gioi') case {7,8} . . . . . . . . . . . . . . . disp('Loai kha') case nn case {5,6} disp('Loai trung binh') otherwise case {0,1,2,3,4} disp('Loai yeu') otherwise end disp('Diem vao khong hop le') end IV.Cấu trúc điều khiển 3. Vòng lặp for Vòng lặp for: được sử dụng khi số lần lặp được biết trước . for n=array % một mảng bất kỳ, không nhất thiết là số tự nhiên Lệnh hoặc nhóm lệnh end Ví dụ : Tính tổng của n số tự nhiên đầu tiên: S = 1+2+3+ +n n=input('Nhap so so hang can tinh tong n = '); S=0; %gia tri ban dau cua tong s for k=1:n S=S+k; end fprintf('Tong so %d so tu nhien dau tien la %d' ,n,S) %d : kết quả xuất là số nguyên. 15
  9. 5/9/2013 IV.Cấu trúc điều khiển 5. Lệnh break • Lệnh break cho phép chấm dứt sớm vòng lặp for hoặc while khi thỏa 1 điều kiện nào đó bên trong vòng lặp nhưng nó không chấm dứt việc thực thi chương trình. Ví dụ: for n=1:10 x=60-n^2; if x<0 break; end y=sqrt(x); end disp(y) Bài 3. Function file và Script files  Chúng ta có thể viết và lưu các chương trình Matlab trong những tập tin có phần mở rộng dạng .m, được gọi là các M-file (Ví dụ ptb2.m).  Matlab dùng 2 loại M-file là script file (tập tin lệnh) và function file (tập tin hàm). Script file: dùng cho chương trình đơn giản Function file : dùng cho chương trình phức tạp 17
  10. 5/9/2013 I. Script file 1. %File dientich.m : Chuong trinh tinh dien tich tam giac 2. %Du lieu dau vao : Toa do 3 diem A B C là [x,y,z] 3. %Du lieu dau ra : Dien tich tam giac ABC 4. %Bien p chi vecto huu huong cua 2 vecto ABxAC 5. disp('CHUONG TRINH TINH DIEN TICH TAM GIAC') 6. disp(' TOA DO 3 DIEM') 7. a=input('Toa do diem A ='); 8. b=input('Toa do diem B ='); 9. c=input('Toa do diem C ='); 10. p=cross(b-a,c-a);% Tinh huu huong cua 2 vecto ABxAC 11. S=0.5*norm(p);% Dien tich tam giac ABC 12. disp('Dien tich tam giac ABC : ') 13. disp(S) I. Script file • Ví dụ: Tính tổng S=1+(1/2) + 1/3 + +1/n n=input ('nhap vao gia tri n '); S=0; i=1; while i<=n S=S+(1/i); i=i+1; end disp ('tong cua day la ') disp(S) 19
  11. 5/9/2013 II. Function file 2. Hàm chỉ có đối số ra: function [out1,out2, ]=tenham Ví dụ: Xắp xếp thứ tự phần tử trong mảng X từ nhỏ lớn 1. function A=sapxep 2. X=input('Nhap mang X[ ]: '); 3. N=length(X); 4. i=1; 5. while(i<=N) 6. [tam(i),j]=min(X); 7. X(j)=[ ];%xoa phan tu thu j cua mang X 8. i=i+1; 9. end 10. A=tam; 11. end II. Function file 3. Hàm có đối số vào/ra: function[x,y, ]=tenham(a,b,c, ) Ví dụ1: giải pt bậc 2: ax2+bx+c=0 1. function [x1,x2]=gptb2(a,b,c) 2. if nargin<3 3. error('Vui long nhap du 3 he so cua phuong trinh') 4. elseif a==0 5. x1=-c/b; 6. x2=[ ]; 7. else 8. D = b^ 2 - 4*a*c; 9. x1 = (-b+sqrt(D))/(2*a); 10. x2 = (-b-sqrt(D))/(2*a); 11. end 21
  12. 5/9/2013 III. Bài tập đề nghị Bài 1. Viết chương trình tính chu vi và diện tích một tam giác theo yêu cầu sau: • Hiện yêu cầu nhập các cạnh a,b,c • Xét điều kiện thành lập một tam giác: −ĐK cần: a,b,c >0 −ĐK đủ: tổng 2 cạnh > cạnh còn lại −Nếu không thỏa đk thì hiện thông báo lỗi. • Tính chu vi + diện tích và hiện KQ. Bài 2. Làm lại bài 1 với yêu cầu hàm có đối số vào/ra III. Bài tập đề nghị Giải bài 1: 1. a=input ('nhap vao do dai canh a : '); 2. b=input ('nhap vao do dai canh b : '); 3. c=input ('nhap vao do dai canh c : '); 4. if (a>0)&(b>0)&(c>0)&(a+b>c)&(c+b>c)&(a+c>b) 5. disp ('chu vi tam giac la : '); 6. cv=a+b+c 7. p=cv/2; 8. disp ('dien tich tam giac la : '); 9. s=sqrt(p*(p-a)*(p-b)*(p-c)) 10. else 11. disp ('3 canh khong tao thanh tam giac ') 12. end 23
  13. 5/9/2013 III. Bài tập đề nghị III. Bài tập đề nghị Bài 6: Tính n! ? Bài 7: Tính biểu thức sau ứng với giá trị n nhập vào: x x2 x3 x4 xn S (x) 1 n 1! 2! 3! 4! n! function m=giaithua(n) if (n==1)|(n==0) m=1; return; end m=n*giaithua(n-1); 25
  14. 5/9/2013 2.Đặc tả màu và kích thước đường vẽ Để đặc tả màu và kích thước đường vẽ ta dùng các tham số sau: • LineWidth: độ rộng đường thẳng,tính bằng số điểm • MarkerEdgeColor: màu của các cạnh của khối đánh dấu • MarkerFaceColor: màu của khối đánh dấu • MarkerSize: kích thước của khối đánh dấu Màu được xác định bằng các thông số: 3. Các dạng đánh dấu trên đồ thị 27
  15. 5/9/2013 Ghi nhãn lên các trục tọa độ Ví dụ 1. x=[-5:0.01:5]; 2. y1=x.^2; 3. plot(x,y1,'r ') 4. xlabel('Truc x'); 5. ylabel('Truc y'); 6. legend('y1=x^2') 7. text(-3,9,' \leftarrow x^2','FontSize',18) 8. gtext('Do thi') 29
  16. 5/9/2013 5.Vẽ nhiều trục • Ví dụ: 1. function dieucheAM(fc,fm) 2. Ac = 1; % Carrier Amplitude 3. Am = 1; % Baseband Amplitude 4. m = Am/Ac; 5. t = linspace(0,1,100*fc); 6. c=Ac*cos(2*pi*fc*t); 7. e = (Ac + Am*cos(2*pi*fm*t)); 8. u = (Ac + Am*cos(2*pi*fm*t)).*cos(2*pi*fc*t); %DSB-AM 9. subplot(1,3,1);plot(t,e,'r');grid on 10. subplot(1,3,2);plot(t,c,'r');grid on 11. subplot(1,3,3);plot(t,u);grid on 6.Các lệnh vẽ đồ thị khác • Lệnh BAR: vẽ đồ thị dạng cột 1. Y = round(rand(5,3)*10); Group Stack 8 20 2. subplot(2,2,1); bar(Y,'group') 6 15 4 10 3. title 'Group' 2 5 0 0 4. subplot(2,2,2); bar(Y,'stack') 1 2 3 4 5 1 2 3 4 5 Stack Width = 1.5 8 5. title 'Stack' 5 6 4 6. subplot(2,2,3); barh(Y,'stack') 3 4 2 2 1 7. title 'Stack' 0 0 5 10 15 20 1 2 3 4 5 8. subplot(2,2,4) ; bar(Y,1.5) 9. title 'Width = 1.5' • Lệnh POLAR : vẽ hệ tọa độ cực 1. t = -pi:0.01:pi; 2. polar(t, sin(t)) 31
  17. 5/9/2013 6.Các lệnh vẽ đồ thị khác • Lệnh STEM: phân bố lược 1. x = 0:0.1:4; 2. stem(x,exp(x)) 3. xlabeL('Truc x') 4. ylabel('y = stairs(x,sin(x)') 60 5. grid on 50 40 30 y = stairs(x,sin(x) 20 10 0 0 0.5 1 1.5 2 2.5 3 3.5 4 Truc x Ví dụ 3: Soạn thảo script file có tên bai3.m để lập biểu đồ tổng số sinh viên Điện Tử - Tin học tốt nghiệp tại trường X từ năm 1996 đến 2001 với dữ liệu như sau: • % Lap bieu do tong so sinh vien Dien tu – Tin hoc tot nghiep • % 1. svdt=[38 33 36 31 60 70]; 2. svth=[48 54 120 92 110 131]; 3. nam=1996:2001; 4. subplot(211), bar(nam,svdt); 5. title('Sinh vien Dien tu tot nghiep tu 1996-2001'); 6. subplot(212), bar(nam,svth); 7. title('Sinh vien Tin hoc tot nghiep tu 1996-2001'); 8. colormap(cool(5)); Colormap 33
  18. 5/9/2013 II. ĐỒ HỌA 3D • Ví dụ: • >> [x,y,z]=peaks; %hàm có phân bố Gauss • >> plot3(x,y,z) • >> mesh(x,y,z) %bề mặt dạng lưới • >> surf(x,y,z) %tô màu bề mặt • >> waterfall(x,y,z) • >> pcolor(x,y,z)%giá trị Z được thể hiện với giá trị màu tương ứng • >> contour(x,y,z) %lấy đường viền trong 2D Bài 5: SIMULINK • Simulink là một phần mềm mở rộng của MATLAB (Toolbox của Matlab) dùng để mô hình hoá, mô phỏng và phân tích một hệ thống động, thiết kế hệ thống điều khiển, thiết kế DSP, hệ thống thông tin và các ứng dụng mô phỏng khác. • Simulink được ghép bởi hai từ Simulation và Link. Simulink cho phép mô tả hệ thống tuyến tính,hệ phi tuyến, các mô hình trong miền thời gian liên tục, hay gián đoạn hoặc một hệ gồm cả liên tục và gián đoạn. 35
  19. 5/9/2013 Các bước để vẽ mô hình 1.Từ cửa sổ Matlab đánh lệnh simulink. Cửa sổ thư viện các khối sẽ xuất hiện 2.Từ cửa sổ thư viện ta nhấp chuột vào File/New/Model hoặc nhấn Ctrl+ N. 3. Chọn các Block ở các thư viện thích hợp và xây dựng mô hình sử dụng thao tác "nhấn – kéo – thả" chuột. Ví dụ 1 • Trong sơ đồ này chọn các khối từ các thư viện: + Thư viện các nguồn tín hiệu (Sources): Chọn Sin wave. + Thư viện các khối nhận tín hiệu (Sinks): Chọn Scope. + Các hàm tuyến tính (continuous): Chọn Integrator. + Commonly userd blocks: Chọn Mux. 37
  20. 5/9/2013 Ví dụ 4: Mô phỏng pt vi phân x’(t) = -2x’(t) + u(t) • Với u(t) là một sóng vuông có biên độ=1 và tần số =1 rad/sec. Ví dụ 5: Thiết kế và phân tích hệ thống 39
  21. 5/9/2013 6. Viết chương trình yêu cầu Nhập liên tiếp các số và khi nhập số 0 thì dừng nhập. Tính trung bình cộng các số âm và trung bình cộng các số dương vừa nhập? 41