intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Lập trình Matlab cơ bản

Chia sẻ: Hoang Nguyen | Ngày: | Loại File: PDF | Số trang:41

176
lượt xem
27
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Giới thiệu Matlab, cơ sở về Matlab, Function files và Script files, đồ họa, tạo giao diện trong Matlab, Simulink là những nội dung chính trong bài giảng "Lập trình matlab cơ bản". Mời các bạn cùng tham khảo nội dung bài giảng để nắm bắt nội dung chi tiết.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình Matlab cơ bản

  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  Matlab vừa là một ngôn ngữ lập trình vừa là một phần mềm ứng dụng tính toán rất hiệu quả.  Matlab - Matrix Laboratory  Matlab là một thương hiệu đã được thương mại hóa của tập đoàn MathWorks 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. 2
  3. 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
  4. 5/9/2013 I. Các biến và hằng số 1.Biến Tên_biến = giá trị hoặc biểu thức + Biến (variable) trong Matlab là 1 kí hiệu được sử dụng để chứa 1 giá trị. Gồm biến toàn cục(global), biến cục bộ(local). + Tên biến (variable name): bắt đầu bằng một chữ cái, tiếp theo là các chữ cái, chữ số hoặc kí tự gạch chân(_) . Tối đa là 31 kí tự, Matlab phân biệt rõ chữ hoa chữ thường. + Ví dụ : >> x = 5 ; >> x = x + 3 ; + Biến kiểu xâu kí tự ( string ) >> ten='Nguyen Van A' ten = Nguyen Van A Tránh đặt tên biến trùng với tên các hàm chuẩn, hoặc các từ khóa của Matlab I. Các biến và hằng số 2. Các hằng 4
  5. 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
  6. 5/9/2013 II. Hàm lập sẵn 1. Một số lệnh Lưu phiên làm việc với Matlab -Lệnh 'diary' sử dụng cho mục đích này. Thực hiện: >> diary('diary_file_name') >> ........ (các câu lệnh của bạn ở đây) >> diary off II. Hàm lập sẵn 2. Một số ví dụ • >>z = sqrt(25) • >>y=sin(pi/4) • >>round(3.8) = 4, round(3.49) = 3, round(3.5) = 4 • >>y = 3^2+1 • >>x = y/5, z= y\5 • >> rem(10,3) • >>c=clock • >> z = 1 – 2i, abs(z), angle(z)*180/pi,real(z), imag(z) • Giải phương trình bậc 2 trong R : 2x2 + 5x - 3 = 0 6
  7. 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
  8. 5/9/2013 II. Hàm lập sẵn 2.Một số ví dụ (tt) Tính đạo hàm biểu thức sau: x3 + 2x +5y theo x và y >> syms x y >> diff(x^3+2*x+5*y,x) >> diff(x^3+2*x+5*y,y) Tính đạo hàm bậc 2 của: sin(xy2) theo x và y >> diff(sin(x*y^2),x,2) >> diff(sin(x*y^2),y,2) II. Hàm lập sẵn 2.Một số ví dụ (tt) Tính tích phân sau:  x n dx >> syms x y n >> int(x^n) n >> int(x^n,n) %biến lấy tích phân là n:  x dn b Tính tích phân sau:  x 2 dx a >> syms x a b >> int(x^2,a,b) 2 Tính tích phân sau theo y:  xy 2 dy 0 >>int(x*y^2,y,0,2) 8
  9. 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
  10. 5/9/2013 II. Hàm lập sẵn 3.Vector & ma trận Mảng có các phần tử cách đều Tên_mảng=[ ptử đầu a : gia số : ptử cuối b ]; Tên_mảng=linspace(a,b,n); n là số phần tử của mảng Tên_mảng=logspace(a,b,n); tăng theo hàm log Ví dụ: >>u= [0:1:10] Hoặc: >>u= linspace(0,10,11) II. Hàm lập sẵn 3.Vector & ma trận Tìm nghiệm của đa thức x3 + 6x2 -11x +290 >>a=[1,6,-11,290]; % các hệ số của đa thức. >>x=roots(a) Hoặc >>x=roots([1,6,-11,290]); Đa thức trên có 3 nghiệm là: x1= -10 và x2= 2+5i, x3= 2-5i Dùng hàm poly() kiểm tra lại ví dụ trên >>r=[-10,2+5i,2-5i]; % cho trước các nghiệm >>poly( r ) ans= 1 6 -11 290 Đa thức phải tìm là: x3 + 6x2 -11x +290. Lưu ý: các hệ số được sắp xếp theo lũy thừa giảm của biến. 10
  11. 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
  12. 5/9/2013 II. Hàm lập sẵn 3.Vector & ma trận Ví dụ: Cho mảng A=[1 2 -3 4 0 5 -6 ] >>[u,v,w]=find(A) >>[u,v,w]=find(A>2) >>[u,v,w]=find(A>size(A) >>length(A) >>max(A) >>min(A) >>sum(A) >>sort(A) Tương tự thực hiện các hàm với ma trận: III. Các phép tính về mảng 12
  13. 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 x5 , 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
  14. 5/9/2013 IV.Cấu trúc điều khiển 1. Cấu trúc IF Ví dụ : Bài toán phân loại học sinh: – Nhập điểm vào: o điểm 9-10 xếp loại giỏi; o điểm 7-8 xếp loại khá; o điểm 5-6 xếp loại trung bình; o điểm 0,1,2,3,4 xếp loại yếu; – nếu điểm vào không phải số nguyên nằm giữa 0 và 10 thì thông báo điểm không hợp lệ. IV.Cấu trúc điều khiển 1. Cấu trúc IF 1. diem = input('Nhap diem :'); 2. if (diem == 9)|(diem == 10) 3. disp('Loai gioi') 4. elseif (diem == 7)|(diem == 8) 5. disp('Loai kha') 6. elseif (diem == 5)|(diem == 6) 7. disp('Loai trung binh') 8. elseif (diem>=0)&(diem
  15. 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 :'); < lệnh 1> switch diem case {9,10} case n2 disp('Loai gioi') < lệnh 2> case {7,8} ............... disp('Loai kha') case nn case {5,6} < lệnh n> disp('Loai trung binh') otherwise case {0,1,2,3,4} disp('Loai yeu') < lệnh n+1> 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
  16. 5/9/2013 IV.Cấu trúc điều khiển 4. Vòng lặp while Vòng lặp while dùng khi không biết trước số lần lặp. while 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 = '); k=0; S=0; %gia tri ban dau cua tong s while (k 50 thì kết thúc .Đếm xem có bao nhiêu số đã nhập . 1. S=0; %tổng 2. k=0; %các số dương 3. m=0; % số lượng các số nhập vào 4. while S 0 8. S=S+x; 9. k=k+1; 10. end 11. end 12. disp('=> So cac so da nhap tu ban phim la : ') 13. disp(m) 14. disp('=> So cac so (+) nhap tu ban phim la : ') 15. disp(k) 16
  17. 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
  18. 5/9/2013 I. Script file Script file: là M-file đơn giản nhất, không có đối số. Được dùng khi thi hành một loạt lệnh MATLAB theo một trình tự nhất định. Cấu trúc đề nghị của một Script file: 1. Phần chú thích : Viết các dòng chú thích cho chương trình. 2. Phần đầu vào: các giá trị đầu vào. 3. Phần tính toán. 4. Phần trình bày kết quả: Dùng 1 số hàm của Matlab để trình bày kết quả. I. Script file Ví dụ1 : Soạn script file để tính diện tích của tam giác khi biết tọa độ 3 điểm trong không gian. Diện tích tam giác được tính bằng công thức tích hữu hướng của 2 vectơ. 18
  19. 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
  20. 5/9/2013 II. Function file • Việc xây dựng hàm cũng được thực hiện tương tự như script file. Tuy nhiên, đối với hàm ta cần quan tâm đến các tham số truyền cho hàm và các kết quả trả về sau khi thực hiện. • Có 3 điểm cần lưu ý: - Tên hàm phải được đặt trùng với tên file lưu trữ. - Phải có từ khóa function ở dòng đầu tiên. -Trong một hàm có thể xây dựng nhiều hàm con (điều này không có trong script file). -Kết thúc hàm con phải có từ khóa end (điều này không cần trong hàm ‘mẹ’). function [giá trị ra] = function_name(giá trị vào) II. Function file 1. Hàm chỉ có đối số vào: function tenham(in1,in2,…) Ví dụ: Giải pt bậc 4: ax4+bx3+cx2+dx+e=0 Chương trình: 1. function ptbac4(a,b,c,d,e) 2. P=[a,b,c,d,e]; 3. X=roots(P); 4. for i=1:length(X) 5. disp(['Nghiem thu',' ',num2str(i),'=',' ',num2str(X(i))]) 6. end Save chương trình với tên là: ptbac4.m 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2