lap trinh matlab co ban

41
5/9/2013 1 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ở vMatlab 3. Function files và Script files. 4. Đồ họa 5. Tạo giao diện trong Matlab. 6. Simulink.

Upload: long-tran

Post on 27-Nov-2015

56 views

Category:

Documents


4 download

TRANSCRIPT

5/9/2013

1

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 Matlab2. Cơ sở về Matlab3. Function files và Script files.4. Đồ họa5. Tạo giao diện trong Matlab.6. Simulink.

5/9/2013

2

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ầnmề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.

5/9/2013

3

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

5/9/2013

4

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ự, Matlabphâ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ủaMatlab

I. Các biến và hằng số 2. Các hằng

5/9/2013

5

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ụngclc 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 Matlabwho 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/9/2013

6

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

5/9/2013

7

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 = 0Sử 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:

5/9/2013

8

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: >> syms x y n>> int(x^n)>> int(x^n,n) %biến lấy tích phân là n: Tính tích phân sau: >> syms x a b >> int(x^2,a,b)Tính tích phân sau theo y: >>int(x*y^2,y,0,2)

nx dx

nx dn2

b

a

x dx

22

0

xy dy

5/9/2013

9

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: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 63 5 74 6 8

5/9/2013

10

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ảngTê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.

5/9/2013

11

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]

A=2 4 63 5 74 6 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

>> b=A’b =

2 3 44 5 66 7 8

II. Hàm lập sẵn 3.Vector & ma trận

Tên hàm Ý nghĩasize(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 1vectơ 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 đếndò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

5/9/2013

12

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<0), b= A(u,v)>>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

5/9/2013

13

III. Các phép tính về mảng

Giải hệ phương trình 4x1 - 2x2 -10x3 = -102x1 +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)

Lệnh hoặc nhóm lệnh 1

elseif (biểu thức logic 2)

Lệnh hoặc nhóm lệnh 2

else

Lệnh hoặc nhóm lệnh 3

end

Ví dụ : Tính giá trị của y theo các miền giá trị khác nhau của x như sau:Nếu x<0 , y=0

0 x 5 , y=x2

x>5 , y=25*x Lệnh như sau :

if x>5y=25*x

elseif x>=0y=x^2

elsey=0

end

5/9/2013

14

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<=4)9. disp('Loai yeu') 10. else11. disp(‘Diem vao khong hop le')12. end

5/9/2013

15

IV.Cấu trúc điều khiển 2.Cấu trúc switch

switch <giá trị biểu thức> case n1

< lệnh 1> case n2

< lệnh 2> . . . . . . . . . . . . . . . case nn

< lệnh n> otherwise

< lệnh n+1> end

Ví dụ:diem = input('Nhap diem :');switch diemcase {9,10}

disp('Loai gioi') case {7,8}

disp('Loai kha') case {5,6}

disp('Loai trung binh') case {0,1,2,3,4}

disp('Loai yeu') otherwise

disp('Diem vao khong hop le')end

IV.Cấu trúc điều khiển 3. Vòng lặp forVò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+…+nn=input('Nhap so so hang can tinh tong n = ');S=0; %gia tri ban dau cua tong sfor k=1:n

S=S+k;endfprintf('Tong so %d so tu nhien dau tien la %d' ,n,S)

%d : kết quả xuất là số nguyên.

5/9/2013

16

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 <điều kiện>

<lệnh thi hành> end

Ví dụ : Tính tổng của n số tự nhiên đầu tiên: S = 1+2+3+…+nn=input('Nhap so so hang can tinh tong n = ');k=0; S=0; %gia tri ban dau cua tong swhile (k<=n) %kết thúc vòng lặp khi không còn thỏa đkiện

S=S+k;k=k+1;

endfprintf('Tong so %d so tu nhien dau tien la %d' ,n,S)

IV.Cấu trúc điều khiển 4. Vòng lặp while

Ví dụ 2: Nhập vào các số từ bàn phím. Tính tổng các số dương tới khitổng này > 50 thì kết thúc .Đếm xem có bao nhiêu số đã nhập .

1. S=0; %tổng2. k=0; %các số dương3. m=0; % số lượng các số nhập vào4. while S <= 505. x=input('Nhap cac so tu ban phim x = ')6. m=m+1;7. if x>08. S=S+x;9. k=k+1;10. end11. end12. 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)

5/9/2013

17

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ỏa1 điều kiện nào đó bên trong vòng lặp nhưng nó không chấm dứt việcthực thi chương trình.

Ví dụ:for n=1:10

x=60-n^2;if x<0

break;endy=sqrt(x);

enddisp(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

5/9/2013

18

I. Script file

Script file: là M-file đơn giản nhất, không có đối số. Đượcdù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ơ.

5/9/2013

19

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 ABxAC5. 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 ABxAC11. S=0.5*norm(p);% Dien tich tam giac ABC12. 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/nn=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)

5/9/2013

20

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 thamsố 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àykhô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ầntrong hàm ‘mẹ’).

function [giá trị ra] = function_name(giá trị vào)

II. Function file1. 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=0Chươ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

5/9/2013

21

II. Function file2. Hàm chỉ có đối số ra: function [out1,out2,…]=tenhamVí dụ: Xắp xếp thứ tự phần tử trong mảng X từ nhỏ lớn1. function A=sapxep2. 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 X8. i=i+1;9. end10. A=tam;11. end

II. Function file3. 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=01. function [x1,x2]=gptb2(a,b,c)2. if nargin<33. error('Vui long nhap du 3 he so cua phuong trinh')4. elseif a==05. x1=-c/b;6. x2=[ ];7. else8. D = b^ 2 - 4*a*c;9. x1 = (-b+sqrt(D))/(2*a);10. x2 = (-b-sqrt(D))/(2*a);11. end

5/9/2013

22

II. Function file4.Cách gọi tập tin .ma) Hai tập tin riêng biệt:

%giai pt bac 4function

X=ptbac4(a,b,c,d,e)P=[a,b,c,d,e];X=roots(P);for i=1:length(X)

disp(['Nghiem thu',' ',num2str(i),'=',' ',num2str(X(i))])

end%Save với tên: ptbac4.m

%tim nghiem max cua pt bac 4function Y=nghiem_max(a,b,c,d,e)X= ptbac4(a,b,c,d,e);Y=max(X);end%Save với tên: nghiem_max.m

II. Function file 4.Cách gọi tập tin .m

b)Một tập tin có nhiều hàm riêng%tim nghiem max cua pt bac 4function Y=nghiem_max(a,b,c,d,e)X= ptbac4(a,b,c,d,e);Y=max(X);end%giai pt bac 4function X=ptbac4(a,b,c,d,e)P=[a,b,c,d,e];X=roots(P);for i=1:length(X)

disp(['Nghiem thu',' ',num2str(i),'=',' ',num2str(X(i))])end%Save với tên: nghiem_max.m

5/9/2013

23

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ộttam 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+c7. 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

5/9/2013

24

III. Bài tập đề nghịBài 3: Nhập vào dãy số, tìm giá trị lớn nhất trong dãy?1. n=input('nhap vao so phan tu cua day : ');2. for i=1:n3. a(i)=input (['a(',num2str(i),')=']);4. end5. disp ('day vua nhap la : '); disp(a)6. max=a(1);7. for i=1:n8. if max<a(i)9. max=a(i);10. End;11. End;12. disp (['gia tri lon nhat cua day la’,num2str(max)])

III. Bài tập đề nghịBài 4: Kiểm tra xem một số n có phải là số nguyên tố không?

n=input('nhap vao gia tri n : ');dem=0;for i=1:n

if rem (n,i)==0dem=dem+1;

endend;if dem==2

disp ('so vua nhap la so nguyen to')else

disp ('so vua nhap khong phai so nguyen to')end

5/9/2013

25

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:

function m=giaithua(n)if (n==1)|(n==0)

m=1;return;

endm=n*giaithua(n-1);

!...

!4!3!2!11)(

432

nxxxxxxS

n

n

5/9/2013

26

BÀI 4: ĐỒ HỌA

• NỘI DUNG:

I. Đồ họa 2-D

II. Đồ họa 3-D

I. Đồ họa 2-D1. Đặc tả kiểu đường vẽ

• t = [0:pi/100:2*pi] ;• y = sin(t); • plot(t,y,‘:'); % vẽ đường chấm chấm • grid on %tạo lưới

5/9/2013

27

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ị

5/9/2013

28

Ví dụ :• x = -pi : pi/10 : pi; • y = tan(sin(x)) - sin(tan(x)); • plot(x,y,'--rs','LineWidth',2,'MarkerEdgeColor','k',...

'MarkerFaceColor','g','MarkerSize',10)Đường cong y = f(x) có các đặc tả sau :- đường vẽ là đường đứt nét(--) - khối đánh dấu hình vuông (s), đường vẽ màu đỏ(r) - đường vẽ rộng 2 point - các cạnh của khối đánh màu đen - khối đánh dấu màu green - kích thước khối đánh dấu 10 point

Đặt các thông số cho trục

• Ví dụ:1. x=[0 1 2 3]; 2. y=[0 4 1 5]; 3. h=plot(x,y) • Để thấy các thuộc tính đồ họa của hàm plot ta dùng

lệnh• set(h)• Bây giờ ta thay đổi thuộc tính của đồ thị:1. set(h,’Color’, ‘r’) %dat lai mau do 2. set(h,'LineWidth',6) %dat do rong duong 3. set(h,'Marker','v','MarkerSize',6)

5/9/2013

29

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')

5/9/2013

30

4.Vẽ nhiều hình trên 1 trụcVí dụ: Vẽ 2 hàm y1=x2 và y2=cos3x, (rad) trên cùng 1 đồ thị.Cách 1:1. x=[-5:0.01:5]; 2. y1=x.^2;3. y2=cos(3*x); 4. plot(x,y1,x,y2,'r--')5. xlabel('Truc x');6. ylabel('Truc y');7. legend('y1=x^2','y2=cos

3x')

Cách 2:1. x=[0:0.01:5]; 2. y1=x.^2;3. y2=cos(3*x); 4. grid on5. hold on6. plot(x,y1,'r--')7. plot(x,y2, 'm--')8. xlabel('Truc x');9. ylabel('Truc y');10.hold off

5.Vẽ nhiều trục• Hàm:

subplot(m,n,p) subplot(mnp)

• subplot(2,2,[1 3]) subplot(2,2,2) subplot(2,2,4)

• subplot(2,2,1:2) subplot(2,2,3) subplot(2,2,4)

x=[-5:0.01:5];for n = 1:8

subplot(4,2,n)plot(x,sin(n*pi*x))

end

5/9/2013

31

5.Vẽ nhiều trục• Ví dụ:1. function dieucheAM(fc,fm)2. Ac = 1; % Carrier Amplitude3. Am = 1; % Baseband Amplitude4. 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-AM9. subplot(1,3,1);plot(t,e,'r');grid on10. subplot(1,3,2);plot(t,c,'r');grid on11. 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ột1. Y = round(rand(5,3)*10); 2. subplot(2,2,1); bar(Y,'group') 3. title 'Group' 4. subplot(2,2,2); bar(Y,'stack') 5. title 'Stack' 6. subplot(2,2,3); barh(Y,'stack') 7. title 'Stack' 8. subplot(2,2,4) ; bar(Y,1.5) 9. title 'Width = 1.5'• Lệnh POLAR : vẽ hệ tọa độ cực1. t = -pi:0.01:pi; 2. polar(t, sin(t))

1 2 3 4 50

2

4

6

8Group

1 2 3 4 50

5

10

15

20Stack

0 5 10 15 20

1

2

3

4

5

Stack

1 2 3 4 50

2

4

6

8Width = 1.5

5/9/2013

32

6.Các lệnh vẽ đồ thị khác• Lệnh POLAR : vẽ hệ tọa độ cựcVí dụ 1:

t = -pi:0.01:pi; polar(t, sin(t))

Ví dụ 2:x=0:0.1:2*pi;polar(x,abs(sin(2*x).*cos(2*x)))

6.Các lệnh vẽ đồ thị khác• Lệnh STAIRS: vẽ đồ thị dạng bậc thang1. x = -pi:0.2:pi; 2. stairs(x,sin(x)) 3. xlabeL('Truc x') 4. ylabel('y = stairs(x,sin(x)') 5. grid on

-4 -3 -2 -1 0 1 2 3 4-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Truc x

y =

stai

rs(x

,sin

(x)

5/9/2013

33

6.Các lệnh vẽ đồ thị khác• Lệnh STEM: phân bố lược1. x = 0:0.1:4; 2. stem(x,exp(x)) 3. xlabeL('Truc x') 4. ylabel('y = stairs(x,sin(x)') 5. grid on

0 0.5 1 1.5 2 2.5 3 3.5 40

10

20

30

40

50

60

Truc x

y =

stai

rs(x

,sin

(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

5/9/2013

34

6.Các lệnh vẽ đồ thị khác• Lệnh PIE: phân bố % hình tròn

x=[20 45 15 13 7];y=[0 0 1 0 0] % 1 để nhấn mạnh phần 15,

%chọn 0 để chúng dính liền nhau.pie(x,y)

20%

45%

15%

13%

7%

Lệnh ginput

• fplot('sinc(x)',[-2*pi,2*pi]);• [x,y]=ginput(3) %lấy tọa độ 3 điểm trên đồ thị

5/9/2013

35

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 tinvà 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êntục, hay gián đoạn hoặc một hệ gồm cả liên tục vàgián đoạn.

5/9/2013

36

CÁC BLOCKS LIBRARY:

• Thư viện SOURCES• Thư viện Đồ thị (SINKS) • Thư viện Phần Rời Rạc (DISCRETE) • Thư viện Phần Tuyến tính (LINEAR)• Thư viện Phần Phi Tuyến (NONLINEAR)• Thư viện Phần Đầu Nối (CONECTIONS) • Thư viện BLOCKSETS và TOOLBOXES• ….

Các kiểu dữ liệu

Simulink chấp nhận các kiểu dữ liệu sau :• double số thực với độ chính xác gấp đôi• single số thực với độ chính xác đơn• int8 số nguyên có dấu 8 bit• uint8 số nguyên không dấu 8 bit• int16 số nguyên có dấu 16 bit• uint16 số nguyên khg dấu 16 bit• int32 số nguyên có dấu 32 bit• uint32 số nguyên không dấu 32 bit

5/9/2013

37

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àoFile/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.

5/9/2013

38

Ví dụ 2• Mô phỏng một phương trình dùng để biến đổi độ Celcius

thành độ Fahrenheit là : TF = (9/5)TC + 32• Trước hết ta khảo sát các khối cần để tạo mô hình: khối Ramp trong thư viện Sources để đưa vào tín hiệu nhiệt độ khối Constant trong thư viện Sources để tạo hằng số 32 khối Gain trong thư viện Math để tạo ra hệ số 9/5 khối Sum trong thư viện Math để cộng hai đại lượng khối Scope trong thư viện Sinks để hiển thị kết quả.

Ví dụ 3: Mô phỏng hệ ptz1 +z2 =1-z1+z2=1

5/9/2013

39

Ví dụ 4: Mô phỏng pt vi phânx’(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

5/9/2013

40

Ví dụ 6: Mô phỏng phương trình sau

Sine Wave

Scope

Product2

Product1Product

eu

MathFunction

-1

Gain1

-1

Gain80

Constant

Clock

3

Sine Wave

Scope

Product2

Product1Product

eu

MathFunction

-1

Gain1

-1

Gain80

Constant

Clock

3

1.Nhập vào chuỗi số và in ra kết quả tính của:

• A) tổng bình phương các số trong chuỗi?• B) giai thừa của các phần tử trong chuỗi?• C) số nguyên tố trong chuỗi?2. Nhập chuỗi ký tự chữ thường và in ra

chuỗi ký tự chữ HOA?3. Nhập vào chuỗi số và in ra chuỗi mới với

thứ tự ngược lại? 4. Vẽ đồ thị và tìm cực trị của hàm

f(x)=x^3+2*x^2-1 ?5. Tính x^n=?

5/9/2013

41

6. Viết chương trình yêu cầu Nhập liên tiếpcá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à trungbình cộng các số dương vừa nhập?