Trờ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
Mã số : T2001- CK- 08
Ngời thực hiện : Th.S
Nguyễn Bá Nghị
b. Các phép toán
c. Số dùng trong Matlab
d. Nhập số liệu từ bàn phím
e. In kết quả ra màn hình
f. Ma trận
g. Số phức và ma trận phức
3. Các hàm toán học
a. Các hàm lợng giác
b. Các hàm toán sơ cấp
4. Các thao tác đặc biệt trên ma trận
5. Thực hiện các phép tính trên ma trận
a. Các phép tính trên ma trận
b. Các phép tính phần tử - phần tử của ma trận
6. Các hàm thực hiện các phép tính về đa thức
7. Các hàm phân tích dữ liệu
8. Hàm của hàm
a. Hàm tích phân số
b. Hàm tìm nghiệm phơng trình phi tuyến và các hàm tối u
c. Hàm giải phơng trình vi phân
9. Các toán tử điều khiển
10. Các loại file trong Matlab
Giới thiệu
Đó 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.
Phần 1
giới thiệu về matlab1. 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:
Hình 1
Bạn cũng có thể vào Matlab bằng cách trên màn hình Destop bấm chọn
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.
Hình 4
Nếu muốn lu giữ chơng trình vẽ đồ thị trên để có thể tu sửa hoặc chạy
nhièu lần, bạn hãy viết một file chơng trình ( gọi là M. file) nh sau:
trên cửa sổ Command Window bấm chọn File \ New \ M-file (hình 5):
Hình 5
trê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:
Hình 6
Viết chơng trình vẽ đồ thị trên màn hình soạn thảo đó ( Hình 7).
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 nhng 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.
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.
e. In kết quả ra màn hình: có hai cách
Cách 1 : Không gõ dấu kết thúc ( ; ) ở cuối câu lệnh. Khi chạy kết quả
tính đợc tự động in ra trên màn hình.
Ví dụ:
>> x=12+6*sin(pi/7)
x =
14.6033
Cách 2: dùng lệnh disp
>> x=12+6*sin(pi/7);
disp(x)
14.6033
f. Ma trận
Ma 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 (;).
Ma trận có các phần tử là số phức đợc viết nh sau:
A=[ 3+2*i 4-9*i ; 12+i 7-6*i ]
3. Các hàm toán học
a. Các hàm lợng giác
- sin : sin
- cos : cosin
- tan : tang
- asin : arcsin
- acos : arccosin
- atan : arctang
- atan2 : arctan góc phần t
- sinh : sin hypecbôlic
- cosh : cosin hypecbôlic
- tanh : tang hypecbôlic
- 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)
4. Các thao tác đặc biệt trên ma trận
- Tạo ma trận hàng
>>t=0: 0.5: 3
t =
0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000
>> v= -2: 3
v =
-2 -1 0 1 2 3
- Lấy ra một ma trận con từ một ma trận đ cho
Ví dụ: Cho ma trận c
>> c=[1 2 3 4 ; 5 6 7 8; 9 10 11 12]
c =
1 2 3 4
5 6 7 8
9 10 11 12
Lấy ra một ma trận con e từ ma trận c nh sau:
>> e=c(1:2,2: 4)
e =
10 11 12
Ví dụ khác: tạo ma trận k từ ma trận h và ma trận cột f
>> k= [ h f ]
k =
2 3 4 3
6 7 8 7
10 11 12 11
- Tạo một số ma trận đặc biệt
+ 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:
>> ch=diag(h)
ch =
2
7
12
+ Ma trận đờng chéo
Cũng dùng lệnh diag tạo ma trận đờng chéo từ một ma trận cột hoặc ma
trận hàng cho trớc.
Ví dụ: tạo ma trận đờng chéo từ ma trận cột ch ở trên
>>C=diag(ch)
C =
- Đảo ma trận
Dùng hàm fliplr để đảo ma trận từ trái sang phải và hàm flipud đảo ma
trận từ trên xuống dới.
Ví dụ : Cho ma trận M cỡ 4x4 rồi tiến hành đảo nh dới đây
>> M=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
M =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
>> Mtf=fliplr(M) % Dao tu trai sang phai
Mtf =
4 3 2 1
8 7 6 5
12 11 10 9
16 15 14 13
>> Mtd=flipud(M) % Dao tu tren xuong duoi
Mtd =
13 14 15 16
9 10 11 12
5 6 7 8
1 2 3 4
5 1 4 10
- Cộng một số với ma trận:
Matlab coi số đó nh một ma trận cùng cỡ với ma trận đợc cộng, mỗi
phần tử của ma trận bằng chính số đó. Ví dụ: cộng số là 7 với ma trận at
ở trên ta đợc ma trận cs.
s =7;
cs=s+at
cs =
9 12 7 12
12 5 15 8
7 15 5 11
12 8 11 17
- Nhân ma trận với một số
Ví 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];
8
x= A\B
x =
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 / nhng 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).
- 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ì:
>> An=inv(A)
An =
Tích vô hớng của m và n: dùng hàm dot
vh=dot(m,n)
vh = 6
Tích có hớng của m và n: dùng hàm cross
ch=cross(m,n)
ch = -6 12 -2
Còn tích có hớng của n và m:
ch2=cross(n,m)
ch2 = 6 -12 2
b- Các phép tính phần tử - phần tử của ma trận
Các phép tính này rất tiện ích và đợc phân biệt với các phép tính tiêu
chuẩn trên ma trận bằng dấu chấm ( . ) đợc đặt trớc các dấu phép tính.
Ví dụ: X.^Y, X.*Y, hay X.\Y. Nếu X và Y là các ma trận ( hay véc tơ)
các phần tử của X sẽ đợc nâng lên luỹ thừa hoặc đợc nhân , chia bởi
các phần tử tơng ứng của ma trận Y. Dẽ thấy là ma trận X và Y phải
cùng cỡ.
- Luỹ thừa các phần tử ma trận
Ví dụ:
>> x=[1 2 ; 3 4]
x =
1 2
3 4
>> y=[ 3 4; 1 2]
y =
3 8
2 8
- Chia phần tử ma trận
Ví dụ;
>> x./y
ans =
0.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).
Ví dụ:
b=[2 1 -4 3];
p=poly(b)
p =
1 -2 -13 38 -24
Theo kết quả trên thì các số 2, 1, -4 và 3 là nghiệm của đa thức :
x
Ví dụ : cần nhân hai đa thức x
3
+2x
2
+6 và 3x
4
-6x
2
+5x-10 ta làm nh sau:
b=[1 2 0 6];
c=[3 0 -6 5 -10];
a=conv(b,c)
a =
3 6 -6 11 0 -56 30 -60
Vậy đa thức tích là: 3x
7
+ 6x
6
- 6x
5
+ 11x
4
- 56x
2
+ 30x 60
- Hàm deconv : Dùng chia hai đa thức
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
Ví dụ:
a=[ 10 2 1 -30 23 8];
ln=max(a)
ln =
23
- Hàm min : tìm giá trị cực tiểu
Ví dụ:
bn=min(a)
bn =
-30
bn=mi
- 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.
Ví du :
>>b=[1 2 3; 4 5 6 ; 7 8 9]
b =
1 2 3
4 5 6
7 8 9
>>ln=max(b)
Ta dễ dàng thấy rằng hàm diff này có thể dùng để tính gần đúng đạo
hàm.
Nếu x là một ma trận bình thờng thì quá trình tính sẽ đợc thực hiện
theo thứ tự các cột.
- 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.
Ta viết các lệnh nh sau:
x1=0:5;
y1=x1.^3-3*x1+4;
x2=[0 .3 .5 1.2 1.4 2.1 3.3 4.2 4.8 5];
y2=interp1(x1,y1,x2,'cubic')
plot(x1,y1,'ro',x2,y2,'b+')
Kết quả cho ở dạng số và đồ thị dới đây
y2 =
Columns 1 through 7
4.0000 2.7700 2.2500 2.2240 2.5920 7.0330 30.1210
Columns 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
là tơng ứng các điểm đã cho.
0 1 2 3 4 5
Chạy chơng trình kết quả cho giá trị của tích phân:
tf =