Tìm hiểu về Matlab

I.Giới thiệu chung về matlab 1.Lịch sử ra đờivà các ứng dụng của matlab hÖ thèng file II.Một số bài toán trong matlab 1.Một số phép toán cơ bản. Matlab có thể thực hiện một số phép toán cơ bản

pdf33 trang | Chia sẻ: tranhoai21 | Lượt xem: 1644 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Tìm hiểu về Matlab, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Hà Nội-2011 Tìm hiểu về Matlab I.Giới thiệu chung về matlab 1.Lịch sử ra đờivà các ứng dụng của matlab hÖ thèng file II.Một số bài toán trong matlab 1.Một số phép toán cơ bản. Matlab có thể thực hiện một số phép toán cơ bản. Kí tự Ý nghĩa Lệnh Matlab + Cộng a+b a+b - Trừ a-b a-b * Nhân ab a*b / Chia phải a:b a/b \ Chia trái b:a a\b ^ Mũ a^b a^2 Các biến trong matlab Giống như các ngôn nhữ lập trình khác Matlab cũng có quy định chung về biến: Ví dụ :Muốn viết 2+3 thì ta đánh dòng lệnh: >>2+3  Các phép toán được ưu tiên thực hiện từ trái qua phải Các biến đặc biệt Giá trị Ans Tên biến mặc định dùng để trả về kết quả pi=3.1415. Eps Số nhỏ nhất,như vậy cộng với 1 để được số lớn hơn 1 Flops Số của phép toán số thực Inf Để chỉ số vô cùng kết quả của 1/0 NaN hoặc nan Dùng để chỉ số không xác định như kết quả của 0/0 i( và ) j i=j= Nargin Số các đối số vào hàm sử dụng Narout Số các đối số ra Realmin Số nhỏ nhất có thể của số thực Realmax Số lớn nhất có thể của số thực Bạn có thể có thể tạo một biến của Matlab,và bạn có thể gán lại giá trị cho một hoặc nhiều biến Ví dụ : >>erases=4; >>pads=6; >>tape=2 >>iterms=erases+pads+tape Iterms= 12 >>erases=6 erases= 6 Các lệnh được kết thúc bằng dấu chấm phẩy,Matlab sẽ không thể hiện kết quả trên màn hình,ngược lại không có dấu phẩy Matlab sẽ hiển kết quả. 2.Các phép toán với ma trận và vec tơ Để tạo một vec tơ,ta chỉ cần liệt kê các phần tử của vec tơ trong cặp dấu ngoặc vuông [..].Giữa các phần tử ngăn cách nhau bởi dấu phẩy hoặc dấu cách (space). Ví dụ :Biểu diễn 1 vec tơ a : >>a=[1 4 5 6 8 9]  Trong một số trường hợp đặc biệt có thể biểu diễn vec tơ bằng những cách khác: Ví dụ : Vec tơ b với các thành phần lấy giá trị nguyên từ o đến 10 >>b=0:10  b= 0 1 2 3 4 5 6 7 8 9 10 Nếu muốn các thành phần liên tiếp cách nhau 2 thì nhập : >>c=0:2:10 c= 0 4 6 8 10 Khích thước chiều dài của vec tơ được cho nhờ hàm length >>dai=leng(c) dai= 6 Tính toán trên vec tơ cũng rất đơn giản. Ví dụ : Muốn cộng 2 vec tơ có cùng độ dài >>a=[1 2 3] a= 1 2 3 >>b=[2 3 4] b= 2 3 4 >>a+b ans= 3 5 7 Đối với phép trừ cũng thực hiện tương tự. Ma trận : Để nhập một ma trận vào Matlab giống như nhập vec tơ,ngoai trừ mỗi các hàng của ma trận phân cách nhau bằng dấu (;) hoặc enter Ví dụ : >>A=[1 2 3 4;5 6 7 8; 9 10 11 12] Hay >>A=[1 2 3 4 5 6 7 8 9 10 11 12 Kích thước ma trận được cho bàng hàm size >>size(A) ans= 3 4 Để truy suất đến từng phần tử cả ma trận ta dùng chỉ số phần tử tương ứng : Ví dụ : phần tử ở hàng thứ 2,cột thứ 3 là: >>A(2,3) Lấy tất cả các phần tử ở cột 1 : >>A(:,1) Chuyển vị : >>C=B’ Nếu B là ma trận phức thì B’ cho chuyển vị của liên hopwj phức của B.Trong trường hợp này muốn lấy chuyển vị của B: D=B.’ Nhân hai ma trận : >>D=A*B Nếu muốn nhân các phần tử tương ứng của ma trận có cùng kích thước : >>E=C.*D Nếu G là ma trận vuông thì ta có phếp nhân ma trận E với chính nó n lần thực hiện bằng phép lũy thừa : >>G^3 Nếu muốn lũy thừa từng phần tử của ma trận : >>G.^3 Nghịch đảo ma trận vuông : >>inv(G) Các trị riêng: >>eig(G) Đa thức đặc trưng : >>poly(G) Đa thức: Các đa thức trong Matlab được mô tả bằng các vec tơ hàng với các phần tử của vec tơ chính là các hệ số của đa thức,xếp theo số mũ giảm dần.Ví dụ,đa thức m=s^4 –s^3+4s2 -5s-1 được biểu diễn là: >>m=[1 -1 4 5 -1] Để xác định giá trị của đa thức,ta dùng lệnh polyval. Ví dụ,xác định giá trịc của đa thức tại điểm s=2 : >>polyval(m,2) Để xác định nghiệm của đa thức,ta dùng lệnh roots.Ví dụ : >>roots(m) 3.Hàm số : Matlab có một thư viện các hàm toán học rất phong phú như :sin,cos,log,exp,sqrt Đối số của hàm có thể là một ma trận. Ví dụ : x=[1 2;3 4],lệnh exp(x) trả về ans= 2.7183 7.3891 20.0855 54.5982 Đồ thị : Trong không gian 2 chiều : Lệnh plot : plot(x,f(x)) Với: f(x)-hàm số cần vẽ x-vec tơ miền giá trị của hàm f Ví dụ vẽ đồ thị của hàm y=sin(x) >>x=0:pi/100:2*pi; >>y=sin(x); >>plot(x,y) Kết quả : Để hiển thị lưới trên đồ thị : >>grid on Khi muốn vẽ thêm 1 đồ thị trên đồ thị hiên có ta dùng lệnh: >>hold on để tắt chế độ này dùng hold off Để giới hạn tọa độ của các trục : >>axis([xmin xmax ymin ymax]) Có thể đặt nhãn cho các trục cũng như tiêu đề cho đồ thị bằng các lệnh: xlabel ,ylabel,title,legend Matlab hỗ trợ rất nhiều thuộc tính đồ họa.Ví dụ: >>x=[0 1 2 3]; >>y=[0 4 1 5]; >>h=plot(x,y) Để thấy các thuộc tính đồ họa ta dùng lệnh: >>set(h) Ta đặt một số thuộc tính cho h >>set(h,’color’,’r’) đặt lại màu đỏ >>set(h.’LineWidth’,6) đặt lại độ rộng đường Trong không gian 3 chiều : >>plot3(x,y,z) Ta cần xác định các vectơ x, y, z. Để vẽ mặt (x, y, z=f(x,y)), lệnh meshgrid(x,y) sẽ tạo ra mảng X, Y từ miền giá trị của x, y. Ví dụ >>t = 0:0.02*pi:25*pi; >>x = sin(t); y = cos(t);  >>z = t;  >>plot3(x,y,z); Vẽ mặt: với -4≤x≤4 ; -4≤y≤4 >>[x,y]=meshgrid([-4:0.1:4]); >>z=x.*x.*y.*exp(-x.^2-y.^2); >>plot3(x,y,z) 2 22 x yz x ye  Vẽ mặt : với >>x=0:0.1:pi;y=0:0.1:pi; >>[X,Y]=meshgrid(x,y); >>Z=sin(Y.^2+X)-cos(Y-X.^2);  >>subplot(221); >>mesh(Z); >>subplot(222); >>mesh(Z); >>subplot(223); >>mesh(x,y,Z); >>axis([0 pi 0 pi -5 5]); >>subplot(224); >>mesh(Z); >>hidden off 2 2sin( ) os( )z y x c x y     , 0x y    Symbolic tool box Tên hàm Chức năng Tên hàm Chức năng diff Đạo hàm fourier Biến đổi fourier Int Tích phân Ifourier Biến đổi fourier ngược Taylor Khai triển taylor Iaplace Biến đổi Laplace Det Định thức của ma trận Laplace Biến đổi laplace ngược Numden Tử và mẫu của phân số Ezplot Vẽ hàm ,=plot Subs Thay biến sym bằng trị số Ezpolar Vẽ hàm ,tọa độ cực =polar dsolve Giải phương trình Ezmesh Vẽ mặt lưới=mesh Để biến đổi một số,một biến hay một đối tượng nào đó thành kiểu Symbolic ta có thể sử dụng một trong các cách sau: >>s=sym(A) >>x=sym(x) >>syms x y z %khai báo biến kết hợp  x,y và z là biến symbolic Tính đạo hàm diff của symbolic:nếu s là biểu thức symbolic thì: diff(s) đạo hàm của biến của s theo biến tự do diff(s,’v’) đạo hàm của s theo biến v diff(s,’v’,n) đạo hàm cấp n của s theo v Ví dụ : Tính đạo hàm y=sinx3 >>syms x %khai báo x là biến kiểu symbolic >>y=sin(x^3); >>z=diff(y) %đạo hàm của y z= 3*cos(x^3)*x^2 %sinh viên kiểm tra kết quả >>pretty(z) % hiện thị dạng quen thuộc 3cos(x3 )x2 >>ezplot(x,y) %vẽ y theo x Tính vi phân bằng hàm int –nếu s là biểu thức symbolic thì : int(s) tích phân không xác định của s theo biến mặc nhiên (muốn biết biến mặc nhiên này ta dùng hàm findsym). int(s,v) tích phân không xác định của s theo v int(s,a,b) tích phân xác định của s trên cận [a,b] int(s,v,a,b) tích phân xác định của s theo v trên cận [a,b] Ví dụ: Tính >>syms x >>s=2*x^2*(19+12*x^2)/(7*(x^2+1)) >>y=int(s,x,y,0,1)  % tích phân s theo c tren cận [0,1] >>subs(y)  %đổi sang kiểu số Giải hệ phương trình bàng hàm solve : >>syms x y >>[x,y]=solve(‘x^2*sin(x^2)-3*y=7’,’x+y=1’) Vẽ mặt 3D bằng hàm ezsurf .Ví dụ vẽ mặt s=f(x,y)= trên miền xác định :-5≤x<5 ; -2 <y<2 >>syms x y  >>s=y/(1+x^2 +y^2) >>ezsurf(s,[-5 5 -2*pi 2*pi]) 2 22 19 121 27 10 x x dx x                2 21 y x y    Simulink Cho phép phân tích,mô hình hóa và mô phỏng các hệ thống tuyến tính và phi tuyến,liên tục và rời rạc một cách trực quan trong môi trường giao tiếp đồ họa,bằng các thao tác chuột đơn giản. Khởi động simulink bằng một trong các cách sau nhập : >>simulink22 hoặc nhấp chuột vào biểu tượng trên menubar của Matlab Thư viện simulink hiện ra Để tạo mô hình simulink : -Nhấp chuột vào biểu tượng của thư viện simulink -Chọn File –New-Model trong menu của thư viện Simulink -chọn File-New-Model trong của sổ lệnh của matlab. Cửa sổ soạn thảo của simulink cho phép ta ‘nhấp-kéo –thả’ vào từng khối chức năng trong thư viện simulink.Ví dụ,đặt vào đây khối ‘Sine Wave’ trong thư viện của Lấy 1 khối từ thư viện Sau khi đặt tất cả các khối cần thiết của mô hình,nối chúng lai bằng các ‘nhấp- giữ’ và kéo một đường từ ngõ ra của khối này vào của khối khác rồi thả phím trái chuột,một kết nối sẽ thiết lập Ví dụ : Xây dựng mô hình hệ thống xe tải m F bv Cho bởi phương trình : m.(dv/dt)=F-bv hay dv/dt=1/m(F-bv). Trong đó : m-khối lượng xe F-lực tác động của động cơ b-hệ số ma sát v-vận tốc đạt được Như vậy : m,F:Ngõ vào của mô hình ; b,v:ngõ ra của mô hình v a Xuất phát điểm của việc xây dựng các mô hình hệ thống từ các phương trình vi phân tương ứng là các khối tích phân (Integratorr).Nếu trong phương trình mô tả hệ thống có vi phân bậc n thì ta sẽ đặt vào mô hình n khối tích phân. -Mở một của sổ mô hình mới -Đặt vào mô hình khối ‘Integrator’ từ thư viện ‘Continous’ và kẻ các đường thẳng nối đến ngõ vào và ngõ ra của khối này. -Đặt nhấn ‘vdot’ (dv/dt) cho đường nối đến ngõ vào va ‘v’ cho đường đến ngõ ra bằng cách nhấn đúp chuột ngay trên các đường này. Từ phương trình hệ thống ta thấy dv/dt (vdot) bằng tích của thành phần (1/m) và thành phần tổng (F-bv),nên ta thêm khối 1/m ngay trước khối tích phân : -Đặt vào khối ‘Gain’thư viện -Nhấn đúp vào khối này để đổi ngõ vào từ ‘++’ sang ‘+-’ Để được thành phần bv ta chỉ cần đặt thêm khối ‘Gain’ với độ lợi b : -Đặt khối ‘Gain’có độ lợi b -Đặt nhãn là ‘damping’ tượng trưng cho thành phần lực cản của xe. Đến việc xây dựng mô hình xe tải với ngõ vào u và ngõ ra v coi như hoàn thành.Tuy nhiên ,để mô phỏng hình này,ta cần đặt thêm khối ‘Step’vào u và hiển thị trên khối ‘Scope’ -Đặt khối ‘Step’ trong thư viện biên đọ u ngay ngõ vào -Đặt khối ‘Scope’ trong thư viện ngay ngõ ra v. Trước khi mô phỏng m,b,u cần được gán giá trị >>m=1000 >>b=50 >>u=500 Thời gian mô phỏng phụ thuộc thông số ‘Stop time’ trong menu ‘simulation paramrters’ Để chạy mô phỏng : Nhấn chuột vào biểu tượng trên menubar của mô hình Chọn;Simulation Start Ctrl-T Nhấn đúp vào’Scop’ để xem kết quả mô phỏng Viết chương trình bằng Matlab Chương trình viết bằng ngôn ngữ Matlab gần giống các ngôn ngữ như Pascal,C. Các cấu trúc trong ngôn ngữ Matlab If-thực hiên các lệnh có điều kiện Dạng chung của lệnh if : If biểu thức các lệnh elseif biểu thức các lệnh else các lệnh end Các lệnh được thực hiện nếu phần thực của biểu thức khác không.Các phần tử Và elseif là tùy chọn.’Biểu thức’ trong lệnh ì thường có dạng biểu thứ 1 & biểu thức 2 Trong đó : & là ==,,=,hay ~= For-lặp lại các lệnh một số lần được chỉ định Cấu trúc: for biến=giá trị :bước gia tăng :giá trị cuối các lệnh end ‘biến’ lấy giá trị ‘giá trị đầu’ sau mỗi lần thực hiện được tăng thêm một lượng ‘bước gia tăng’ ,nếu ‘biến’ vẫn còn “nhỏ hơn” thì thực hiện. while –Lặp lại các một số lần không xác định Cấu trúc : while biểu thức các lệnh end Các lệnh được thực hiện khi phần thực của ‘biểu thức’ khác không.’biểu thức’ trong lệnh while thường có dạng biểu thức 1 & biểu thức 2 Trong đó : & là ==,=,hay~=.Lệnh break có thể được dùng để dừng vòng lặp Swich –chuyển đổi giữa nhiều trường hợp trên cơ sở biểu thức Cấu trúc : Swich biểu thức case trường hợp 1 các lệnh case trường hợp 2 các lệnh .. otherwise các lệnh end Các lệnh theo sau case thứ I được thực hiện khi ‘biểu thức ‘ có gái trị trong ‘trường hợp i’.Ngoài các trường hợp được liệt kê thì các lệnh theo sau otherwise được thực hiện. Ví dụ : Giải phương trình f(x)=0.Thuật toán chia đôi khoảng : Giả sử giải phương trình : f(x)=x3 -3x2 +x+1=0 >>% chuong trinh 2-giai phuong trinh bang phuong phap chia doi khoang >>clear all >>b=-0.5; >>c=0; >>epsilon=10^(-4); >>m=b; %m duoc khoi tao bang b >>while (abs(c-b)>=epsilon)&(f(m)~=0) >>m=(b+c)/2 >>if f1(b)*f1(m)<0 >>c=m; >>else b=m; >>end >>disp(‘nghiem xap xi :’) >>m Chương trình gọi fuction f1 trả lại giá trị của hàm f(x) >>function v=f1(x) >>v=x^3-3^2+x+1; Kết quả tính: Nghiệm xấp xỉ: m= -0.4142 Dựa vào các thuật toán ta có thể giải được nhiều những phương trình,hệ phương trình đại số