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
33 trang |
Chia sẻ: tranhoai21 | Lượt xem: 1779 | Lượt tải: 1
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ố