Giới thiệu MATLAB là một bộ phần mềm dùng để tính toán các bài toán kĩ thuật, được viết bằng ngôn ngữ C do hãng Math Works Inc.. Nó được tạo trên cơ sở những phần mềm do các nhà lập trìn
Trang 1Trường đạI học giao thông vận tảI
thuyết minh
đề tàI nghiên cứu khoa học cấp trường
matlab tìm hiểu và ứng dụng giải một số bài toán kĩ thuật
HANOI - 2002
Trang 2mục lục Phần 1 Giới thiệu về Matlab
1 Bắt đầu với Matlab
9 Các toán tử điều khiển
10 Các loại file trong Matlab
11 Xử lí tín hiệu
12 Vẽ đồ thị
Trang 3Phần 2 ứng dụng Matlab giải một số
bài toán kĩ thuật
1 Bài toán về mạch điện
2 Giải bài toán động học cơ cấu phẳng
3 Giải bài toán cân bằng máy
Trang 4Giới thiệu
MATLAB là một bộ phần mềm dùng để tính toán các bài toán kĩ thuật,
được viết bằng ngôn ngữ C do hãng Math Works Inc sản xuất Nó được tạo trên cơ sở những phần mềm do các nhà lập trình của các dự án LINPACK và EISPACK viết ra bằng ngôn ngữ Fortran dùng cho việc thực hiện các phép tính và thao tác trên ma trận
Tên của phần mềm MATLAB là chữ viết tắt của ‘ matrix laboratory’ có nghĩa là ‘phương pháp ma trận’ Đến khi thực hành sử dụng phần mềm ta
sẽ thấy mỗi phần tử cơ bản của MATLAB là một ma trận
MATLAB liên tục được bổ sung và hoàn thiện Thời gian gần đây hãng sản xuất đã cho ra phiên bản mới nhất là MATLAB 6.0
Matlab là một phần mềm rất mạnh, cho phép giải rất nhanh các bài toán phân tích số liệu, tính toán ma trận, xử lí tín hiệu, mô phỏng và tạo vẽ đồ thị Lí do vì Matlab đã có một loạt các hàm chuyên giải quyết các vấn
đề đó được đặt trong Toolbox Thêm nữa, Matlab lại rất dễ sử dụng: nó không cần khai báo biến, các câu lệnh được viết rất gần gũi như khi viết các biểu thức toán học, tiết kiệm rất nhiều thời gian cho việc lập trình
Một đặc điểm nổi bật nữa của Matlab là nó có khả năng mở rộng: người
sử dụng có thể tự sáng tạo những file hàm đặt vào Toolbox để thực hiện giải những baì toán trong lĩnh vực chuyên môn của mình
Sau một thời gian tự tìm hiểu và ứng dụng chúng tôi thấy rằng MATLAB
là một phần mềm rất thích hợp cho việc giải các bài toán kĩ thuật trong nhiều lĩnh vực Đặc biệt trong các trường Đại học kĩ thuật nó có thể giúp cho các cán bộ nghiên cứu và sinh viên có được một công cụ sắc bén để nâng cao năng lực tính toán, tiết kiệm thời gian lập trình
Đó là lí do để nhóm nghiên cứu chúng tôi mạnh dạn thực hiện đề tài có tính chất tìm hiểu, giới thiệu và thử ứng dụng này
Trang 5
Phần 1 giới thiệu về matlab
1 Bắt đầu với Matlab
Sau khi bật máy tính, để khởi động Matlab, từ màn hình Destop, nhắp đúp trỏ chuột trái vào biểu tượng của Matlab trên màn hình
sẽ xuất hiện cửa sổ Command Window như hình dưới đây:
Ví dụ 1: Cần ttực hiện phép tính 201+191x32/44, từ dấu nhắc trên
Command Window ta gõ vào như sau:
>> 201+191*32/44 Bấm Enter, kết quả cho như dưới đây:
ans =
339.9091 Hình 2 là hình ảnh bạn thấy trên màn hình
Trang 6
Hình 2
Ví dụ 2: Nếu bạn muốn vẽ đồ thị hàm số y=5sinx+2cos2x+0,2x với biến
x chạy từ -10 đến 10, gia số của x là 0,1, trên Command Window bạn có thể gõ vào các lệnh như được thể hiện trong hình 3 dưới đây:
Hình 3 Sau khi bấm Enter ở dòng lệnh cuối cùng, chương trình chạy và cho kết quả là đồ thị như trong hình 4
Trang 7trªn mµn h×nh sÏ xuÊt hiÖn mét cöa sæ so¹n th¶o Editor/ Debugger víi
tªn file lµ [Untitled1] nh− trªn h×nh 6 d−íi ®©y:
Trang 8
Hình 6 Viết chương trình vẽ đồ thị trên màn hình soạn thảo đó ( Hình 7)
Hình 7
Khi viêt xong ta đặt tên cho file và cất nó bằng cách bấm chọn File
\ Save as trên màn hình Editor / Debugger ( Hình 8) Cửa sổ Save as xuất hiện (hình 9): ta gõ
Trang 9Hình 8
tên file, ví dụ dothi vào ô File name rồi bấm chọn Save Chương trình sẽ
được tự động cất vào thư mục Work của Matlab với tên là dothi và với
đuôi mặc định là m ( file vừa cất sẽ là dothi.m)
ằ
Hình 9
Để chạy chương trình trong file này, tại chỗ dấu nhắc trên màn hình
Command Window ta chỉ việc gõ tên file : >> dothi
Trang 10rồi bấm Enter.Chương trình sẽ được thực hiện và kết quả cho ra là đồ thị
a-Câu lệnh và biến trong Matlab
Các câu lệnh trong Matlab thường có dạng sau:
biến = biểu thức
Tên biến được bắt đầu bằng một chữ cái, sau đó có thể là các chữ và số
Ví dụ:
a2=4/5 Matlab chấp nhận tên biến (cũng như tên hàm) có đến 19 kí tự và phân biệt chữ in hoa với chữ in thường Ví dụ : A và a là tên hai biến khác nhau
Không giống với một số phần mềm lập trình khác, ở đây biến không phải khai báo trước Nếu không viết tên biến và dấu = trước biểu thức thì
chương trình sẽ tự động tạo tên biến là ans ( đứng cho chữ answer)
Ví dụ:
>> 4/5
ans =
0.8000 Nếu cuối câu lệnh ta đánh dấu kết thúc ‘ ; ‘ thì các phép tính được thực hiện nhưng không xuất kết quả ra màn hình Ngược lại nếu không gõ dấu kết thúc lệnh thì kết quả tính được in ra màn hình Ví dụ:
>> b20=30+3^4/35 b20 =
32.3143 Nếu câu lệnh quá dài không thể viết hết được trên một dòng thì có thể dùng dấu ba chấm ( ) để viết tiếp trên dòng thứ hai Ví dụ:
>> b = 22.334 - 45.12 + 89.222 – ( 123.30+330.2)/217.22
+ 87.32 – 443.112 ; Muốn viết lời chú dẫn, trước dòng đó ta gõ dấu % Ví dụ:
% Day la chuong trinh giai phuong trinh vi fan bậc hai
Khi chạy chương trình, máy sẽ bỏ qua dòng này
b Các phép toán
• Các phép toán số học: nối các toán hạng trong biểu thức
được với nhau Dấu các phép toán như sau:
- trừ
* nhân
Trang 11~ không Các phép toán quan hệ và lô gíc thường được dùng trong các biêủ thức của các toán tử điều khiển như if, while
c Số dùng trong Matlab
Matlab dùng số thập phân truyền thống với số chữ số thập phân tuỳ chọn
Bạn cũng có thể dùng số dưới dạng luỹ thừa của 10 và số có đơn vị phức
Dưới đây là một số ví dụ về các số hợp thức dùng trong Matlab:
4 57 -180.1122 3.09837412 12.6529E4 20.2908e-2
12i -23.1261i 5e2i
d- Nhập số liệu từ bàn phím
Dùng lệnh input với qui cách viết như sau:
a=input(‘ Hãy nhập giá trị của a : a = ‘) Khi chạy chương trình máy sẽ dừng để đợi ta gõ vào từ bàn phím giá trị
của a, sau đó bấm Enter
f Ma trận
Trang 12Ma trËn ®−îc biÓu thÞ trong dÊu ngoÆc vu«ng, mçi phÇn tö trªn mét hµng
®−îc c¸ch nhau b»ng c¸c « trèng hoÆc dÊu phÈy (,), cßn mçi hµng ®−îc ng¨n c¸ch bëi dÊu chÊm phÈy (;)
VÝ dô : viÕt ma trËn A gåm 3 hµng 3 cét trªn mµn h×nh Command Window
g Sè phøc vµ ma trËn phøc
Matlab cã thÓ thùc hiÖn ®−îc c¸c phÐp to¸n vÒ sè phøc Sè phøc
®−îc biÓu thÞ nhê hµm i vµ j VÝ dô viÕt sè phøc z dïng i vµ j nh−
d−íi ®©y cho kÕt qu¶ nh− nhau:
z = 4+5*i hoÆc z = 4+5*j Mét vÝ dô kh¸c vÒ sè phøc ®−îc viÕt d−íi d¹ng e mò:
- sinh : sin hypecb«lic
- cosh : cosin hypecb«lic
- tanh : tang hypecb«lic
Trang 13- asinh : sin hypecbôlic ng−ợc
- acosh : cosin hypecbôlic ng−ợc
- atanh : tang hypecbôlic ng−ợc
Ví dụ 1:
a=1.223;
b=sin(a) Kết quả cho:
b = 0.9401
Ví dụ 2:
c=[1.22 -0.96 1.17 ];
d=cos(c) Kết quả cho:
d = 0.3436 0.5735 0.3902
md = 5.3852 arg =
1.1903
4 Các thao tác đặc biệt trên ma trận
Trang 14- LÊy ra mét ma trËn con tõ mét ma trËn ®∙ cho
>>g=c(3,2:4)
g =
10 11 12
Trang 15+ Vết của ma tr ận : Dùng lệnh diag để tạo một ma trận cột mà
các phần tử của nó là các phần tử nằm trên đường chéo của ma trận cho
trước Ví dụ: muốn có vết của ma trận h ở trên ta làm như sau:
Trang 18Ví dụ: Nhân số 3 với ma trận a ở trên
>> t=3*a
t =
3 9 -12 15
6 -3 6 0
12 18 -3 3
0 3 9 15
- Nhân ma trận với ma trận Điều kiện để hai ma trận nhân được với nhau là số cột của ma trận thứ nhất phải bằng số hàng của ma trận thứ hai Ví dụ ta nhân ma trận b dưới đây với ma trận a: >> b=[3 7 0 9]; >> tich=b*a tich = 17 11 29 60
Ví dụ nữa là ta nhân ma trận a với ma trận chuyển vị của b: >> tich2=a*b' tich2 = 69
-1
63
52
- Chia ma trận Ma trận x= A\B với điều kiện : A*x=B (*)
Ví dụ: A=[ 2 1 9 7; 1 3 8 5; 5 3 4 2; 9 0 6 6] A = 2 1 9 7
1 3 8 5
5 3 4 2
9 0 6 6
B=[12; 2; -6; 8 ]' B = 12
2
-6
8 x= A\B
Trang 19x =
0.1026 -6.2051 4.8718 -3.6923 Thử lại xem A*x có bằng B không:
A*x ans =
12.0000 2.0000 -6.0000 8.0000 Kết quả đúng bằng véc tơ B (cũng có thể dùng phép chia phải / nhưng phải thay A và B bằng các ma trận chuyển vị tương ứng, tức B’/A’, và kết quả là một ma trận hàng đúng bằng ma trận chuyển của nghiệm x đã tính ở trên)
Thử tìm nghiệm x từ phương trình (*) khi dùng ma trận nghịch đảo:
Ta có nghiệm x được viết như sau: x=A-1.B
Gõ vào dòng lệnh sau:
X=An*B Kết quả cho:
X =
0.1026 -6.2051 4.8718 -3.6923
- Định thức của ma trận
Định thức của ma trận vuông được tính nhờ hàm det Ví dụ tính định thức
D của ma trận A ở trên:
>> D=det(A)
Trang 20D = -39
1 16
3 16
x =
Trang 210.3333 0.5000 3.0000 2.0000
6 Các hàm thực hiện các phép tính với đa thức
- Hàm poly : Xác định đa thức khi biết trước nghiệm
Quy các viết p=poly(b) trong đó b là một ma trận hàng
Kết quả sẽ cho ra là một ma trận hàng mà mỗi phần tử của nó là một hệ
số của một đa thức có nghiệm là các phần tử của ma trận b ( theo số mũ giảm dần)
Trang 22x4- 2x3 - 13x2 + 38x - 24 = 0
- Hàm roots : Xác định nghiệm của đa thức
Quy cách viết : a=roots(b) trong đó b là ma trận hàng với các phần tử là các hệ số của đa thức (theo
số mũ giảm dần) Kết quả cho ra là một ma trận cột mà các phần tử là nghiệm của đa thức
Ví dụ: Thử tìm lại nghiệm của đa thức trên Ta viết các lện như sau:
p=[ 1 -2 -13 38 -24 ];
r=roots(p)
r = -4.0000 3.0000 2.0000 1.0000
Ta thấy kết quả hoàn toàn chính xác
- Hàm conv : Dùng nhân đa thức
Quy cách viết: a=conv(b,c) trong đó b,c là hai ma trận hàng có các phần
tử là các hệ số của các đa thức cần nhân Kết quả cho ra là ma trận a có các phần tử là hệ số của ma trận tích
Ví dụ : cần nhân hai đa thức x3+2x2+6 và 3x4-6x2+5x-10 ta làm như sau:
- Hàm deconv : Dùng chia hai đa thức
Qui cách viết như sau: [ m , n] = deconv(p,q) với p và q là hai ma trận hàng có các phần tử là các hệ số của đa thức bị chia và đa thức chia, còn các phần tử của ma trận m,n là các hệ số của đa thức thương và phần dư
Ví dụ : Ta thử chia ngay đa thức tích vừa có ở trên cho đa thức có các hệ
số là các phần tử của ma trận c, tức đa thức: 3x4-6x2+5x-10
a=[3 6 -6 11 0 -56 30 -60];
c=[3 0 -6 5 -10];
[b,d]=deconv(a,c)
Trang 23Các hàm tìm giá trị cực đại, cực tiểu và trung bình
- Hàm max : Tìm giá trị lớn nhất
Qui cách viết ln=max(a) với a là ma trận hàng Kết quả cho ra là một phần tử có giá trị lớn nhất của a
- Hàm mean : Tìm giá trị trung bình
Ví dụ:
tb=mean(a)
tb = 2.3333 Nếu a là một ma trận có nhiều hàng nhiều cột thì các giá trị max, min hoặc trung bình sẽ là các giá trị tương ứng đối với các cột của ma trận
Trang 24- Hàm Interp1 : Dùng tìm các giá trị bị khuyết
Ví dụ: Đã biết giá trị của hàm y=x3-3x+4 tại các điểm có x=0,1,2,3,4 và
5 Hãy xác định giá trị của y tại các điểm có x= 0,3, 0,5, , 4.2, 4,8
y2 = Columns 1 through 7 4.0000 2.7700 2.2500 2.2240 2.5920 7.0330 30.1210
Trang 25Columns 8 through 10
65.6800 100.4800 114.0000
Đó là 10 giá trị của y ứng với 10 giá trị của x ( trong chương trình tính là x2) Còn đồ thị sẽ cho thấy sự ppù hợp của các kết quả này: Các điểm vẽ bằng dấu ‘+’ là biểu thị các điểm cần tìm, còn các điểm vẽ bằng dấu ‘o’
tf =
Trang 2612.0517
b Hàm để tìm nghiệm phương trình phi tuyến và các hàm tối
ưu
- Hàm fzero : xác định nghiệm của hàm một biến
- Hàm fmin : tính giá trị cực tiểu của hàm một biến
- Hàm fmins : tính các giá trị cực tiểu của hàm nhiều biến
Ví dụ: Dùng hàm fzero tìm nghiệm của phương trình sau tại vị trí gần
x=1 : y=2- 6sinx / (1+x);
Ta viết file hàm nghiem1.m như sau:
Zero found in the interval: [0.36, 1.4525]
x1 = 0.5385
Để thử lại, ta thay x=x1 vào phương trình ban đầu để xem kết quả hai vế
có bằng 0 hay không
y=2-6*sin(.5385)/(1+.5385)
y = -6.0516e-005
Ta thấy y~ 0 và có thể nói kết quả đủ chính xác
c Hàm để giải phương trình vi phân : hàm ode23 và ode34
Ví dụ: Giải phương trình vi phân Van de Pol có dạng như sau:
Trang 27xc=zeros(2,1);
xc(1)=x(1).*(1-x(2).^2)-x(2);
xc(2)=x(1);
Viết file chính có tên ftvf0.m như dưới đây:
t0=0; t1=20;% Thoi diem dau va cuoi
x0=[0 2]; % Dieu kien ban dau
[t,x]=ode23('ftvf',t0,t1,x0);
plot(t,x) Chạy chương trình kết quả cho dưới dạng đồ thị như dưới đây:
9 Các toán tử điều khiển
Cũng như các phần mềm lập trình khác, các toán tử điều khiển cũng có
trong Matlab Đó là toán tử vòng lặp for, while và toán tử lựa chọn if
- Toán tử for
Dạng chung của toán tử này được viết như sau:
for biến = biểu thức các câu lệnh end
Biểu thức ở đây thường có dạng m:n hoặc m:i:n, trong đó m, n là giá trị đầu và cuối, còn i là gia số
Trang 28- Toán tử while
Dạng chung của lệnh vòng lặp này có dạng sau:
while biểu thức các câu lệnh end
Biểu thức ở đây là biểu thức quan hệ
Ví dụ:
d=1;
while d>0.001 z1=z2-sin(z2)/(z2+2);
d=abs(z2-z1);
z2=z1;
end
- Toán tử điều kiện if
Toán tử có dạng chung nh− sau:
if biểu thức các câu lệnh elseif biểu thức các câu lệnh
else các câu lệnh end
Cũng nh− đối với toán tử while biểu thức ở đây cũng là biểu thức quan hệ
Ví dụ:
for k=1: n for p=1: m
if k= =p
z(k,p)=1;
elseif k<p z(k,p)=-1 ;
else z(k,p)=0;
end end end
Trang 29a=5*k+4 end
10 các loại file dùng trong matlab
Có hai loại file là M-File và file dữ liệu (data file) Các file có chứa các lệnh của Matlab được gọi là M- file Sở dĩ gọi là M- file vì phần mở rộng của các file này là m
Có hai loại M- file là script file và function file (file hàm)
Script File
Khi Script được kích hoạt Matlab đơn giản thực hiện các lệnh tìm thấy trong file Các câu lệnh trong file này thì hoạt động trên toàn bộ các dữ
liệu trong Workspace
Ví dụ : file lg.m dưới đây là một script file:
% File dung tinh ham luong giac va ve do thi f1=0:2*pi/60;
a=3*sin(f1)+4.5*cos(f1+.6);
plot(f1,a) Sau khi tính toán và vẽ đò thị xong các biến f1 và a vẫn còn lưu trong workspace
Function File
Là một M-File có chứa từ function tại vị trí đầu tiên trên dòng đầu của
file Với function file, các biến được định nghĩa và hoạt động chỉ trong
phạm vi file, chứ không có tính toàn cục như trong script file Function file rất tiện ích trong việc mở rộng thêm khả năng của Matlab, cụ thể là tạo thêm được các Matlab file mới
Dưới đây là một ví dụ về function file được tạo để giải phương trình bậc
hai, tên file là ftb2.m :
function [x1 , x2] = ftb2(a,b,c) % File ham nay dung de giai Fuong trình bac hai : ax^2+bx+c=0 % voi a, b, c la cac hang so cho truoc Cac nghiem là x1 va x2
File dữ liệu ( data file)
Ta có thể ghi số liệu vào một file gọi là file số liệu với phần mở rộng là dat Khi cần file có thể được gọi ra
Trang 30Dưới đây là ví dụ về tạo và gọi file số liệu:
Giả sử ta có một ma trận hàng a như sau:
>>a=1:8
a =
1 2 3 4 5 6 7 8 Giờ ta muốn ghi các giá trị của ma trận a vào một file dữ liệu có tên là
sl1.dat, ta dùng lệnh save với qui cách viết như sau:
>> save sl1.dat a -ascii
Khi đó ma trận a đã được lưu trong fil sl1.dat Nếu muốn gọi ra các số
liệu này và gán cho cho nó một tên biến mới, ví dụ là x, ta dùng lệnh
load với qui cách viết như sau:
Matlab có một số hàm dùng để xử lí tín hiệu số dưới đây:
abs - giá trị (mô đun) của số phức angle – góc pha
conv - tích chập ( convolution) deconv – ( deconvotution) fft - biến đổi Fu ri ê nhanh ift - biến đổi ngược Fu ri ê fftshift
Ví dụ: cho x là một ma trận cột như sau:
x=[ 4 3 7 -9 1 0 0 0 ]’ ;
Biến đổi Fu ri ê nhanh của x được viết như sau:
y=fft(x) Kết quả cho như dưới đây:
y =
6.0000 11.4853 + 2.7574i -2.0000 +12.0000i -5.4853 -11.2426i 18.0000 -5.4853 +11.2426i -2.0000 -12.0000i 11.4853 - 2.7574i