Matlab tìm hiểu và ứng dụng giải một số bài toán kĩ thuật
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:
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:
3.09837412 12.6529E4 20.2908e-2
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
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
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:
- 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
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 19- Ma trận nghịch đảo : Dùng hàm inv
Ví dụ: Tính ma trận nghịch đảo của ma trận A ở trên
gọi An là ma trận nghịch đảo của ma trận A thì:
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:
Trang 216 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
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:
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
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
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’
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
Chạy chương trình chính, kết quả cho trên màn hình như sau:
Zero found in the interval: [0.36, 1.4525]
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:
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
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ö ®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
Trang 29a=5*k+4
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
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 ê
Trang 3112 vẽ đồ thị
Matlab rất mạnh với việc vẽ đồ thị Dưới đây trình bày cách vẽ đồ thị trong không gian hai chiều (2D) và ba chiều (3D)
a.Vẽ đồ thị 2D
Vẽ các đường cong thông thường:
Dùng lệnh plot với qui cách viết như sau:
plot(x,y) trong đó x và y là các ma trận hàng (hoặc cột ) cùng cỡ Matlab sẽ vẽ ra một đường cong của y theo x
Nếu bạn muốn chọn màu và kiểu nét vẽ cho đương cong có thể làm theo
ví dụ sau:
plot(x,y, 'r*')
Khi chạy, Matab sẽ cho bạn đường cong tạo bởi các dấu *** và có màu
đỏ (chữ r đứng cho từ red trong tiếng Anh, nghĩa là đỏ)
Dưới đây là bảng kí hiệu màu và kiểu nét vẽ dùng khi vẽ đồ thị:
Đỏ Xanh lá cây Xanh nước biển Trắng
Đen
°
ì +
∗
- : -
Điểm Vòng tròn Dấu nhân Dấu cộng Dấu sao Nét liền Nét chấm Nét đứt Nét chấm gạch
Cũng có thể vẽ nhiều đường cong trên cùng một hệ trục toạ độ
Ví dụ: lệnh vẽ sau sẽ cho 3 đường cong khác nhau trên một hình:
plot(x1,y1,’r *’,x2,y2,’g+’x3,y3,’w -‘)
Nếu bạn muốn đặt tên cho đồ thị hãy dùng lệnh title
Bạn cũng có thể đặt tên cho các trục toạ độ x và y bằng cách dùng lệnh
Còn để tạo lưới trên hình vẽ dùng lệnh grid
Cụ thể ta làm một ví dụ dưới đây:
Vẽ trên cùng hệ trục toạ độ đồ thị hai hàm số sau
y1=e-5tsin5t ; y2= e-5t cos5t;
Trang 32với biến t chạy từ - 4 đến +4:
Ta viêt file p2d.m để vẽ đồ thị nh− sau:
% Chuong trinh ve do thi 2D
t=-4:.05:4;
y1=exp(-.5*t).*sin(5*t);
y2=exp(-.5*t).*cos(5*t);
xlabel(' Gia tri t ')
ylabel('gia tri y1, y2')
Ví dụ: ta vẽ hai đồ thị y1=y1(t) và y2=y2(t) vừa nêu trên cùng một hình
nh−ng lại trên hai hệ trục riêng biệt, ta viết lại các các lệnh ( tính từ lệnh
plot(t,y1, ) nh− sau:
subplot(211)
Trang 33ylabel('gia tri y2')
Trang 34Vẽ Đồ thị dạng thanh (Bar)
Đồ thị bar biểu diễn giá trị của một véc tơ hay một ma trận dưới dạng
các thanh thẳng đứng hay nằm ngang Bar(y) biểu diễn các phần tử của
véc tơ y nếu y là một véc tơ Nếu y là một ma trận, một nhóm thanh sẽ
biểu diễn các phần tử trong một hàng, trục x sẽ biểu diễn số hàng
Ví dụ: Vẽ đồ thị biểu thị số sinh viên tốt nghiêp của một trường Đại học
từ năm 1995 đến 2001, biết số sinh viên tốt nghiệp tương ứng là 1000,
Lệnh Pie(x) biểu thị thành phần phần trăm theo dữ liệu trong x Mỗi
phần tử trong x được đại diện bằng một phần của đồ thị Pie
Pie(x,explode) đặt các phần tử cho đồ thị Pie Explode là một véc tơ hay
một ma trận của số 0 và 1 tương ứng với x Các phần tử là 0 sẽ tương ứng
với các phần tạo thành một khối liền trong đồ thị pie Nếu là giá trị 1 thì
phần tử tương ứng với mẩu trên đồ thị sẽ được tách rời khỏi khối liền
trong đồ thị Pie Explode phải có cỡ giống với x
Ví dụ : Biểu diễn thành phần phần trăm của các loại vật liệu có
trong một hỗn hợp
x=[7 15 56 12 10];