You are on page 1of 66

Bài giảng Tin Ứng dụng 2 – Matlab 7

ĐẠI HỌC THỦY LỢI


BỘMÔN QUẢN LÝ TỔNG HỢP BIỂN VÀ ĐỚI BỜ
------  ------

MATLAB
TIN HỌC ỨNG DỤNG – HỌC PHẦN II
(Tài liệu tham khảo & Bài tập cho sinh viên Kỹthuật Biển – K45)

Nguyễn Bá Tuyên
Nguyễ
n Quang Chiế n

Hà Nội, tháng 08 năm 2007

-1-
Bài giảng Tin Ứng dụng 2 – Matlab 7

MỤC LỤC

1. CHƯƠNG I: MATLAB CĂN BẢN ....................................................................... 4


1.1. Matlab – ngôn ngữcủa tính toán kỹthuậ t.........................................................4
1.2. Khảnăng và những ứng dụng của Matlab ........................................................ 4
1.3. Đặc điể m của Matlab .......................................................................................6
1.4. Cài đặt và khởi động Matlab 7.0....................................................................... 7
1.5. Quả n lý không gian làm việ c của Matlab..........................................................8
1.6. Ghi & phục hồidữliệu...................................................................................11
1.7. Sửdụng Help.................................................................................................12
1.8. History & Editing...........................................................................................13

2. CHƯƠNG II: TÍNH TOÁN TRONG MATLAB .................................................. 15


2.1. Matlab - một máy tính cá nhân ....................................................................... 15
2.2. Biến trong Matlab..........................................................................................16
2.3. Các kiểu dữliệ u - Đị nh dạng kế t quả .............................................................. 17
2.4. Các kiểu dữliệ u số& sốphức........................................................................ 18
2.5. Các ký tự,Chuỗivà Văn bản.......................................................................... 19
2.6. Các hằ ng sốdựng sẵn.....................................................................................20
2.7. Các hàm dựng sẵ n..........................................................................................20
2.8. Các phép toán quan hệ...................................................................................23
2.9. Các phép toán logic........................................................................................ 24
2.10. Kế t hợp nhiều lệnh trên một dòng; Ẩn kế t quảtính.....................................26

3. CHƯƠNG III: VECTƠ........................................................................................ 27


3.1. Giới thiệu....................................................................................................... 27
3.2. Véctơhàng..................................................................................................... 28
3.3. Vectơcột....................................................................................................... 29
3.4. Toán tửhai chấ m ( : ).....................................................................................29
3.5. Làm việ c với vectơ& ma trậ n (mảng)............................................................30
3.6. Xửlý dữliệ u với các hàm dựng sẵ n cho vectơ& ma trậ n............................... 32

4. CHƯƠNG IV: MA TRẬN ĐẠI SỐ& TUYẾN TÍNH.......................................... 34


4.1. Định nghĩa và khởi tạo ma trậ n ...................................................................... 34
4.2. Một sốma trận đặ c biệt.................................................................................. 34
4.3. Các phép toán với từng phần tửtrong ma trận................................................ 35
4.4. Các phép toán với ma trậ n.............................................................................. 35
4.5. Giảiphương trình đạ i số................................................................................. 35
4.6. Giảihệphương trình đạ i sốtuyế n tính............................................................35
4.7. Tìm nghiệm của đa thức................................................................................. 35
4.8. Giảiphương trình phi tuyến ........................................................................... 35
4.9. Giảiphương trình vi phân .............................................................................. 35
4.10. Các lệnh hữu ích khác ................................................................................ 35

-2-
Bài giảng Tin Ứng dụng 2 – Matlab 7

5. CHƯƠNG V: SCRIPTS VÀ FUNCTIONS (M-FILES)........................................ 37


5.1. Giới thiệ
u M-file............................................................................................ 37
5.2. Biên soạn và thực thi M-file........................................................................... 37
5.3. Chú thích (comments)....................................................................................38
5.4. Các hàm m-file (function m-files) ..................................................................39
5.5. Câu lệnh rẽnhánh (if và switch)..................................................................... 41
5.6. Vòng lặp (for và while).................................................................................. 42
5.7. Đọc dữliệu từfile và ghi ra file...................................................................... 43

6. CHƯƠNG VI: ĐỒTHỊDẠNG ĐƯỜNG .............................................................44


6.1. Biểu diễn đường quá trình.............................................................................. 44
6.2. Lựa chọn màu vẽ , nét vẽ................................................................................ 46
6.3. Tạo các chú thích, chú giảitrên hình vẽ ..........................................................48
6.4. Xóa đường biể u đồ,lưu biể u đồ..................................................................... 50
6.5. ĐồthịLogarit ................................................................................................ 50
6.6. Dãy biể u đồ....................................................................................................52

7. CHƯƠNG VII: ĐỒTHỊKHÔNG GIAN .............................................................55


7.1. Các dạ ng cơbả n.............................................................................................55
7.2. Chỉđị nh các vịtrí trong không gian 2 chiề u ...................................................58
7.3. Mặ t cắt đị
a hình ............................................................................................. 58
7.4. Trường véctơ.................................................................................................59

8. PHẦN BÀI TẬP ..................................................................................................61


Bài tập số1:.............................................................................................................. 61
Bài tập số2............................................................................................................... 62
Bài tập số3............................................................................................................... 62
Bài tập số4:.............................................................................................................. 63
LỜI GIẢI ...................................................................................................................... 63
Bài tập số1:.............................................................................................................. 63
Bài tập số2:.............................................................................................................. 64
Bài tập số3:.............................................................................................................. 64
Bài tập số4:.............................................................................................................. 64

9. TÀI LIỆU THAM KHẢO: ...................................................................................66

-3-
Bài giảng Tin Ứng dụng 2 – Matlab 7

1. CHƯƠNG I: MATLAB CĂN BẢN

1.1. Matlab – ngôn ngữcủa tính toán kỹthuật


- MATLAB là một ngôn ngữbậ c cao và môi trường tươ n tiế
ng tác cho phép bạ n
hành các nhiệm vụtính toán có cường độlớn nhanh hơn với các ngôn ngữlậ p
trình nhưC, C++ và Fortran.
- MATLAB viế t tắ t cho "Matrix Laboratory" - Phòng thí nghiệ
m ma trận. Ban đầ
u
Matlab được thiế t kếbởi Cleve Moler vào những nă m 1970 đ ểsửdụ ng nhưmột
công cụdạ y họ c. Từđó đ ế
n nay nó đã đ ược phát triể
n thành một bộphầ n mềm
thương mại rấ
t thành công.
- Hiệ n nay MATLAB R14 là một bộphầ n mềm cho công việ c tính toán trong các
ngành kỹthuậ t, trong khoa học và trong lĩ
nh vực toán họ c ứng dụ ng. Matlab cho
ta mộ t ngôn ngữlậ p trình mạnh, giao diện đồhọ a xuấ t sắc, và một phạ m vi rất
rộng các kiế n thức chuyên môn. Matlab là mộ t thương hiệ u đã đượ c thương mạ i
hóa của tậ p đoàn MathWorks, Massachusetts, USA (hiệ n là nhà cung cấ p hàng
đầ u thếgiới cho các phầ n mềm tính toán kỹthuật và thiế
t kếdựa trên mô hình).

1.2. Khảnăng và những ứng dụng của Matlab


- Một trong nhữ ng tính nă ng tuyệ
t vời nhấ t của Matlab nhìn từgóc đ
ộnhững nhà
khoa họ c tính toán là thưviệ n dựng sẵ n to lớn rấ
t phong phú các chu trình tính
toán và các công cụhiể n thịđ ồhọa.
- Matlab cho phép người dùng tiế n hành rấ t nhiều các nhiệm vụthông thường liên
quan tới việc giải quyết các vấnđ ềmột cách sốhọ c. Nó cho phép chúng ta dành
nhiều thời gian hơn cho việc suy nghĩ , khuyế n khích chúng ta thí nghiệ
m.
- Matlab ứng dụng những thuật toán hế
t sức được trân trọng vì vậ
y chúng ta có thể
tin tưởng vào kế
t quảthu được.
t mạ
- Các tính toán rấ nh có thểđ
ược thực hiệ
n chỉvới mộ
t hoặ
c hai câu lệ
nh.
- Bạn có thểxây dựng riêng cho mình những hàm toán học cho những ứng dụ
ng
đặc biệt.
p giao diệ
- Matlab cung cấ nđồhọ a tuyệ
t hả
o, các hình từMatlab có thểđem chèn
vào LATEX và các tài liệu Word.
u hướng dẫ
- Tài liệ n này chỉđem đế n một cái nhìn thoáng qua vềsức mạ nh và sự
linh hoạt củ
a hệthống Matlab. Đểcó được những hiể u biế
t sâu sắc và chi tiế
t hơn,
xin tham khảo các giáo trình Matlab chuyên dụng khác hiệ n có trên thịtrường.

-4-
Bài giảng Tin Ứng dụng 2 – Matlab 7

VD: Hãy cùng tham khả o các demo của Matlab đểxem ta có thểlàm được những
gì chỉvới một vài dòng lệnh đơn giả
n:
>> colormap(hsv(64))
>> z = cplxgrid(30); % miền không gian số phức đơn vị z
>> cplxmap(z,z^3) % vẽ đồ thị hàm x = z^3 – hinh1
>> cplxroot(3) % vẽ đồ thị hàm y = z^(1/3) – hinh2

Hình 1: Đồthịhàm x = z3 trong không gian sốphức

Hình 2: Đồthịhàm y 3 z trong không gian sốphức

-5-
Bài giảng Tin Ứng dụng 2 – Matlab 7

1.3. Đặc điểm của Matlab


Lập trình theo nghĩ a thông thường, là nhậ
p vào máy những câu lệnh rõ ràng, theo
một thứtựnhấ tđ ịnh sao cho khi máy thực hiệ n theo đ
úng thứtựđó thì sẽcho ta
kết quảmong muố n. Mộ t khái niệ
m nôm na tương tựnhưvậ y thường thấ y trong
các khóa họ c lậ
p trình các ngôn ngữC, Pascal...
Khi khởi đ ầu với MatLab ta hãy hiể u theo nghĩ
a rộng hơn: lậ
p trình còn có các
bước biể u diễn bài toán dưới dạng các hàm và máy tính qua việc thực hiện các
hàm này cho ta kế t quả . Phương pháp này có mức độtrừu tượng cao hơn so với
các câu lệnh chỉdẫ n đơn thuần.

Đểminh họa đ iề
u này, ta xét mộ t ví dụrấ
tđơn giả
n: so sánh phép cộng hai véctơ
trong ngôn ngữlập trình Pascal và MatLab.
u diễ
- Pascal biể n một véctơdưới dạ
ng mả
ng (array), chẳ
ng hạ
n có 3 vec-tơA, B,
C và A + B = C:
var
A: array[1..5] of integer = (3, 7, 4, 2, 0);
B: array[1..5] of integer = (-2, 4, 8, 5, 1);
C: array[1..5] of integer;
i: integer;
begin
for i := 1 to 5 do
begin
C[i] := A[i] + B[i]
end
end.

- Cách làm trong MatLab đ


ơn giả
n hơn nhiề
u:
A = [3 7 4 2 0];
B = [-2 4 8 5 1];
C = A + B;

- Có đ ược sựđ ơn giản nói trên là nhờMatLab đ ã xây dựng sẵn khái niệm ma trận.
Dấ u cộng trong dòng lệ nh MatLab biể u thịphép cộng ma trậ
n. Pascal không được
nhưvậ y; mả ng chỉlà sựbiể u diễn có thứtựcủa các biến. Không có phép cộ ng ma
trận, chỉcó phép cộng hai số– vì vậ y chương trình Pascal dài hơn rất nhiề
u.
- Mộ t đặ
cđ iểm nữa là tấ
t cảcác biến trong chương trình Pascal trên đều phải được
khai báo. Trong MatLab các biến sẽtựđ ộng hình thành trong mỗi câu lệnh gán.

Trong nhữ ng nă m gầnđ ây, bên cạnh các ngôn ngữlậ p trình truyền thố ng (C / C++
/ Fortran), các ngôn ngữvăn lệ nh (scripting languages) đ ược sửdụ ng phổbiế n
hơn trong lĩ nh vực nghiên cứu tính toán. MatLab là một trong các ngôn ngữnhư
vậy. Là một ngôn ngữbậ c cao, mỗ i dòng lệnh MatLab thường có tác dụng tương
đương với khoả ng 10 dòng lệ nh của C / C++. Người lậ p trình sẽtốn ít thời gian gõ
câu lệnh và tập trung hơn vào nội dung chương trình.

-6-
Bài giảng Tin Ứng dụng 2 – Matlab 7

Tuy vậ y các ngôn ngữlậ p trình biên dị ch nhưC / Fortran cho phép chương trình
tính toán rấ t nhanh và tốc độcũng là một yêu cầ u rất quan trọng trong các chương
trình tính lớn. Do đ ó mộ t cách kế t hợp thông minh là phầ n lõi tính toán có thể
đ ược viế t bằ ng ngôn ngữbiên dị ch, và các thao tác nhập xuấ t, xửlí, hiể
n thịsố
liệu được viế t bởi ngôn ngữvă n lệnh nhưMatLab.

1.4. Cài đặt và khởi động Matlab 7.0


1.4.1. Cài đặt Matlab 7.0
u vềcấ
- Yêu cầ u hình máy tính:
+ Bộvi xửlý Pentium hoặ
c Pentium Pro
c NT (WinXP home, XPprofessional đề
+ Windows 95 hoặ u được)
+ Bộđ
iều phối đ
ồhọa 8 bit và card màn hình tối thiể
u 256 màu
+ Dung lượng ổcứng 25Mb cho tới hơn 1Gb (tùy thuộc vào cách cấ u hình
đĩa cứng, phân vùng đĩ a, sốhợp phầ
n củ
a Matlab được cài đặt), và tới 2,1Gb nế u
cài đặt Matlab cùng với Simulink.
+ Bộnhớđ
ộng (RAM) tố
i thiể
u 16Mb (nên có bộnhớtố
i thiể
u 128Mb)
+ Các khuyế n nghịkhác: Bộnhớbổsung, card đồhọa bổsung, card âm
thanh, máy in, MS-Word 7.0 hoặ c hơn, trình biên dị
ch C, Borlean, Mỉ cosoft (xây
dựng file MEX), trình duyệ
t internet (đểchạ y Matlab Helpdesk online).

- Quá trình cài đặ


t Matlab 7.0 cho WindowsXP (bộgồ
m 2 đĩ
a CD):
+ Đưa đ ĩa CD vào ổđọ c. Nếu chương trình SETUP không tựđ
ộng chạ
y thì
n đúp vào biể
nhấ u tượng setup.exe đểbắt đầ
u quá trình cài đặ
t.
p nhậ
+ Accept (chấ n) những thỏa thuậ
n vềbả
n quyề
n. sau đ
ó click Next.
+ Nế u bạn cài theo kiể u mặ c định (hay còn gọ
i là Typical setup - kiể
u phổ
biến), Matlab trên máy tính củ a bạ n sẽcó các hợp phầ n cơbả n nhấtđ ểlàm việc
theo các hướ ng dẫn trong tài liệu này. Theo các hướng dẫ n trên màn hình. Cho đĩ
a
CD thứ2 vào khi đ ược yêu cầ u.
+ Nế u bạn cài đặt theo kiểu tùy chọn cá nhân (Manual setup) thì nhấ
n vào
các hộp thành phầ n dấ u 'v' nếu bạn muố n có tùy chọ n đó. Nhấ n tiếp nếu bạn
không có ý định (có thểthêm vào sau này nế u muố n).
n thị'C:\MATLAB7' là thưmụ
+ Trên màn hình hiể c mặ cđị
nh của quá trình
cài đặ t. Nế u bạ
n muốn cài đặt vào đị
a chỉkhác, hoặc đổ
i tên thưmục, thì bạn lựa
chọ n 'Browse'.

-7-
Bài giảng Tin Ứng dụng 2 – Matlab 7

t hướng dẫ
+ Chi tiế n cài đặ
t xin xem file ‘
install_guide.pdf’trong đ
ĩa CD1
n tiế
(bả ng Anh).
1.4.2. Khởi động Matlab (Hệđiều hành Windows)
- TừHĐH Windows, khởi động Matlab đ
ơn giản bằ
ng cách nháy
đ u tượng MATLAB trên màn hình, hoặ
úp vào biể c bằng cách
chọ n MATLAB từMenu Start.
- Quá trình khởi đ
ộng đưa người dùng đế
n Cửa sổlệ
nh, nơi các
dòng lệnh được biểu thị
bằng '>>'.
>>_
Đây là dấu hiệ
u cho thấ
y Matlab đang chờbạ nđánh một (câu) lệ
nh. Khi hoạt độ
ng
trong chếđộmáy tính cầ m tay, tất cảcác lệ
nh của Matlab được nhậ p vào dòng
lệnh từbàn phím.
- Matlab có thểđượ
c sửdụng theo nhiề
u chếđ
ộvà nhiề
u cách khác nhau;
+ Nhưmột máy tính cầ
m tay cao cấ
p trong chếđộmáy tính cầ
m tay
+ Nhưmột ngôn ngữlậ
p trình bậ
c cao
+ Nhưmột chu trình con gọ
i từchương trình C
u này chúng ta sẽđi nghiên cứu chi tiế
Trong tài liệ t 2 chếđộđầ
u tiên.

1.5. Quản lý không gian làm việc của Matlab


- Vềcơbả
n, không gian làm việ
c của Matlab gồ
m có các phầ
n sau:
+ Cửa sổtrợgiúp (Help window)
+ Nút Start
+ Cửa sổnhậ
p lệ
nh (Command window)
+ Cửa sổkhông gian làm việ
c (Workspace window)
+ Cửa sổquá trình lệ
nh (Command History window - lị
ch sử)
+ Cửa sổbiên tậ
p mả
ng, vectơ, ma trậ
n (Array editor window)
+ Cửa sổđ
ịa chỉthưmục hiệ
n thời (Current directory window)
- Nút ‘x’ ởgóc trên bên phải mỗi cửa sổdùng đ ểđóng chúng. Hiể
n thịlạ
i cửa sổ
bằ ’vào tên cửa sổtương ứng trong menu Desktop.
ng cách tích ‘
nh nút ‘
- Nút mũi tên cong bên cạ x’dùng đểtách các cửa sổlàm việc trong cửa sổ
chính MATLAB thành cửa sổcon đ ộc lậ
p. Ấn nút này mộ t lầ
n nữa sẽnhậ p một
cửa sổđộ c lập vềcửa sổchính của MATLAB.
- Cửa sổHelp, History sẽđược giới thiệ
u cụthểtrong mục 1.7 và mụ
c 1.8. Sau
đây các cửa sổlàm việ
c còn lạ
i sẽđ
ược giới thiệ
u vắ
n tắ
t.

-8-
Bài giảng Tin Ứng dụng 2 – Matlab 7

n củ
Hình 1.1: Giao diệ a Matlab 7.0
* Nút Start: ởgóc dưới bên trái củ a màn hình Matlab, cho phép ta chạ y các ứng
dụ ng mẫ u (demos), các công cụvà cửa sổchưa hiể n thịkhi khởi độ ng Matlab.
Bằ ng cách đánh lệ nh 'demo' bạ n có thểtiế p cận với mộ t tậ
p hợp sâu rộng những
n giá trịrấ
file trình diễ t cao, vì đó là biể
u hiện cho những khảnă ng của Matlab.
: Thửchạ
Ví dụ y Start -> Matlab -> Demos và chạ
y mộ
t ứng dụ
ng mẫ
u trong cửa
sổDemo(s).
nh này sẽxóa tấ
Ghi chú: Lệ t cảgiá trịcủ
a các biế
n hiệ
n có.

* Cửa sổlệ
nh: đã đ
ược đềcậ
p ởmụ
c 1.4.2. (Khởi độ
ng Matlab).
- Các diễn giải và câu (mệ nh đề) của Matlab được đánh giá khi bạ n gõ vào 'Cửa sổ
lệnh', và các kế t quảtính toán cũ ng được thểhiệ n tạ i đây. Không giố ng như
Fortran và các ngôn ngữtính toán cầ n biên dịch khác, Matlab là mộ t môi trường
tương tác – bạ nđ ưa ra một câu lệnh, và Matlab cốgắ ng thực thi nó ngay lậ p tức
trước khi đòi hỏ i 1 lệ
nh tiế
p theo.
n giả
- Các diễ i và câu cũng đư
ợc sửdụ ng trong các M-file (sẽđượ
c trình bày chi
t ởchương V). Chúng thường có cấ
tiế u trúc:
n = diễ
>> biế i
n giả
c đơn giả
hoặ n là n giả
>> diễ i 
n giả
- Các diễ i thường được soạn bằ ng các toán tử, các hàm, và tên các biến, và
được hiển thịtrên màn hình sau khi ấn Enter. Các câu lệ nh có dạng ‘tên biến=

-9-
Bài giảng Tin Ứng dụng 2 – Matlab 7

diễn giải’thì diễn giải đ


ó sẽđ ược gán cho biếnđ ểsửdụng sau này. Khi ‘tên biến’
và dấ u‘=’ được bỏđi thì kế t quảcủa diễn giải sẽđược tựđ ộng gán cho biến có
tên ‘ans’ (hay answer – câu trảlời) và hiể
n thịtrên màn hình.

- Một câu (lệ


nh) thông thường sẽkết thúc ởcuối dòng. Tuy nhiên có thểtiế
p tục
một câu bằng ba dấu chấm‘ …’ ởcuối dòng.
- Có thểđ
ặt mộ t vài câu lệ
nh trên cùng mộ
t hàng, ngă
n cách bởi dấ
u phẩ
y‘ c
,’ hoặ
chấm phẩy‘ ;’
- Nếu mộ t câu lệnh kế t thúc bằng dấ u chấm phẩ y ởcuố i câu thì kế
t quảcủa lệ nh
đó sẽkhông được hiể n thị, tuy nhiên yêu cầu tính vẫn được thực hiệ n (phép tính
hay phép gán vẫ n được thực hiệ n, kết quảcó trong workspace). Điề u này là thiết
yếu trong việ cẩnđ i các kế t quảtrung gian không mong muốn (VD nhưkhi thực
hiện mộtloạ t phép tính, hay tính toán với các ma trận lớn).
n có thểxóa trắ
- Bạ ng toàn bộcửa sổlệ
nh bằ
ng lệ
nh
>> clc  % (clear command window)
c vào menu Edit -> Clear Command Window. Khi thực hiệ
hoặ n lệ
nh này, toàn
bộgiá trịcủa các biế
n hiệ
n có không thay đ
ổi hay mấ
t đi.

* Cửa sổ không gian làm việ


c
(workspace):
Các biế n và dữliệ u mà bạ n nhập vào
hoặ c tính toán ra sẽđ ược Matlab lưu
trong mộ t phần gọi là 'không gian làm
việc'. Tất cảcác biế n, ngoạ i trừnhững
biến cục bộthuộ c vềmộ t M-file, sẽ
đ ược thểhiệ n trong không gian làm
việc
nh 'who' hoặ
- Lệ c 'whos' liệ
t kê các biế
n hiệ
n có trong không gian làm việ
c.
VD: đánh lệnh 'whos' vào cửa sổlệnh, bạ
n sẽthấ
y mộ
t danh sách các biế
n hiệ
n có
u loạ
cùng kiể i và kích cỡcủa chúng.
- Đểbiết giá trịhiệ
n tạ
i của mộ
t biế
n, bạ
nđánh vào tên biế
n tạ
i dấ
u nhắ
c của cửa
sổlệnh và Enter.
- Đểxóa mộ
t hàm hoặ
c biế
n khỏ
i không gian làm việ
c, ta sửdụng lệ
nh 'clear':
n
>> clear tên_biế 
n thân lệ
Bả nh 'clear' sẽxóa tấ
t cảcác biế
n hiệ
n có (tương đương với 'clear all')

- 10 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

* Cửa sổbiên tậ p mả ng (ma trậ


n nói chung): Khi ta đã có một mả ng, ta có thể
chỉnh sửa, biên tập lại nó bằ
ng Array Editor. Công cụnày làm việc nhưmộ t bảng
tính (spreadsheet) cho ma trận.
Ví dụ: Có ma trậ n M, hãy thửclick và thay đổi nó, thay đổi các phầ
n tử, hay kích
thước ma trậ n. Quay trởlạ i Cửa sổlệ nh và gõ 'M' rồi Enter, xem ma trậ n M của
chúng ta sau khi thay đổi.
n cũng có thểbiên tậ
+ Bạ p lạ
i ma trậ
n M bằ
ng cách đ
ánh lệ
nh
>> openvar ('C') 

* Cửa sổđị a chỉthưmục hiệ n thời: Thưmục hiệ n thời là nơi chương trình
Matlab sẽtìm các M-file, và các file không gian làm việc (.mat files) mà bạ
n đã
Load và Save.

1.6. Ghi & phục hồi dữliệu


1.6.1. Lưu và phục hồi dữliệu
- Đểnhớcác biế n, Matlab có thểghi và gọi lạ
i dữliệu từfile trong máy tính của
bạ n. Mục Save Workplace as... trong bảng chọn File sẽmởhộ p hội thoạ
i đểghi
tất cảcác biế
n hiện tạ
i.
- Tương tự, mục Load Workplace trong bảng chọ n File sẽmởhộ p hội thoạ
i đểgọi
lại tấ
t cảcác biế
n mà ta đ i từkhông gian làm việ
ã ghi lạ c trước.
Ghi chú: việ c Load không làm mấ t các biế n hiện có trong không gian lamg việ c
hiện tạ i. Khi ta gọ
i lạ
i các biế
n mà chúng trùng tên với các biế n trong không gian
làm việ c của Matlab, nó sẽthay đổi giá trịcủa các biế n theo giá trịcủa các biế
n
gọi ra từfile.
- Ngoài các bảng chọ n, Matlab còn cung cấ
p hai lệ
nh Save và Load, nó thực hiện
một cách mề m dẻ o hơn. Lệnh save cho phép bạ
n ghi một hoặc nhiề
u hơn mộ t biế
n
tùy theo sựlựa chọn. Ví dụ:
>> save  t cảcác biế
- lưu tấ n trong Matlab theo kiể
u
nhịphân trong file matlab.mat
>> save dulieu  t cảcác biế
- lưu tấ n trong Matlab theo kiể
u
nhịphân trong file dulieu.mat
>> save dulieu A B C D -ascii 
n A, B, C, D theo dạ
- lưu các biế ng mã ASCII trong file dulieu.mat
1.6.2. Lưu một bộdữliệu (record)

- 11 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

1.6.3. Lưu một phiên (session)


Khi làm bài tập, việ c lưu tấ t cảcác thông sốđầ u vào và đ ầ u ra củ
a phiên làm việ c
với Matlab hiệ n tại củ a bạ n cho việ c in ấ
n sau này là rất hữu ích. Lệnh 'diary' sử
dụng cho mục đích này, sẽlưu tấ t cảnhững thông sốđầ u vào và đầu ra ởgiữa hai
nh 'diary' và 'diary off'. Từdấ
lệ u nhắc ởdòng lệnh, bạ n đánh:
>> diary('diary_file_name') 
>> nh củ
........ (các câu lệ a bạ
n ởđây) 
>> diary off 

1.7. Sửdụng Help


- Trợgiúp và thông tin vềcác lệ
nh của Matlab có thểđ
ược tìm thấ
y theo nhiề
u
cách:
+ Từdòng lệ
nh bằ
ng cách đ
ánh lệ
nh 'help chủđ
ề' (xem dưới đ
ây)
+ Từcửa sổHelp riêng biệ
t xuấ
t phát ởMenu Help
a Matlab lưu trữtrên đ
+ Từhelpdesk củ ĩa hoặ
c CD-rom, hoặ
c
+ Từmạ
ng Internet
- Từdòng lệ
nh, đ
ơn giả
n nhấ
t hãy đ nh 'help' và Enter!
ánh lệ
Kế t quả : Matlab cho ta một bả
n tóm tắ
t vềhệthống trợgiúp.Mộ
t vài dòng đ
ầu tiên
của kế t quảsẽnhưsau:
HELP topics: (Các chủđ
ềtrợgiúp)
matlab/general nh với mục đ
- Các lệ ích tổng quát.
matlab/ops - (operators) Các toán tửvà các ký tựđ
ặc biệ
t...
matlab/lang - (language) Ngôn ngữlậ
p trình...
matlab/elmat n că
- (elementary) Ma trậ n bả
n...
matlab/elfun - (elementary functions) Các hàm toán că n.
n bả
matlab/specfun - (specialized functions) Các hàm toán đặ
c biệ
t.
- Thông thường bạ n sẽthấ y cửa sổtext không đủlớn đ ểchứa tấ t cảthông tin từ
một lệnh Matlab. Do đó bạ n có thểsửdụ ng chức năng 'more on' đểxem thông tin
theo từng trang màn hình, sau đ t từng trang mộ
ó duyệ t bằng cách nhấ n phím bất
kỳ.
Đánh 'more off' vào cửa sổlệ
nh sẽđưa Matlab trởvềcách cưxửthông thường,
không duyệt từng trang.
- Thông thường bạn có thểkhông nhớchính xác tên củ a một lệ
nh Matlab, trong
trường hợp đó bạ
n có thểsửdụng lệnh 'lookfor' (tìm kiế
m) nhưmộtsựtrợgiúp.

- 12 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

u bạ
Ví dụ, nế nđ ánh vào dòng lệ nh 'lookfor logarithm', Matlab sẽliệ
t kê tấ
t cảcác
hàm từng biế
t của Matlab có liên quan tới Logarit.

n cửa sổHelp củ
Hình 1. : Giao diệ a Matlab 7.0
1.8. History & Editing
- Trong giao diệ n mặ c định của Matlab, cử a sổ'Command History' (lị ch sửcác
lệnh) nằ m ởgóc phầ n tưbên dưới, phía trái. Trong cửa sổnày, các lệ nh đã sử
dụ ng trong các lần khởi độ ng Matlab gần đây đề uđ ược lưu lạ i. Mỗi lần khởi động
Matlab, toàn bộcác lệ nh sửdụng trong lầ nđ ó sẽđược lưu lạ i dưới dạ ng một nhóm
có thểđ óng mởbằ ng nút biể u tượng '+' (expand)hoặ c '-' (collapse) ởđầ u dòng
(dòng ghi mố c thờigian giữa hai dấu chú thích '%'):
VD: (+) %-- 8/14/07 3:21 PM --%
(-) %-- 8/14/07 3:21 PM --%
- Đểgọi lại lệ
nh từcửa sổ'Command History', bạ
n tìm đ
ến lệ
nh đ
ó bằ
ng các thanh
cuốn, rồ
i nháy đúp vào tên lệ
nh.
- Đểgọi lại các lệ
nh bạ
nđã sửdụng từdấ
u nhắ
c củ
a cửa sổlệ
nh, Matlab dùng các
phím mũi tên () trên bàn phím.
- Ví dụ , đểgọ i lạ
i lệ
nh bạ n gõ vào lúc gần nhất, bạn nhấn phím mũ i tên lên ().
Tiếp tục nhấ n phím này, nó sẽgọ i tiế
p lệ
nh trước đó. Phím mũ i tên xuống gọi lạ i
lệnh theo thứtựngược lạ i.

- 13 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

- Các phím mũi tên  và  có thểdùng đ ểthay đổ i vịtrí con trỏtrong dòng lệnh
tại dấ
u nhắ c củ
a Matlab, nhưvậ
y chúng ta có thểsửa dòng lệ nh. Thêm nữa, có thể
dùng chuột cùng với bộnhớđệ mđ ểcắt, copy, dán và sửa vă n bả n tạ
i dấ
u nhắc của
dòng lệnh.

- 14 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

2. CHƯƠNG II: TÍNH TOÁN TRONG MATLAB

2.1. Matlab - một máy tính cá nhân


* Giới thiệ
u các toán tửsốhọc:
- Các toán tửsốhọc của Matlab hoạ t độ
ng theo một cú pháp rấ
t giố
ng với cú pháp
của các ngôn ngữkhác mà bạ n có thểđã quen thuộc nhưTurbo Pascal, C, C++,
Fortran, Java...
- Các toán tửcơbả n gồm có + - * / ^ = và chúng được dùng kế t hợp với
ngoặcđ ơn: ( ). Toán tử'=' là toán tửgán. Toán tử ^ đ
ược dùng đểcho lũ y thừa:
2^4=16. Với những toán tửnày ta có thểdùng Matlab nhưmộ t máy tính cá nhân
đơn giản.
n có thểđánh các lệ
* Ví dụ: Bạ nh dưới đây vào sau dấ
u nhắ
c lệ
nh: >>_.
>> A = 2 + 3/4*5
A =
5.7500
>> B = 2^5 - 3*A
B =
14.7500
>> A + B
ans =
20.5000

Khi không có toán tửgán, Matlab trảkế


t quảcủ
a phép tính gầ
n nhấ
t vào biế
n 'ans
= ...' (answer). Xem thêm mục 2.2.
* Thứtựưu tiên tính toán:
Trong ví dụtrên, Matlab đã tính nhưthếnào, 2 + 3/(4*5) hay 2 + (3/4)*5?
c theo thứtựưu tiên sau:
Matlab làm việ
1. các đạ
i lượng trong ngoặ
cđơn,
2. lũy thừa 2 + 3^2  2 + 9 = 11,
c từtrái qua phả
3. * /, làm việ i (3*4/5 = 12/5),
c từtrái qua phả
4. + -, làm việ i (3+4-5=7-5),
y phép tính ởtrên sẽtheo thứtựư
Vì vậ u tiên 3.
* Bộcác toán tửcủa Matlab: (Xem thêm Help/Arithmetic operators)
Toán tử Mô tả
+ Cộng
- Trừ

- 15 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

.* ng cùng kích thước (nhân phầ


Nhân mả n tửvới phầ
n tử)
./ Chia mảng cùng kích thước (chia phần tửvới phầ
n tử)
.\ Chia mảng trái
: Toán tửHai chấ
m
.^ Lũy thừa mảng, lũy thừa từng phầ
n tửvới phầ
n tử
.' Chuyển vịmảng
' Chuyển vịma trận - ma trậ
n liên hợp (MTLH phức)
* n). Đạ
Nhân (ma trậ i sốtuyế
n tính.
/ Chia (ma trận), B/A B*inv(A), chính xác hơn B/A=(A'\B')
\ Chia (ma trận) trái. A\B ~ inv(A)*B
^ Lũy thừa ma trận

2.2. Biến trong Matlab


* Ví dụ:
>> 2^3-3
ans =
5
>> ans*6
ans =
30

- Kết quảcủa phép tính thứnhấ tđược Matlab gán cho biến 'ans', biến này được sử
dụ ng cho phép tính thứhai, qua đ
ó giá trịcủ
a nó đã đ
ược thay đổ i (được gán lạ
i).
- Chúng ta có thểsửdụng tên riêng do ta đ
ặtđ
ểlưu các giá trị
số
>> x = 2^3-3
x =
5
>> y = x*6
y =
30
từđó 'x' có giá trịbằ
ng 5 và 'y' bằ
ng 30. Chúng có thểđ
ược sửdụng cho những
p theo.
tính toán tiế
- Đây là các ví dụvềvềcâu lệ nh gán: các giá trịđược gán cho các biế n. Cần phả
i
gán một giá trịcho mỗi biế
n trước khi sửdụng biế n đó trong câu lệ
nh tiếp theo.

c đặ
* Quy tắ t tên biế
n:
n hợp lệcấ
- Tên biế u tạ
o bởi các chữvà số, bắ
tđầ
u bằ
ng chữ. Nên đặ
t tên biế
n
phản ánh giá trịmà nó đại diệ
n cho.
Các tên sau hợp lệ
:

- 16 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

Hsig, Let2try, Dhaluu, T1, V2, z25c5


Các tên sau không hợp lệ
:
chu-ky, 2P, %x, @wru
- Chiều dài tên biến: Mặ c dù tên biến có thểcó độdài tùy ý, nhưng Matlab sẽchỉ
sửdụ ng N ký tựđ ầu tiên của tên, vì vậy các biế
n khác nhau không được có N ký
tựđầ u tiên đều giống nhau.
N = namelengthmax 
N =
63

n có thểsựdụng hàm 'isvarname' đểkiể


- Bạ m tra tính hợp lệcủ
a tên biế
n. Hàm trả
vềgiá trị1 nế
u tên hợp lệvà 0 nế
u tên đó không hợp lệ .
isvarname 8th_column 
ans =
0 % Not valid - begins with a number

- Thông thường, tên biế


n không phụthuộc vào chữhoa - chữthường. Vì thế'xyz'
sẽgiống như'xYz'.

- Tránh đ ặt tên biế


n trùng với tên các hàm chuẩn, hoặc các từkhóa của Matlab. Vì
nhưvậ y thông thường bạ n sẽkhông thểsửdụ ng các hàm, từkhóa của Matlab nữa.
VD: Nếu bạn gán cho 1 biế n tên là 'sqrt' một giá trị
, thì bạ
n sẽkhông thểsửdụ
ng
hàm că
n bậc hai (sqrt) nữa!
- Matlab đã đ
ăng ký trước rấ
t nhiề
u từkhóa (xem bằ
ng lệ
nh 'iskeyword'):
'break' 'case' 'catch' 'continue' 'else' 'elseif' 'end' 'for' 'function'
'global' 'if' 'otherwise' 'persistent' 'return' 'switch' 'try' 'while'
ng
và các hàm, xem danh sách trong Help/Functions/Categorical List); và các hằ
số. Một sốhằng sốvà hàm thông dụng có thểxem ởmục 2.5 và 2.6.

2.3. Các kiểu dữliệu - Đị


nh dạng kết quả
* Tổng quát vềcác kiể
u dữliệ
u:
- Matlab sửdụ ng 15 kiểu (loạ i) dữliệ
u chính. Mỗi một kiể u dữliệ u này đ ềuở
dạ ng của một ma trận hoặc mả ng. Các mả ng hoặc ma trậ n này có kích cỡtối thiể
u
là 0-nhân-0 và có thểphát triể
n tới mảng n-chiều với kích cỡtùy ý.
- Ngoài ra còn có các kiểu dữliệ u do người dùng đị
nh nghĩ
a (thiế
t lậ
p), kiể
u
hướng đối tượng, và kiể
u dữliệ
u liên quan tớiJava.

- 17 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

u dữliệ
Hình 2.1. Các kiể u của Matlab
* Đị
nh dạ
ng kế
t quả
:
- Sửdụ ng lệnh 'format' cùng các đị nh dạng. Lệnh này chỉlàm thay đổ i cách mà kế
t
quảđư ợc hiển thịtrên màn hình, không làm thay đ ổi độchính xác của sốhoặ c
phép tính. Hầu hế t các phép tính sốhọ c củ a Matlab đượ c thực hiện với độchính
xác Double, nghĩ a là độchính xác 16 chữsốsau dấ u phẩ y thập phân.
- Đểthực hiệ
n lênh, từdấ
u nhắ
c củ
a cửa sổlệ
nh đánh mộ
t trong các lệ
nh sau:
format short u phẩ
: dấ y thậ
p phân cốđ
ịnh, 5 chữsố
format long u phẩ
: dấ y cốđị
nh, 15 chữsố
format short e u khoa họ
: ký hiệ c, 5 chữsố
format long e u khoa họ
: ký hiệ c, 15 chữsố
format short g u phẩ
: dấ y cốđị
nh hoặ
c di độ
ng, 5 chữsố
format long g u phẩ
: dấ y cốđị
nh hoặ
c di độ
ng, 15 chữsố
format hex ng Hexa (hệ16)
: format dạ
format '+' : dương (+), âm (-), và ký tựtrắ
ng (blank) ứng với 0
format bank : Dollars và cents
format rat : tỷlệxấp xỉinteger
- Thông thường, 'format short' là dạng mặc đị
nh. Khi đ
ược gọ
i lên, một dạ
ng
format sẽcó hiệ
u lực tới khi nó đ
ược thay đổ
i.

2.4. Các kiểu dữliệu số& sốphức


- Integer: ví dụnhư-5 hay 9888.

- 18 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

- Double precision reals: Trong Matlab, tấ t cảcác sốthực được lưu với đ ộchính
xác double, không giố ng các ngôn ngữlậ p trình khác nhưC hay Fortran khi chỉcó
một loại riêng biệ
t float hay real*8 cho các sốthực vớiđộchính xác single.
- Một dạ ng ngắ n cực kỳhiệ u quảcho việ c nhậ
p các sốrấ t lớn hoặ
c rất bé là dạ
ng
-7
ký hiệu 'e'. Chẳng hạn -1.23456e-7 là dạ ng ngắn của -1.23456 x 10 ; và 8.76e+12
12
ng viế
là dạ t ngắ
n của 8.76 x 10 . Ví dụ:
>> 1.23e-2 
ans =
0.0123
>> 5e6 
ans =
5000000

- Sốphức: đ
ược nhậ
p vào dưới dạ
ng 3+2*i hoặ
c 3+2*sqrt(-1).
- Chuỗ i: là mộ
t mả ng tậ p hợp củ
a các ký tự, được nhậ
p vào dưới dạ
ng 'abc' hoặ
c
'vi du day la mot chuoi'.

Trên đây là những kiể u dữliệu cơbản mà bạn sẽrất thường dùng trong khóa học
này. Đểbiế t danh sách đầyđ ủhơn, bạ
n có thểdùng lệ nh 'help datatypes' từcửa sổ
nhập lệnh.

2.5. Các ký tự, Chuỗi và Văn bản


- Khảnă ng xửlý vă n bả n trong tính toán rất hữu ích cho việc nhập/xuất kế t quả
từ/tới màn hình và file lưu trên đĩa. Đểcó thểquả n lý văn bản, một loạ
i dữliệ u là
'character' được đưa vào Matlab. Mộ t mảnh của vă n bảnđ ơn giản là mộ t chuỗi
(vectơ) hay một mảng các ký tự.
VD: >> t1='A' 

sẽgán giá trịA cho mộ


t mả
ng ký tựtên 't1', kích thước 1 x 1.
>> t2='BCDE' 

sẽgán giá trịBCDE cho mộ


t mả
ng ký tựtên 't2', kích thước 1 x 4.
- Các chuỗi có thểđ
ược cộ
ng với nhau bằ
ng cách sửdụ
ng các toán tửthao tác
trong mảng.
VD: >> t3=[t1, t2] 

sẽgán giá trịABCDE cho mộ


t mả
ng ký tựtên 't3', kích thước 1 x 5.
>> t4=[t3, ' la 5 ky tu dau tien ';...
'trong bang chu cai latinh.'] 

sẽgán giá trị 'ABCDE la 5 ky tu dau tien ' '


'trong bang chu cai latinh.'
cho một mả
ng ký tựtên 't4', kích thước 2 x 26.

- 19 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

- Cần chú ý rằng sốcác ký tựởhai dòng phả


i bằ
ng nhau, nế
u không việ
c thực thi
nh trên sẽdẫ
câu lệ n tới một lỗi:
??? Error using ==> vertcat
All rows in the bracketed expression must have the same
number of columns.

u ba chấ
- Dấ m '...' thểhiệ
n rằ
ng câu lệ
nh còn tiế
p tục ởdòng sau.
n đổ
* Chuyể i giữa chuỗi và số
- Đôi khi chúng ta cầ
n chuyể n mộ t chuỗi thành mộ t sốtương ứng, hoặ
c ngược lạ
i.
Các công việ c chuyển đổi này được thực hiệ n bởi lệnh:
n một chuỗi thành sốtương ứng
- 'str2num': chuyể
nh:
và hai lệ
n một sốthực thành chuỗ
- 'num2str': chuyể i tươ
ng ứng
- 'int2str': n một chuỗi thành sốtương ứng
chuyể
- Những lệnh này rấ
t hữu ích trong việ
c tạ
o ra các nhãn và tiêu đềmột cách tự
động, chẳ
ng hạn như

2.6. Các hằng sốdựng sẵn


Matlab đ
ịnh nghĩ
a sẵ
n nhiề
u hàm sốrấ
t hữu ích, bao gồm:
 pi, = 3.141592654...
 i và j, cảhai đ
ều bằng phầ
n ảo của sốphức, = sqrt(-1)
 inf, 'infinity' hay 'vô cùng'
 NaN, 'not-a-number' hay 'không phả
i là mộ
t số
'
 ans, luôn được gán cho kế
t quảcủ
a lệ
nh tính trước đ
ó
 ...
Bạ n nên tránh gán lạ i giá trịkhác cho các hằ
ng sốnêu trên nếu có thể. Chỉcó một
ngoạ i lệlà i và j, vì cảhai thường đ ược sửdụng nhưcác chỉsốcủ a vòng lặp. Việ
c
gán lạ i giá trịkhác cho các hằ ng sốnày là chấp nhậ
nđ ược vì sốphức luôn có thể
thu được bằ ng cách sửdụng sqrt(-1).

2.7. Các hàm dựng sẵn


- Cũng nhưnhững ngôn ngữbậ c cao khác, Matlab thực thi các 'function' (hàm)
nhiều hơn 'procedure' (chương trình con). Các hàm này bao gồm că n bậ c hai

- 20 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

(sqrt), lũy thừa (exp), logarit (log, log10, log2), giá trịtuyệ
t đố
i (abs), và các hàm
lượng giác (sin, cos, tan, atan,...). Ví dụ
:
>> sin(45) 
ans =
0.8509

trảkế
t quảbằng sin củ
a 45 radians... mà thực ra ý đị
nh của bạ
n là tính sin củ
a 450,
45
sẽbằ
ng 180 radians:
>> sin(45/180*pi) 
ans =
0.7071

2
m tra lạ
và kiể i xem bạ
n có thu đ
ược ã đị
nhưđ nh không
2
>> sqrt(2)/2 
ans =
0.7071

ng tấ
- Chú ý rằ t cảcác tính toán củ
a Matlab đều có lỗ
i làm tròn, mà đ n lạ
ôi khi bạ i
thấy mộtcách không mong đợi. Ví dụ , bạ
n không nên ngạ c nhiên khi thấy
>> tan(pi) 
ans =
-1.2246e-016

Nên nhớrằng lỗi làm tròn có mặ


t ởkhắ
p nơi, và chúng ta nên đơn giả
n tiế n
p nhậ
t quảnày nhưtan()=0.
kế
* Danh mục các hàm dựng sẵn phổbiế
n:
Các hàm lượng giác:
sin - hàm sin.
sind - sin của argument tính theo độ
.
sinh - sin hypecbolic.
asin ch đ
- arcsin, hay hàm nghị ảo củ
a hàm sin.
asind ch đả
- hàm nghị o của hàm sin, kế
t quảtheo đ
ộ.
asinh ch đả
- hàm nghị o của hàm sin hyperbolic.
cos - hàm cos.
cosd a argument tính theo độ
- cos củ .
cosh - cos hyperbolic.
acos ch đả
- hàm nghị o của hàm cos.
acosd ch đả
- hàm nghị o của hàm cos, kế
t quảtheo đ
ộ.
acosh ch đả
- hàm nghị o của hàm cos hyperbolic.

- 21 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

tan - hàm tang.


tand - tang của argument tính theo đ
ộ.
tanh - tang hyperbolic.
atan ch đả
- hàm nghị o của hàm tang.
atand ch đả
- hàm nghị o của hàm tang, kế
t quảtheo đ
ộ.
atan2 ch đả
- hàm nghị o của hàm tang 4 góc phầ
n tư.
atanh ch đả
- hàm nghị o của hàm tang hyperbolic.
cot - hàm côtang.
cotd a argument tính theo đ
- côtang củ ộ..
coth - côtang hyperbolic.
acot ch đả
- hàm nghị o của hàm côtang.
acotd ch đả
- hàm nghị o của hàm côtang, kế
t quảtheo độ
.
acoth ch đả
- hàm nghị o của hàm côtang hyperbolic.
Các hàm lũy thừa:
exp - hàm mũ
.
expm1 - tính chính xác exp(x)-1.
log - logarit cơsốtựnhiên.
log1p - tính chính xác log(1+x).
log10 - logarit cơsố10.
reallog - loga cơsốtựnhiên của sốthực.
realsqrt - că c hai củ
n bậ a một số>= 0.
sqrt - că c hai.
n bậ
nthroot m thực bậ
- nghiệ c n của các sốthự
c.
Các hàm liên quan đ
ến sốphức:
abs - giá trịtuyệ
t đố
i.
angle - góc pha.
complex - xây dựng dữliệ
u vềsốphức từcác phầ
n thực và ả
o.
conj - liên hợp của phức.
imag nả
- phầ o của phức.
real n thực củ
- phầ a phức.
isreal - hàm logic, trảvềgiá trị'true' với mả
ng sốthực.

- 22 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

cplxpair p xế
- sắ p các sốvềcác cặ
p liên hợp phức.
n dư:
Các hàm làm tròn và phầ
fix - làm tròn vềphía 0.
floor - làm tròn vềphía âm vô cùng.
ceil - làm tròn vềphía dư
ơng vô cùng.
round - làm tròn vềphía sốnguyên gầ
n nhấ
t.
mod - mô đ y phầ
un (lấ n dưcủa phép chia).
rem y phầ
- lấ n dưcủ
a phép chia (tương tựmod)
sign y dấ
- hàm lấ u củ
a một biế
n, trảvề+1, 0, -1 (+, 0, -).
Ví dụ:
mod([1 2 3 4 5 6 7],3) 
ans =
1 2 0 1 2 0 1

2.8. Các phép toán quan hệ


* Các toán tửquan hệ(so sánh):
Toán tử Cú pháp Mô tả
< A<B Nhỏhơn
<= A <= B Nhỏhơn hoặ
c bằng
> A>B Lớn hơn
>= A >= B Lớn hơn hoặc bằ
ng
== A == B Bằng
~= A ~=B Không bằng
* Mô tả:
- Các toán tửquan hệthực hiệ n sựso sánh từng phầ n tửvới phầ n tửgiữa hai
mả ng. Nó cho kế t quảlà một mả ng logic có cùng kích cỡ, với các phầ n tửcủa
mả ng là đúng (1) nế u quan hệđó là đúng, và phầ n tửcủ a mả ng là sai (0) nế
u
không đúng.
- Các toán tử<, >, <=, and >= chỉsửdụ ng phần thực của các toán hạng cho phép
so sánh. Các toán tử== và ~= kiểm tra cảphần thực và phầnả o. Ví dụ:
>> X = 5*ones(3,3) 
X =
5 5 5

- 23 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

5 5 5
5 5 5
>> Y= [1 2 3; 4 5 6; 7 8 9] 
Y =
1 2 3
4 5 6
7 8 9
>> X >= Y 
ans =
1 1 1
1 1 0
0 0 0

Kế t quảđược trảvềdưới dạ ng một ma trậ n có cùng kích thước với ma trậ n X và


Y. Trong đó mỗ i phần tửcó giá trị1 (đúng - true) hoặ
c 0 (sai - false) tùy thuộc vào
sựlogic của phép so sánh X>=Y.

2.9. Các phép toán logic


u diễ
- Matlab biể nđúng và sai bởi các sốnguyên tố1 và 0:
đ
úng = 1, sai = 0 (true = 1, false = 0)
- Ví dụtrong quá trình tính toán, biến x (x là một đạ
i lượng vô hướ ng) nhậ
n một
giá trịbấ
t kỳ
, chúng ta có thểtiế n hành các phép kiểm tra logic cho nó:
x == 2 ng 2 không?
xem x có bằ
x ~= 2 xem x có khác 2 không?
x>2 xem x có lớn hơn 2 không?
x<2 xem x có nhỏhơn 2 không?
x >= 2 xem x có lớn hơn hoặ
c bằ
ng 2 không?
x <= 2 xem x có nhỏhơn hoặ
c bằ
ng 2 không?
- Đặ c biệt chú ý tới cách viết trong Matlab là phép kiể
m tra bằ
ng nhau sửdụ
ng
hai dấ u bằng viết liề
n nhau = =.
Ví dụchúng ta có:
>> x = pi 
x =
3.1416
>> x ~= 3 
ans =
1
>> x ~= pi 

- 24 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

ans =
0

- Khi X là một véc tơhay ma trậ


n, các phép kiể
m tra này sẽđ
ược tiế
n hành cho
từng phần tửcủa X.
Ví dụởmục trước (2.8), phép kiể
m tra xem X có lớn hơn hoặ
c bằ
ng Y hay không
t quả
cho ta kế :
>> X >= Y 
ans =
1 1 1
1 1 0
0 0 0

m tra logic, ví dụ4 Y 6


- Chúng ta có thểphối hợp các phép kiể
>> Y>=4 & Y<=6 
ans =
0 0 0
1 1 1
0 0 0

* Các toán tửlogic chính trong Matlab và ý nghĩ


a của chúng

& và (and)
| hoặc (or)
~ không (not)
ng hạ
Chẳ n như ~= nghĩ ng
a là không bằ
~(x>5) nghĩa là x không lớn hơn 5, nế
u x=4 thì phép
m tra này sẽcho kế
kiể t quảđ
úng (true), hay = 1
- Mộ t ứng dụng khác nữa của các phép kiểm tra logic là ta có thể‘
xóa’(hay bỏ
qua) các phần tửnhấtđịnh của một ma trậ
n:
 khi tính phân bốlưu tốc theo chiề u sâu (tính từđáy kênh), ta có thểbỏ
qua lớp biên với chiều sâu nước z thỏa mãn điề u kiệ
n z <= delta (delta
là chiều dày lớp biên).
 n suấ
khi tính tầ t vượt quá một ngưỡng N nào đó củ a chiều cao sóng
trong bộsốliệ u đo đạc vềsóng – véctơH, ta có thểkiểm tra điề
u kiện
H(i) > N.
VD:
>> H = [4.7506 1.1557 3.0342 2.4299 4.4565... (shift + )
3.8105 2.2823 0.0925 4.1070 2.2235]; 
>> N = 3; 
>> kiemtra = H > N 
kiemtra =

- 25 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

1 0 1 0 1 1 0 0 1 0
>> H = H.* kiemtra 
H =
4.7506 0 3.0342 0 4.4565 3.8105 0 0 4.1070 0

Nhờđ ó véctơH bây giờchỉcòn chứa các sốliệ


u sóng có chiề
u cao lớn hơn
ngưỡng 3m.

2.10. Kết hợp nhiều lệnh trên một dòng; Ẩn kết quảtính.
Dấu phẩ y (,) và dấ
u chấ m phẩ y (;) là những ký tựcó ý nghĩ
a đ
ặc biệ
t trong
Matlab, và sẽchứng tỏlà rấ
t hữu ích.
t hợp nhiề
* Kế u lệ
nh trên một dòng:
Toán tửphẩ
y (,) được dùng đ
ểnhóm nhiề
u lệ
nh trên một dòng, ví dụ:
>> x=3.5, y=-5.0, xˆ3 – y 
x =
3.5000
y =
-5
ans =
47.8750

* Ẩn kế
t quảtính (Surpessing output)
- Thông thường, chúng ta không muố n theo dõi tấ
t cảcác tính toán trung gian, hay
ta muốn ẩ nđi mộ t câu lệ
nh, một diễ
n giả i. Khi đ
ó ta dùng dấ u chấ m phẩ y (;). Ví
dụ :
>> x=3.5; y=-5.0; xˆ3 – y 
ans =
47.8750

Trong ví dụtrên, kế
t quảcủ
a hai lệ
nh gán đầ
u tiên đ
ãđược ẩ
nđi.

- 26 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

3. CHƯƠNG III: VECTƠ

3.1. Giới thiệu


- Đại sốtuyến tính là trái tim và là phần hồn của Matlab. Trong thực tếthì ban đầu
Matlab là từviế t tắt của “ matrix laboratory’. Vì vậy hơn bấ t kỳngôn ngữnào
khác, Matlab khuyế n khích và trông đ ợi bạn tận dụ
ng mọ i khảnăng của các mả ng,
véctơvà ma trậ n.
t vài thuật ngữtrong chương III (Véctơ) và IV (Ma trận):
* Mộ
- Mảng là một tập hợp các số, được gọi là các ‘phần tử’ hay các ‘đầ u số’, được
biết đế
n với một hoặc nhiề
u chỉsốchạ y suốt các tậ
p hợp chỉsố . Trong Matlab, các
tập hợp chỉsốluôn là chuỗi sốnguyên tốbắ tđầu bằng 1.
- Sốchiề u của một mảng là sốcác chỉsốcầ n thiế
tđ ểđ ị
nh nghĩ a một phầ
n tửtrong
mả ng. Chẳ ng hạn mảng 2 chiều sẽcần 2 chỉsối và j đ
ểđặ c trưng cho một phẩn tử
của mả ng.
- Kích thước củ
a mả
ng là một danh sách các kích thướ
c củ
a các tậ
p hợp chỉsố
, ví
dụ :
>> r = [1 2 3; -1 -2 -7]
r =
1 2 3
-1 -2 -7
>> size(r)
ans =
2 3

a là kích thước củ
Nghĩ a mả
ng r sẽlà 2x3 (2 hàng, 3 cộ
t).
- Ma trậ n là một mả ng hai chiều (kích thước m x n với các quy luậ tđ ặ t biệ t cho
phép cộng, nhân và các tính toán khác. Nó đ ặc trưng cho một sựbiế n đổ i tuyế n
tính vềtoán họ c. Hai chiề
u của ma trận là hàng và cột (m hàng và n cột).
- Véctơlà mộ t ma trận mà mộ t chiều chỉcó chỉsố=1. Cụthể , một véctơhàng là
một ma trận chỉcó mộ t hàng (kích thước 1 x n), còn mộ
t véctơcột là một ma trậ
n
chỉcó một cột (kích thước m x 1).

- Mặ c dù khái niệ m mả ng tổ ng quát hơn và ít tính chất toán học hơn một ma trận,
nhưng hai thuậ t ngữnày vẫ n thường đ ược dùng lẫ n với nhau. Hơn nữa, Matlab
đ ôi khi không có mộ t sựphân biệ t chính thức nào, thậm chí là giữa một đại lượng
vô hướng và mộ t ma trận kích thước 1x1.
- Các lệnh có thểđược sắ p xếp theo sựphân biệ
t giữa mả ng/ma trậ n, nhưng
Matlab thường cho phép bạ
n sửdụng chúng lẫ
n lộ
n một cách thoả i mái. Ý tưởng ở

- 27 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

đây (và bất cứchỗnào khác) là Matlab muốn giữcho ngôn ngữcủ
a mình đơn giả
n
và tựnhiên, đểbạn có thểtựmình tránh khỏi các rắ
c rố
i.
- Các phần tửđơn lẻtrong ma trậ n có thểđược tiế p cận và sửa đổi bằ
ng cách sử
dụng chỉsốphầ n tử(subscripting). Trong Matlab, phầ n tửthứi của véctơV được
biểu diễ
n bằ ng ký hiệu V(i), chỉsốđ ược viết trong ngoặ cđ ơn. Ví dụ
:
>> V = [10 20 30] 
V =
10 20 30
>> V(2) 
ans =
20
>> V(2)=50 
V =
10 50 30

- Sau đây chúng ta sẽxem xét lầ


n lượt hai loạ
i véctơchính trong Matlab: véctơ
hàng và véctơcột.

3.2. Véctơhàng
Véctơhàng là chuỗ i các sốđư ợc phân cách bởi dấ u phẩ y hoặ c khoả ng trống. Số
lượng các đầ u sốđ ược gọ i là ‘chiều dài’ của véctơ, và mỗi đ ầu sốthường được
nhắc đến như‘phầ n tử’ , hoặ c ‘hợp phầ n’của véctơ. Cú pháp cơbả n đ ểnhậ p1
véctơlà mộ t chuỗi các giá trịđ ược bao trong cặp ngoặ c vuông [ ]. Ví dụ:
>> v = [ 1 3 sqrt(5)] 
v =
1.0000 3.0000 2.2361
>> length(v) 
ans =
3

c cách khai báo khác cho kế


hoặ t quảtươ
ng tự, sửdụ
ng các dấ
u phẩ
y (, )
>> v = [1, 3, sqrt(5)] 
v =
1.0000 3.0000 2.2361

- Trong ví dụđ ầ u tiên, các khoả ng trống được dùng đểphân cách các phầ n tửcủ a
véctơ. Khoả ng trống (space) rấ t quan trọ
ng trong khi khai báo véctơ, đ
iều này có
thểminh họ a bằng sựkhác biệ t nhỏgiữa hai dòng lệnh dưới đây:
>> v2 = [3+ 4 5] 
v2 =
7 5
>> v3 = [3 +4 5] 
v3 =
3 4 5

- Nhưđã đềcậ p ởtrên, chúng ta có thểxem hoặ


c thay đ
ổi giá trịcủa những phầ
n
tửriêng biệ
t củ
a véctơ:

- 28 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

>> w(2) = -2, w(3)


w =
1 -2 3
ans =
3

3.3. Vectơcột
Véctơcột có cấu tạ
o tương tựnhưvéctơhàng. Khi định nghĩ a véctơcộ
t, các phầ
n
tửđược phân cách nhau bởiký tự‘ c bởi ‘
;’ hoặ newlines’. Ví dụ :
>> c = [ 1; 3; sqrt(5)] 
c =
1.0000
3.0000
2.2361
>> c2 = [3 (shift + )
4 (shift + )
5] 
c2 =
3
4
5
>> c3 = 2*c - 3*c2 
c3 =
-7.0000
-6.0000
-10.5279

Ví dụtrên cho thấ


y các véctơcộ
t có thểđ
ược cộ
ng hoặ
c trừvới nhau nế
u chúng có
cùng chiều dài.
3.4. Toán tửhai chấm ( : )
- Toán tửnày dùng đểtạ
o ra véc tơhàng mộ
t cách nhanh chóng:
>> x = 1:4 
x =
1 2 3 4
>> y = 3:7 
y =
3 4 5 6 7
>> z = 1:-1 
z =
Empty matrix: 1-by-0

- Mộ t cách tổng quát thì a : b : c sẽtạ o ra mộ t véc tơvới các phầ n tửbắ t đầ u
từgiá trịcủ a a, tă
ng dầ n với bước tă
ng bằ ng giá trịcủa b, cho tớ i khi đạ t tới giá trị
của c (sẽkhông tạ o ra một giá trị
vượt quá c). Điề u này giải thích vì sao 1:-1 tạ o ra
một véctơrỗng [ ].
>> 0.32:0.1:0.6 
ans =
0.3200 0.4200 0.5200
>> -1.4:-0.3:-2 
ans =

- 29 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

-1.4000 -1.7000 -2.0000

- Toán tử‘:’ còn được dùng đ


ểtrích xuấ
t một phầ
n củ
a véctơ. Giảthiế
t chúng ta
có véc tơ
>> r = [1:2:6, -1:-2:-7] 
r =
1 3 5 -1 -3 -5 -7

thì đ
ểtrích ra các phầ
n tửtừthứ3 đ
ến thứ6 ta có thểdùng lệ
nh:
>> r(3:6) 
ans =
5 -1 -3 -5

c đểtrích các phầ


hoặ n tửtheo một quy luậ
t, chẳ
ng hạ
n:
>> r(1:2:7) 
ans =
1 5 -3 -7

Hãy xem r(1:2:7) cho t quảnhưthếnào?


ta kế

3.5. Làm việc với vectơ& ma trận (mảng)


* Các phép toán sốhọc:
- Chúng ta có thểtiến hành mộ t sốphép toán sốhọ c nhấtđịnh (cộng, trừ) với các
véctơcó cùng chiề u dài. Matlab sẽbáo lỗ i khi ta thực hiện các phép toán này với
các véctơcó kích thước (chiều dài) khác nhau. Ví dụ :
v1 = [1 2 3]
v2 = [4 5 6]
>> v1+v2 
ans =
5 7 9
>> v3=3*v1 
v3 =
3 6 9
>> v4=2*v1-3*v2 
v4 =
-10 -11 -12
>> v5=[10 11 12 13]; 
>> v4+v5
??? Error using ==> plus
Matrix dimensions must agree.

- Mộ t véc tơcũng có thểnhân dược với một đạ


i lượng vô hướng (một số
), thao tác
đ ược Matlab tiế
n hành với từng phần tử.
- Đểtiến hành các tính toán cùng loạ i (tính toán vớ
i từ
ng phầ
n tử): nhân, chia và
lũy thừa, Matlab đưa ra các toán tử .*, ./ và .^. Ví dụ
:
>> v1.*v2 
ans =
4 10 18

- 30 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

>> v2./v1 
ans =
4.0000 2.5000 2.0000

Toán tửlũ y thừa có thểđ


ược sửdụng theo hai cách, với lũ
y thừa sốvô hướng
hoặc lũ
y thừa véctơ:
>> v2.^2 
ans =
16 25 36
>> v2.^v1 
ans =
4 25 216

n các toán tử‘


Lý do Matlab cầ .’ này sẽđược làm rõ hơn trong chương 5.
- .* thực ra có ý nghĩ
a củ
a một phép nhân ma trậ
n, tương ứng với .* cho các véctơ.
Tất cảcác hàm sốhọ c dựng sẵn củ a Matlab được thiế
t kếđểhoạtđ ộng với các
véctơ(và ma trận), vì vậy chúng ta có thểxây dựng các diễ
n giả
iđạ
i sốhoạ t động
với từng phầ
n tửcủ a véctơ.
x
VD: đoạ
n mã lệ u thức 2 x  x 3 cos(. y )
nh dưới đây tính toán giá trịbiể
y
theo-từng-phầ
n-tử. Tính với mỗ
i một phầ
n tửtrong véctơx và y:
>> x = [1 2 3]; y = [4 5 6]; 
>> s = 2*sqrt(x) + x./y - x.^3.*cos(pi*y) 
s =
1.2500 11.2284 -23.0359

Lưu ý các phép tính của các đại lượng vô hướng trên các véctơkhác nhưthếnào
với cách làm việc phầ n tửvới phầ n tử, ví dụ: 2 * sqrt(x) rõ ràng là nhân sốvô
hướng với véctơ, trong khi x/y thì khác, vì vậy ởđ ây ta cầ
n phải sửdụ ng x./y

Chú ý: Các phép cộng và trừphần tửvớ i phần tửlẽra cũng phải sửdụ
ng .+ và .-
, tuy nhiên trong ví dụnày thì không cầ
n thiế
t.
* Ghép các véctơ:
- Có thểtạ o ra một véctơtừnhững véctơcó trước nế
u nhưkích thước của chúng
tương thích với nhau, ví dụ:
>> w = [1 2 3], z = [8 9] 
>> cd = [2*z,-w], sort(cd) 
w =
1 2 3
z =
8 9
cd =
16 18 -1 -2 -3
ans =
-3 -2 -1 16 18

- 31 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

Lưu ý rằng câu lệnh cuố


i cùng (sort) sắ
p xế p các phầ n tửcủa véctơtheo chiều tăng
dần. Ta cũng có thểsửdụng các lệ nh cat, vertcat, horzcat đểghép nố i các véctơ
(xem thêm help).
nh cho thông tin vềma trậ
* Các lệ n (véc tơ):
size - kích thước theo mỗ
i chiề
u
length - kích thước củ
a chiề
u dài nhấ
t (đặ
c biệ
t là cho véctơ)
ndims - sốchiề
u
find - các chỉsốcủ
a các phầ
n tửkhác 0
n vịma trậ
* Chuyể n:
Ta có thểchuyể n đổi một véctơhàng thành một véctơcộ t (và ngược lạ
i) bằ
ng một
i là ‘chuyể
quá trình gọ n vị u bằ
’ – ký hiệ ng ký tự ’. Hãy xem các ví dụsau:
>> w, w', c, c' 
w =
1 -2 3
ans =
1
-2
3
c =
1.0000
3.0000
2.2361
ans =
1.0000 3.0000 2.2361
>> t = w + 2*c' 
t =
3.0000 4.0000 7.4721
>> T = 5*w'-2*c 
T =
3.0000
-16.0000
10.5279

3.6. Xửlý dữliệu với các hàm dựng sẵn cho vectơ& ma trận
ng trên lớp)
(Xem thêm Help và bài giả
p xế
* Sắ p dữliệ
u: sort

* Tìm giá trịlớn nhất: max

* Tìm giá trịnhỏnhất: min

- 32 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

* Tính tổng: sum

* Tìm giá trịtrung bình: mean

* Tìm độlệ
ch quân phương: std

- 33 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

4. CHƯƠNG IV: MA TRẬN ĐẠI SỐ & TUYẾN TÍNH

4.1. Đị
nh nghĩ
a và khởi tạo ma trận
- Ma trận là dạng cấ
u trúc dữliệu cơbản củ
a Matlab. Và nhưđã đềcậ p ởchương
trước, các véctơchẳng qua là những dạ
ng đặc biệ
t của ma trậ
n có kích thước (1 x
n) hoặc (m x 1).
- Từdấu nhắ c của cửa sổnhậ p lệ
nh, đ
ánh lệnh help elmat và help matfun đểcó
một danh sách các lệnh và hàm làm việc với ma trậ
n trong Matlab.
- Cú pháp củ a việ cđ ị
nh nghĩ a và khởi tạ
o ma trận rấ
t giống với những gì bạ n đã
thấy với véctơ: các khoảng trống (hoặc dấu phẩy) phân cách các phần tửtrong một
hàng, và các dấu chấ m phẩy là ký hiệu cho biế
t bắtđầu mộ t hàng mới sau đó.
Ví dụkhi bạ
nđánh:
>> A = [2 -1 0 0; 1 1 2 3; -1 4 0 5 ] 

Matlab sẽđ
ưa ra kế
t quả
A =
2 -1 0 0
1 1 2 3
-1 4 0 5
n A bây giờchứa mộ
Và biế t ma trậ
n 3x 4.
- Các phần tửđơn lẻcủ a mộ t ma trận có thểđược tiế p cậ
n và chỉnh sửa theo cùng
một cách nhưvới các véctơ, đó là cung cấ p các chỉsốhàng và cột. Ví dụlệnh
A(3,2) = 0 sẽthay thểgiá trịphầ
n tửcộ
t 2 hàng cuối cùng của ma trậ
n A thành 0.
u lệ
- Có nhiề nh đ
ểkhởi tạ
o mộ
t sốdạ
ng ma trậ
n đặ
c biệ
t, ví dụ
zeros(n,m)  - o ma trậ
tạ n với tấ
t cảcác phầ
n tử= 0
ones(n,m)  - o ma trậ
tạ n với tấ
t cảcác phầ
n tử= 1
eye(n)  - o ma trậ
tạ n đơn vịkích thước n x n.
- Đểkhởi tạ o một ma trậ
n vuông đặc biệt, bạ
n có thểsửdụng dạ ng ngắn zeros(n),
lệnh này đã ngầmđ ị
nh rằng sốhàng và sốcộ t của ma trậ
n là bằ
ng nhau.

4.2. Một sốma trận đặc biệt


nh dùng đ
* Các lệ ểxây dựng ma trậ
n và mả
ng:
eye - nđ
ma trậ ơn vị

- 34 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

zeros - n với tấ
ma trậ t cảcác phầ
n tử= 0
ones - n với tấ
ma trậ t cảcác phầ
n tử= 1
diag - nđ
ma trậ ường chéo (hoặ
c chích xuấ
t mộ
t đường chéo)
toeplitz - n với mỗi đ
ma trậ ường chéo bằ
ng 1 hằ
ng số
triu - n tam giác trên
ma trậ
tril - n tam giác dưới
ma trậ
rand - n với các phầ
ma trậ n tửngẫ
u nhiên (từ-1 đế
n 1)
linspace - n với các phầ
ma trậ n tửcách đ
ều nhau
cat - móc nối các ma trậ
n với nhau theo một chiề
u đã đ
ịnh
repmat - xây dựng ma trậ
n mới bằng cách lặ
p mộ
t véc tơtheo 1 chiề
u
(hoặc nhiề
u chiề
u) đ
ã định
Xem help đ
ểcó hướng dẫ
n chi tiế
t hơn vềcách sửdụ
ng các hàm này.

4.3. Các phép toán với từng phần tửtrong ma trận

4.4. Các phép toán với ma trận

4.5. Giải phương trình đại số

4.6. Giải hệphương trình đại sốtuyến tính

4.7. Tìm nghiệm của đa thức

4.8. Giải phương trình phi tuyến

4.9. Giải phương trình vi phân

4.10. Các lệnh hữu ích khác

inv(A), the matrix inverse,


det(A), the determinant of a matrix,


- 35 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

trace(A), the trace,


cond(A), the condition number,


norm(A), the matrix norm.


eig(A), _nds the eigenvalues and eigenvectors.


(Tương tựnhưphần véctơ- Xem thêm Help và bài giả


ng trên lớp)

- 36 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

5. CHƯƠNG V: SCRIPTS VÀ FUNCTIONS (M-FILES)

5.1. Giới thiệu M-file


- Các M-file là các file ASCII (file text) bình thường chứa các (câu) lệ nh Matlab.
Một đ iều thiết yế
u là các file đ
ó có phầ n mởrộ ng là '.m' (VD: baitap2.m) và vì lý
do này, chúng thường được biế t đến dưới cái tên các m-files.
- Có hai loại m-file: Script và Function. Các Script và Function files cũng hoạt
động gầ n nhưcác Procedures và Functions trong các ngôn ngữlậ p trình thông
dụng khác.
- Vềcơbả n nội dung của một script file đư ợc hiểu giống hệ t nhưkhi nội dung đó
được gõ vào tạ i dấu nhắc cửa sổnhậ p lệ
nh. Hiểu đơn giả n thì nó chỉthực hiệ n một
chuỗi các câu lệ nh của Matlab. Tuy nhiên trong thự c tếnhiề u người dùng ưa thích
sửdụng Matlab bằ ng cách đánh tất cảcác lệnh vào script file và chạ
y (các) file đó.
Ưu điể m của phương pháp sửdụng script là:
o ra và xem xét, chỉ
• Tạ nh sửa mộ
t chuỗ
i nhiề
u dòng lệ
nh (thườ
ng là 4, 5
dòng trởlên).
• Có thểdễdàng xem lạ
i hoặ
c thực hiệ
n lạ
i công việ
c củ
a bạ
n sau này.
• Chạy các tính toán (công việc) đòi hỏi cường độcao củ a CPU trên nền, xử
t quảvà lưu lạ
lý kế i tựđộng, cho phép bạ n log-off (liên quan tới UNIX).

5.2. Biên soạn và thực thi M-file


- Biên soạ n: Matlab cung cấp cho ta một công cụbiên soạn các m-file khá tốt, đó
là Matlab editor. Tuy nhiên bạn có thểtựdo sửdụ ng các ứng dụng soạ n thảo khác
a Windows nhưNotepad, Textpad...
cho file text củ
- Bạ n có thểkhởi độ ng Matlab Editor bằ ng nhiề u cách: Từmenu File/New/M-file,
hoặ c nhấ n tổhợp phím tắ t‘ Ctrl – N’, hay cách nhấ n vào nút ‘New Doccument’
trên thanh công cụ , cách đánh vào cửa sổnhậ p lệnh ‘ u file chưa
edit’ và tên file (nế
tồn tại trong thưmụ c hiện thời, Matlab sẽhỏ i bạnđ ểkhẳ ng đ ịnh rằ ng bạn muốn
tạo ra mộ t file mới với tên nhưvậ y)
n thả
- Soạ o các câu lệ
nh của bạ
n và Save.
- Đểbiế
t trong thưmụ
c hiệ
n tạ
i (current directory) có những m-file nào, bạ
n có
thểsửdụng lệnh
>> what 

- 37 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

- Đểxem nộ
i dung của một m-file, bạ
n nháy đúp vào file đ
ó đ
ểmởnó ra hoặ
c
đ nh
ánh lệ
>> type tên_file 

- Thực thi: Đểcó thểthực thi một m-file, nó cầ n phả i tồn tại trong thưmục hiệ n
thời (xem cử a sổCurrent Directory). Bạn có thểdi chuyể n giữa các thưmụ c trong
ổcứng gầ n giống nhưvới trình duyệ t Exprorer của Windows, hoặ c dùng lệ nh
editpath (path là đ
ường dẫn đế n thưmục mà Matlab sẽtìm kiế m file ởđó).
- Biên dị ch: không cầ n thiết biên dịch cảhai loạ i M-file của Matlab. Muốn thực
hiện các lệnh chứa trong file này rấ t đơn giản, bạn chỉcầ n đánh tên file (không cần
phần mởrộ ng '.m') từdấ u nhắ c cửa sổlệnh . Các chỉnh sửa đ n hành với file và
ã tiế
ghi lại vào ổđĩ a sẽđ ược thực thi khi bạn gọi function hay script đó lần sau.
Ví dụgọi thực thi các lệ
nh có trong file baitap2.m nhưsau:
>> baitap2 

Chỉcó các thông sốđầ


u ra sẽđ
ược thểhiệ
n trên màn hình, chứkhông phả
i bả
n
nh.
thân các câu lệ
- Đểcó thểxem các câu lệ
nh có trong file cùng lúc với các thông sốđ
ầu ra, bạ
n
đ nh
ánh lệ
>> echo on 

nh 'echo off' sẽtắ


và lệ t chức nă
ng này.

5.3. Chú thích (comments)


- Một dạng câu quan trọng trong M-file là câu chú thích, được bắ
tđ ầu bằng ký tự
phần trăm (%). Bấ t cứphầ n text nào sau ký tự'%' trên một dòng lệ nh sẽđược
Matlab bỏqua không thực hiệ n (trừtrường hợp ký tự% là một phầ n của chuỗi ký
tựgiữa hai dấu nháy ‘’).
- Mụ c đích chính của tính nă ng này là cho phép bổsung các câu chú thích
(comments) vào script file, mô tảrõ ràng hơn mụ
cđ ích, tính nă
ng các lệ
nh, đ
oạn,
vòng lặp, biế
n...
- Hơn nữa, khố i các câu chú thích đ
ầ u tiên trong một M-file sẽhoạ tđộng nhưmột
hướng dẫ n sửdụ ng m-file của bạn, và sẽhiệ n ra ởcửa sổnhậ p lệnh khi bạ
n sử
dụ ng lệ
nh help + tên_m-file.
Ví dụ: giảsửtrong file baitap2.m củ
a bạ
n có nội dung sau:
% script nay giai quyet cac bai tap ve nha
% lien quan toi kien thuc chuyen nganh ky thuat bien
%
z= rand(1); % muc nuoc bien

- 38 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

a=omega*t*sin(2*pi); % bien do song...

Thì khi một người dùng khác ngồi vào máy tính củ
a bạ n, muốn biế
t những thông
tin cơbản nhấ t xem file baitap2.m viế
t vềvấn đềgì, họcó thểđánh vào cửa sổ
lệnh:
help baitap2 

t quảnhậ
và kế nđược sẽlà
script nay giai quyet cac bai tap ve nha
lien quan toi kien thuc chuyen nganh ky thuat bien

5.4. Các hàm m-file (function m-files)


- Trước tiên chúng ta cầ
n phân biệ
t các hàm m-file và các hàm sốdựng sẵ
n, hàm
trong một dòng.
 Hàm dựng sẵ
n, VD nhưsqrt( ), log( ), exp( ), sin( )...
 Hàm trong 1 dòng (inline function): là cách đơn giả n nhấ t mà người
dùng có thểđ ịnh nghĩ a một hàm, VD: Dòng lệ nh dưới đây sẽkhai báo
hàm f ( x ) x.sin( x ) 2 và tính giá trịhàm tại x=5 bằ ng cách chuyển
hàm này cho lệ nh inline củ a Matlab trong một cặp dấu nháy ‘ ’:
>> f = inline('x*sin(x)+2'), f(5)
f =
Inline function:
f(x) = x*sin(x)+2
ans =
-2.7946

 Hàm với m-file: Dùng cho các hàm phức tạp hơn, chẳ ng hạn nhưcó
chứa các vòng lặ
p, câu đ
iều kiệ
n... bạ
n cầ
n dùng m-file đểkhai báo các
hàm đ ó.
n phân biệ
- Sau nữa chúng ta cầ t các hàm m-file và các script-file:
 Script m-file, nhưđã đ ềcậ p ởphần trước, không phả i là một hàm. Nó
không có các tham sốđ ầu vào cũng nhưđ ầu ra, và đơn giản nó chỉthực
hiện mộ t chuỗi các câu lệnh của Matlab, vớ i các biế
nđ ược định nghĩa
trong khong gian làm việ c.
 Hàm m-file khác với script m-file ởchỗnó có một dòng đ
ịnh nghĩ
a
hàm, qua đó liên hệgiữa các tham sốđ
ầu vào và đầ
u ra.
Hàm là cách chủyếu đểphát huy khảnă ng của Matlab. So vớ
i các script, các hàm
có khảnăng phân chia nhiệ
m vụtốt hơn nhiều.

Một ví dụvềhàm trong Matlab có thểtham khả


o bài tậ
p 4 (tính diệ
n tích tam
giác), chương 8 trong giáo trình này.

- 39 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

* Các bước chính cầ


n tuân theo khi khai báo mộ
t hàm trong Matlab là:
- Đặ t têm cho hàm, lưu ý rằng tên đó không được xung độ t với các tên đã
được Matlab dành trước. Trong ví dụnày tên hàm là dientich vì vậ y các
định nghĩ a củ
a nó sẽđ ược lưu trong một file tên là dientich.m
- Dòng đầ
u tiên của file này cầ
n có dạ
ng thức nhưsau:
function[các outputs] = tên_hàm(các inputs)

Lấ y ví dụtrong bài toán củ a chúng ta, biếnđ ầu ra S (diệ


n tích) là một hàm
sốcủ a các biến đầu vào a, b, c (là chiề
u dài của ba cạnh). Do đ ó dòng đ ầ
u
tiên của m-file hàm dientich sẽlà:
function [S] = area(a,b,c)

- Soạ n thảo hướng dẫn sửdụng cho hàm (không bắ t buộc, xem thêm phần
chú thích - Comments). Mô tảngắ n gọn mục đich của hàm và làm thếnào
đểsửdụ ng nó. Các dòng này cầ n bắ t đầ
u bằ
ng ký tự%, hay chính là các
dòng chú thích mà ta đ
ã đềcập, và Matlab sẽbỏqua nó khi thực thi hàm.
- Cuố i cùng và cũ
ng là quan trọng nhấ t: soạn thả o mã lệnh thực thi nội
dung của hàm. Đi cùng với nội dung ta cũ ng cầ nđ ầyđ ủcác câu chú thích
đểngười dùng khác có thểhiểu đượ c quá trình ta đang làm.
Mộtm-file hàm hoàn chỉ
nh có thểtrông nhưsau (theo ví dụtrên củ
a chúng ta)
function [A] = dientich(a,b,c)
% Tinh dien tich cua mot tam giac
% khi biet chieu dai 3 canh la a, b va c.
% Dau vao:
% a,b,c: Chieu dai cua cac canh
% Dau ra:
% A: Dien tich tam giac
% Cach su dung (cu phap):
% Dientichcantinh = dientich(2,3,4);
% Nguoi viet: Ng.Ba.Tuyen, 2007.
s = (a+b+c)/2;
A = sqrt(s*(s-a)*(s-b)*(s-c));
%%%%%%%%% ket thuc dientich %%%%%%%%%%%

Ta thấ y rằ
ng chú thích ởđ ây khá đầyđ ủ
, và người dùng sau có thểdễdàng hiểu
được nội dung cũ ng nhưcách sửdụng hàm dientich bằ ng cách đ nh help
ánh lệ
dientich  từcửa sổnhậ p lệnh, hướng dẫ
n thu được sẽnhưsau:
>> help dientich 
Tinh dien tich cua mot tam giac
khi biet chieu dai 3 canh la a, b va c.
Dau vao:
a,b,c: Chieu dai cua cac canh
Dau ra:
A: Dien tich tam giac
Cach su dung (cu phap):
Dientichcantinh = dientich(2,3,4);
Nguoi viet: Ng.Ba.Tuyen, 2007.

Thửsửdụng hàm vừa lậ


p đểtính diệ
n tích mộ
t tam giác khác:

- 40 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

>> dientich(4, 5, 7)
ans =
9.7980

Nhưvậ y chúng ta đ ã đi qua các bước cơbản từkhai báo một hàm bằng m-file,
soạn thảo nội dung, mã lệ nh, và sửdụng hàm. Hãy sửdụng help đểcó hiểu biết
sâu hơn vềhàm trong Matlab.
* Một khía cạ nh quan trọng khác củ a hàm M-file là hầ u hế t các hàm xây dựng
trong Matlab (trừnhững hàm lõi toán họ c) đều là các M-file mà bạ n có thểđọc và
copy. Đây là một cách rất tổ
t đểhọc hỏi, luyệ
n tậ p lập trình – và cũng là một mẹo.

5.5. Câu lệnh rẽnhánh (if và switch)


- Thông thường một hàm cầ n rẽnhánh tùy theo các điề
u kiện thực thi. Matlab
cung cấ p cho ta các công cụđểlàm việc này cũng nhưhầ u hế
t các ngôn ngữlậ p
trình khác.
nh if...elseif...else...end
* Câu lệ
- Ví dụsau minh họ
a hầ
u hế
t các tính nă
ng củ
a if
if isinf(x) | ˜isreal(x)
disp(’So lieu dau vao xau!’)
y = NaN;
elseif (x == round(x)) && (x > 0)
y = prod(1:x-1);
else
y = gamma(x);
end

- Ta thấ y các điề


u kiệ n cho câu lệ
nh if có thểliên quan tới các toán tửquan hệđ ã
đềcậ p ởchương 2, cũ ng có thểliên quan tới các hàm cho ta giá trịlogíc (isinf,
~isreal... đểkiểm tra xem x có phải là sốvô cùng, hay x không phả i là sốthực... ).

nh switch...case...case... case...otherwíe...end
* Câu lệ
- Bộcâu lệ nh if/elseif chỉhữu ích trong trường hợp chỉcó mộ t vài lựa chọn. Còn
khi có mộ t sốlượng lớn các lựa chọ n khảdĩ, thông thường ta dùng switch đểthay
thế. Ví dụ
:
switch donvi
case ’Chieudai’
disp(’met’)
case ’The tich’
disp(’lit’)
case ’Thoi gian’
disp(’giay’)
otherwise
disp(’Toi chiu thua’)
end

- 41 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

- Diễn giả
i của lệnh switch có thểlà một chuỗ i hoặc mộ
t số
. Trường hợp đầ
u tiên
phù hợp với case thì các lệ
nh của nó sẽđược thực thi.
- Có thểsửdụ ng otherwise hoặ
c không. Trong trường hợp có sửdụ
ng, thì Matlab
thực thi các lệ
nh sau otherwise nếu không có trường hợp nào phù hợp với các
case.

5.6. Vòng lặp (for và while)


p for...end
* Vòng lặ
- Đượ c sửdụng khi ta muốn lặ p mộ
t đoạn mã lệnh cho một sốlần tùy ý (thực ra ta
sẽít dùng đến nó trong Matlab hơn là trong các ngôn gnữlậ p trình khác, bởi vì
Matlab cung cấp cho ta toán tử:)

- Ví dụ, vẽđ ng -1x 1 với các giá trịkhác nhau củ


ồthịsin(n..x) trong khoả an
= 1, 2, ...8.
- Thực thi: Chúng ta có thểđưa ra 8 lệnh vẽriêng rẽ , nhưng sẽdễdàng hơn nhiề
u
nế u ta sửdụng một vòng lặp. Dạng đơ n giản nhất của nó sẽlà
>> x = -1:.05:1; 
>> for n = 1:8 (shift + )
subplot(4,2,n), plot(x,sin(n*pi*x)) (shift + )
end 

Tất cảcác lệnh giữa hai dòng bắt đầu bằng ‘


for’ và kế t thúc bằng ‘
end’ đề
u được

lặ i lặ
p lạ
i với n=1 lầ
n thứnhất, n=2 lầ
n thứ2... cho tới khi n=8.
Lệnh subplot tạ
o ra một mả
ng 4x2 cửa sổđồthịcon trong mộ
tđồthịchính. Ởlầ
n
p thứn, một hình sẽđược vẽlên cửa sổđ
lặ ồthịcon thứn.

: Minh họa cho vòng lặp for...end


Hình vẽ
p while...end
* Vòng lặ

- 42 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

- Được sửdụ ng khi bạn muố n thực hiệ n lặp đi lặ


p lạ i mộ t đoạ
n mã lệnh của
Matlab cho tới khi một điều kiện (logic) nào đó đ ược thỏa mãn, nhưng ta không
thểnói trước nó sẽcần lặp bao nhiêu lần. Khi đó chúng ta có thểsửdụng vòng lặp
này.
, tìm giá trịlớn nhấ
- Ví dụ t của n sao cho tổ
ng dướiđây vẫ
n nhỏhơn 100?
12 2 2 3 2 ... n 2
nh cho Matlab thực thi nhiệ
- Mã lệ m vụtrên:
>> S = 1; n = 1; 
>> while S+ (n+1)^2 < 100 (shift + )
n = n+1; S = S + n^2; (shift + )
end 
>> [n, S] 
ans =
6 91

- Ví dụkhác: Tìm giá trịgầ


nđúng củ
a nghiệ
m phư
ơng trình x=cos(x) ?

5.7. Đọc dữliệu từfile và ghi ra file


c/chưa học phầ
(SV 45B không họ n này)
p dữliệ
- Nhậ u trực tiế
p từbàn phím sẽtrởnên không thể(không thực tế
) khi
 Lượng dữliệ
u quá lớn
 Dữliệ
uđó được dùng cho phân tích nhiề
u lầ
n
Trong những trường hợp này thì người sửdụ
ng Matlab sẽchọ
n cách nhậ
p/xuấ
t dữ
u vớifile dữliệ
liệ u.
- Hai lệnh save và load mà ta đã học ởchương 2 cũ
ng có chức nă
ng ghi và đọ
c giá
trịcủa các biến vào/từđĩa.
- Khi làm việ c với file dữliệu, mộ t điề
u cố t yế
u cầ
n lưu ý là định dạ ng của dữ
u phả
liệ i đúng. Đị nh dạ ng dữliệ u là chìa khóa quyết đị
nh việc biên dịch dữliệu.
Có hai dạ ng file dữliệ u: formatted và unformatted (có định dạ ng và không định
dạng).
 File dữliệu có đị
nh dạng sửdụ ng cách định dạ ng chuỗi đểkhai báo
chính xác xem dữliệ
u được lưu ởvịtrí nào và nhưthếnào.
 File dữliệ
u không đị
nh dạ
ng thì khác, nó chỉđ
ịnh rõ đị
nh dạ
ng củ
a số.

Cách đ
ơn giả
n nhấ
tđểhọ
c cách làm việ
c với file dữliệ
u là thông qua ví dụsau:
Giảsửdữliệ u dạ
ng sốđược lưu trong file có tên ‘table.dat’ trong thưmục hiệ
n
hành, dữliệ
u nhưsau
100 2256

- 43 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

200 4564
300 3653
400 6798
500 6432

nh sau
3 lệ
>> fid = fopen('table.dat','r');
>> a = fscanf(fid,'%3d%4d');
>> fclose(fid);

sẽlầ
n lượt làm các nhiệ
m vụ:
 Mởmộ t file đ
ểđ ọc, việ c này được chỉđị nh bằng chuỗi ‘
r’, (r là viết tắt
của read). Biế n fid đượ c gán cho mộ t giá trịbằng 1 sốnguyên tốduy
nhất, đ
ặ c trưng cho file sẽsửdụng (sốnày còn gọi là sốchỉthịcủ a file).
Sau này mỗi khi nhắ c đế n file này chúng ta sẽsửdụ ng sốchỉthịfid.
 Đọc vào bộnhớtừng cặ p sốtừfile (file có sốchỉthịlà fid), một sốcó 3
chữsốvà một sốcó 4 chữsố .
Đóng file (file có sốchỉthịlà fid).

o ra mộ
Quá trình này tạ t véc tơcột chứa các phầ
n tử100 2256 200 4564 ...500
6432. Véctơnày có thểđ ược chuyể nđổi vềma trận 5x2 bằ
ng lệ
nh:
A = reshape(2,2,5)'; 

.......... (lược bớt) .............. (xem thêm Help nế


u cầ
n thiế
t) ....................

6. CHƯƠNG VI: ĐỒTHỊDẠNG ĐƯỜNG

6.1. Biểu diễn đường quá trình


Trường hợp đ ơn giản nhất là biểu diễ
n sựbiến thiên tă
ng giảm sốliệu trong một
dãy. Chẳng hạ n với dãy sốliệ u mực nước z đ
o được ta có thểbiể
u diễ
n dưới dạ ng
đường quá trình nhưsau:
z = [-0.05 0.18 0.28 0.33 0.19 0 -0.26 -0.35 -0.31 -0.22 0.05 0.14 0.31
0.38 0.18 0.09 -0.11 -0.20 -0.36 -0.11 0.08];1
plot(z)
Lệ nh plot(z) sẽvẽbiểuđ ồdạ ng đường với sốliệ u cho bởi vec-tơz. Trường hợp
này trục hoành sẽđ ánh sốthứtựlầ n lượt 1, 2,... Điều này không giúp ích gì trong
trường hợp thông thường khi trục hoành cầ n biể u thịkhoả ng cách không gian hoặ c

ng ởđ
1 Chú ý rằ ây xuố
ng dòng do hạ
n chếbềngang củ
a tài liệ p trình không ấ
u. Khi lậ n Enter vì máy sẽ
hiể
u nhầm z thành một ma trậ
n.

- 44 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

thời gian. Chẳ ng hạ n, nếu sốliệu z ởví dụtrên là mực nước đo được tạ i các thời
điểm 0 s, 10 s, 20 s... (cách nhau 10 giây) thì ta có thểbổsung mã lệ
nh nhưsau:
figure;
t = 0:10:200;
plot(t, z);
Ởđây lệ
nh figure có tác dụ
ng tạ
o ra mộ
t hình mới.
n vẽthường có rấ
Chú ý: Các vec-tơcầ t nhiều phần tử, và do đ n dùng dấ
ó ta cầ u;
ởcuối câu lệ
nh đểngăn không cho máy hiện lại nộ
i dung của toàn bộvec-tơ.

i đểvẽbiể
Tóm lạ u đồdạ
ng đ
ường nói chung ta theo 3 bước sau:
t vec-tơchứa các tọ
1) Phát sinh mộ a độx của các điể
m
2) Phát sinh một vec-tơchứa các tọađ ộy, có thểlà từsốliệ u sẵ
n có, hoặ c là một
hàm tính từcác giá trịtương ứng của x. Trong trường hợp sau cần lưu ý phép tính
cầnđ ược áp dụng cho từng phần tửmột.
3) Thực hiệ
n lệ
nh vẽplot(x, y)

Trong các biể u đồta phả i ghi tiêu đềcủa biểuđ ồvà điền các đạ
i lượng và đơn vị
lên các trục (x, y). Có thểthực hiệ n việ
c này bằ
ng cách:
title('Tiêu đ
ềbiể
uđồ')
xlabel('Tiêu đ
ềtrục x')
ylabel('Tiêu đ
ềtrục y')

Chẳng hạ
n với ví dụvềmẫ
u quan trắ
c mự
c nướ
c theo thời gian nhưtrên ta có thể
t:
viế
title('Qua trinh muc nuoc thuc do')
xlabel('t (s)')
ylabel('z (m)')2

Kế t quảbiể uđ ồthu đượ c nhưtrên Hình 1. MatLab tựđ ộng căn chỉnh phạ m vi của
trục tung và trục hoành sao cho có thểhiể n thịtoàn bộsốliệ u cần vẽ . Tuy vậ y
trong mộ t sốtrường hợp ta cần thểhiệ n từng phầ n của biểu đồ, hoặc vì tính thẩm
mỹmà có thểchỉ nh sửa phạm vi của các trục. Câu lệnh nhưsau:

2 Vậ
y nế n có V(m3 ) thì sao? Hãy thửV(m^3) xem!
u muố

- 45 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

axis([xmin xmax ymin ymax])

trong đ
ó:
n lượt là giới hạ
xmin, xmax lầ n trái và phả
i củ
a trục hoành
n lượt là giới hạ
ymin, ymax lầ n dư
ới và trên củ
a trục tung.

Ta cầ n nhậ p cả4 giá trịnói trên của vec-tơphạ m vi trục. Chẳ ng hạ n khi muốn
biểu thịmực nước chỉtrong khoả ng thời gian từt = 100 s đến t = 150 s, và hạ
n chế
cao đ ộmặ t nước từ0 đế n 0.4 m, ta gõ lệnh:
axis([100 150 0 0.4])

Qua trinh muc nuoc thuc do Qua trinh muc nuoc thuc do
0.4 0.4

0.2 0.3
z (m)

z (m)
0 0.2

-0.2 0.1

-0.4 0
0 50 100 150 200 100 110 120 130 140 150
t (s) t (s)

Hình 1: Ví dụvềbiểu đồdạng đường Hình 2: Biểu đồdạng đường sau khi chỉ
nh lại
phạm vi các trục

Đểxóa toàn bộđồthịhiệ


n thời, ta gõ lệ
nh:
clf
6.2. Lựa chọn màu vẽ, nét vẽ
Trường hợp có nhiề uđ
ường nét vẽkhác nhau, ta nên phân biệt bằng những kiể
u
và màu nét vẽkhác nhau. Những lựa chọ
n này có ngay trong câu lệnh plot.
plot(x, y, 'lựa chọ
n')

Trong đó, lựa chọn là mộ t chuỗi kí tựcó 3 phầ n qui đị


nh nhưsau:
md--
với m là mộ t kí tựchỉmàu vẽ , thường là chữđầ ng Anh tương ứng
u của từtiế
d là kí hiệuđ ánh dấu các điể m nút
-- là một hay hai kí tựthểhiệ n kiểu nét vẽ

Ví dụ:

- 46 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

plot(x, y, 'r') vẽđ


ồthịnét vẽmàu đ ỏ(red). Không có lựa chọ
n kiể
u nét vẽcụthể
,
do đó máy sẽvẽkiể u nét liề cđ
n (mặ ịnh).

plot(x, y, 'g--') vẽđ


ồthịnét vẽxanh lục (green). Nét vẽđ
ược chọ u nét đứt
n là kiể
(--).

plot(x, y, 'b*-') vẽđồthịnét vẽxanh lam (blue). Nét vẽđược chọ


n là kiể
u nét liề
n
với các điể m dấ u sao (*-).

Hình 3: Kiểu nét vẽcùng các thuộc tính khác có thểlựa chọn
p sau khi chọn chếđộEdit Plot và nháy phải chuột
trực tiế
vào đường biểu đồ

Nhưvậ
y có thểtổhợp các kiể
u màu và nét vẽkhác nhau, theo bả ây 3:
ng sau đ
Màu vẽ Nét vẽ Điể
m nút
r red, đỏ - nét liề
n * dấ
u sao
g green, xanh lục -- nét đứt + dấ
u cộ
ng
b blue, xanh lam : nét chấ
m s hình vuông
k black, đ
en .- nét chấ
m gạ
ch ^ tam giác

3 Thự
c ra ta có thểlự
a chọ
n kiể
u và nét vẽtrực tiế uđ
p trên biể ồcủ
a MatLab bằ
ng cách chọ
n Edit Plot
(hoặ c nút
trên thanh công cụ) rồi nháy phả t vào đ
i chuộ ư ờ ng cầ
n chỉ
nh và lự
a chọ uđ
n Line Style (kiể ư
ờng), Line
Width (bềrộ ng) hoặ c Marker (kiểuđiểm nút) (xem Hình 3).

- 47 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

Theo mặ cđịnh, khi có một đường mới được vẽra thì đ


ường cũsẽbiế
n mấ
t. Đểvẽ
nhiềuđ ường trên cùng một biểu đồta cần gõ lệ
nh:
hold on
trước khi vẽcác đường tiế
p theo.

Chẳ ng hạn ta có thểthêm một đ ường nét đ


ứt nằ
m ngang biể
u thịmực nước bằ
ng 0
theo cách sau:
hold on; plot([0 200],[0 0],':');

Bản thân trên đ ường mự


c nước có thểthêm các đ
iểm dấ
u *:
plot(t,z,'*-');

Qua trinh muc nuoc thuc do Qua trinh muc nuoc thuc do
0.4 0.4

0.2 0.2
z (m)

z (m)
0 0

-0.2 -0.2

-0.4 -0.4
0 50 100 150 200 0 50 100 150 200
t (s) t (s)

u đồdạng đường với hai nét vẽcó


Hình 4: Biể u đồcó khung và đường dóng
Hình 5: Biể
kiể
u khác nhau

Nế u muốn đóng khung đồthịvà tạ


o các đ
ường dóng ta lầ
n lượt gõ vào các lệ
nh:
box on
grid on

Ngược lạ i, đểxóa các đường đ


óng khung và đư
ờng dóng, chỉcầ
n gõ:
box off
grid off

6.3. Tạo các chú thích, chú giải trên hình vẽ


Một biể u đồmặ c dù mang nhiề u thông tin nhưng đôi khi ta vẫ
n muố n làm rõ thêm
bằng những chú thích (thường là những nét vẽđơn giả n bằng tay và chú thích
bằng chữ). Chẳ ng hạ n, với ví dụtrên ta muố n chỉra trên biểuđ ồvịtrí mực nước
đạt cực đ ại (nhưHình 6). Cách làm có thểtheo các bước sau:
 Vào menu Insert – Ellipse, vẽmộ t vòng tròn vào vịtrí đỉnh của đường quá
trình

- 48 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

 Vào menu Insert – Text Box, vạ ch ra một khung chữnhậ t và gõ vào z max4
 Vào menu Insert – Arrow, vạ ch mũ i tên chỉtừkhung chữvào vòng tròn
Muốn xóa các chú thích, chỉcầ
n chọn đố i tượng cần xóa, ấ
n Delete.

Qua trinh muc nuoc thuc do


0.4

z max
0.2
z (m)

-0.2

-0.4
0 50 100 150 200
t (s)

Hình 6: Biểu đồvới các chú thích


* Chú giả
i (legend):
Khi có nhiề u đường biể u đồtrên mộ t đồthị
, cầ
n có chú giải (legend) đ
ểphân biệ
t
chúng. Giảsửcũ ng trên đ ồthịquá trình mực nước ởtrên, ta bổsung thêm một
đ ường mực nước tính toán đ ược từmô hình:
z2 =[0.05 0.2 0.34 0.38 0.28 0.08 -0.21 -0.35 -0.23 -0.18 0.11 0.22 0.4
0.45 0.2 0.13 -0.02 -0.11 -0.32 -0.02 0.09];
hold on; plot(t,z2,'-o');
title('Qua trinh muc nuoc tai N23');

Trên thanh công cụ ,ấ


n nút (hoặ c menu Insert – Legend). Sau đó hãy nháy đ
úp
phần chú giải mới xuất hiệ
n, gõ vào tên chú giả
i cầnđặt (Hình 7).

n có z max, hãy thửgõ z_{max}. Gõ z_max có đ


4 Muố ược không, tạ
i sao?

- 49 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

nh sửa tên chú giải tương ứng với các


Hình 7: Chỉ
đường quá trình

6.4. Xóa đường biểu đồ, lưu biểu đồ


- Nếu vẽsai một đ ường biểuđ ồnào đó ta có thểxóa bằng cách chọ n menu Tools –
Edit Plot; chọn đường biể uđ ồđ
ó, ấn Delete hoặc chọn Delete trong danh mục khi
nháy phả i chuột trên Hình 3.

- MatLab có thểlưu lạ i biểu đ ồchúng ta tạ o ra, dưới dạng nhiều dạ ng file ảnh
chuẩ n hiệ n nay: *.gif, *.png, *.jpeg, *.emf, *.eps v.v... Bên cạ nh đó, MatLab còn
có mộ t dạng file riêng gọ i là *.fig, trong đó lưu toàn bộthông tin của các đ ường,
nét, điể m... trên biểu đồ . Do vậ y mà file fig chi tiết hơn đ
ồng thời thường có kích
thước file lớn.
- Đểlưu biể u đồtrong MatLab ta chọn Menu File – Save, sau đó nhậ p tên cho file
hình mà ta muố n lưu. Cũ ng có thểnhấ n vào biểu tượng Save ( ) trên thanh công
cụ. Chú ý chọ n kiểu file hình (Save as type) thích hợ p.

6.5. ĐồthịLogarit
Trong một sốtrường hợ p, các đồthịlogarit cầ nđ ược sửdụ ng, chẳ
ng hạ n biể u đồ
đường cấp phối hạt. Muốn đặt thang logarit với trụ
c hoành ta chỉcần thay tên lệnh
plot bằ
ng semilogx.

Chẳ
ng hạ n vẽđ
n ta cầ ường cấ
p phối hạ
t với mẫ
u bùn cát sau:

Đường kính Khối lượng


(mm) (mg)

- 50 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

d < 0.15 900


0.15 < d < 0.21 2900
0.21 < d < 0.30 16000
0.30 < d < 0.42 20100
0.42 < d < 0.60 8900
0.60 < d 1200
(Toàn bộ ) 50000

Trước khi vẽđồthịhãy tính tỉlệbùn cát tương ứng với mỗ ng đ


i khoả ường kính và
tỉlệcộng dồn:
KhoiLuong = [900 2900 16000 20100 8900 1200];
TiLe = KhoiLuong / 50000;

Hàm cumsum giúp ta tính cộ


ng dồ
n, chẳ
ng hạ
n:
>> cumsum(TiLe)
ans =
0.0180 0.0760 0.3960 0.7980 0.9760 1.0000

Ta cần tính tỉlệP theo phầ


n tră
m, cho nên:
P = cumsum(TiLe) * 100;

Đường kính Khối Tỉlệ Tỉ lệcộng Đường kính


(mm) lượng (%) n
dồ d (mm)
(mg) P (%)
d < 0.15 900 1.8 1.8 0.15
0.15 < d < 0.21 2900 4.8 7.6 0.21
0.21 < d < 0.30 16000 32.0 39.6 0.30
0.30 < d < 0.42 20100 40.2 79.8 0.42
0.42 < d < 0.60 8900 17.8 97.6 0.60
0.60 < d 1200 2.4 100 1
(Toàn bộ ) 50000 100

Sốliệ u dùng đểvẽđ ồthịlà hai cột sau cùng: tỉlệcộ ng dồn (P) và đường kính (d).
Có P (%) khố i lượng bùn cát mịn hơn d (mm). Ởđ ây đã giảthiế ng đường kính
t rằ
lớn nhấ t bằ
ng 1 mm nhưlà giới hạ n trên của biểu đồ.

d = [0.15 0.21 0.30 0.42 0.60 1];


title('Bieu do duong cap phoi hat');
xlabel('d (mm)');
ylabel('P (%)');
semilogx(d,P,'*-');
grid on; box on;

- 51 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

Bieu do duong cap phoi hat


100

80

60
P (%)
40

20

0 0
10
d (mm)

Hình 8: Ví dụvới biểu đồcó trục theo thang logarit


Các đồthịvới thang logarit trên trụ c cũng được thực hiệ
c y và trên cả2 trụ n tương
tựvới các câu lệ
nh lần lượt là semilogy và loglog.

6.6. Dãy biểu đồ


Bằ ng lệnh figure ta có thểtạ o ra nhiều hình vẽđ ộc lập trên nhiề
u cửa sổ. Tuy vậy,
nhiều lúc ta muố n có mộ t dãy (hoặ c bảng) các biểu đồxế p kếtiếp nhau, có kích
thước bằ ng nhau đ ểtiệ n việ c so sánh. MatLab hỗtrợhệthống subplot (biể u đ ồ
nhỏ) với câu lệnh có dạ ng chung nhưsau:
subplot(m,n,k);

u đồtrong dãy tạo bằng lệ


Hình 9: Vịtrí các biể nh subplot

- 52 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

Sẽtạ o ra một bả
ng gồm (m × n) biể uđ ồnhỏ(m hàng và n cột). Tiếp đó hình thứk
ng dưới, trái qua phả
(tính từtrên xuố i) sẽđược kích hoạ
t và chuẩn bịđược vẽ .

Chẳ ng hạn, sau khi thực hiệ


n lệ
nh
subplot(2,3,4);
ta được kết quảnhưHình 8.

Gọ t (trong trường hợp m, n, k < 10):


n hơn nữa ta có thểviế
subplot 234

Xét một ví dụđơn giả n: ta cầ n vẽđường quá trình mực nướ c (z) và vậ
n tốc dòng
chả u đồkhác nhau. Đểcó sựđố
y (v) theo thời gian (t), nhưng trên hai biể i chiế
u
vềthời gian giữa hai biểuđ ồta nên xế p chúng theo một cột dọc. Nhưvậ y m = 2 và
n = 1.

t = 0:5:100;
z = [-0.14 -0.08 -0.05 -0.04 0.01 0.07 0.15 0.23 0.25 0.37 0.4 0.45 0.55
0.6 0.66 0.76 0.82 0.91 1 1.03 1.14];
v = [0.84 0.89 0.91 0.89 0.91 0.88 0.92 0.97 0.97 0.97 0.99
1.02 0.96 1.03 0.98 1.04 1.04 1.11 1.04 1.12 1.16];

subplot 211
plot(t, z); xlabel('t (phut)'); ylabel('z (m)');
title('Duong qua trinh muc nuoc tai diem A1');

subplot 212
plot(t, v, 'g'); xlabel('t (phut)'); ylabel('v (m/s)');
title('Duong qua trinh luu toc tai diem A1');
Kế t quảnhưtrên Hình 7.5

5 MatLab còn có lệ
nh plotyy cho phép hai trụ i hai đ
c tung vớ ạ ợ
i lưng khác nhau (chẳ
ng hạ
n z và v) trên
cùng mộ uđ
t biể ồ
.

- 53 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

Duong qua trinh muc nuoc tai diem A1


1.5

z (m)
0.5

-0.5
0 20 40 60 80 100
t (s)
Duong qua trinh luu toc tai diem A1
1.4

1.2
v (m/s)

0.8
0 20 40 60 80 100
t (s)

Hình 10: Hai đường quá trình trên hai subplot

- 54 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

7. CHƯƠNG VII: ĐỒ THỊKHÔNG GIAN

Trong kỹthuậ t rất cầ n các biểu đ ồkhông gian. Thường gặ t là các bình đồ
p nhấ
(bảnđ ồđ ịa hình của một khu vự c nhỏ). Bên cạnh đó, biể u đồkhông gian còn có
thểđược dùng đ ểbiể u diễn độsâu đị a hình hay một trường không gian nói chung
t độ
(nhiệ , khí áp ...). Trong tấ t cảcác trư ờng hợp nói trên, luôn có mộ t biến (z)
được biể
u diễ n theo hai biế n không gian trên mặ tđất (x, y).

7.1. Các dạng cơbản

Các dạng cơbản


MatLab hỗtrợnhiề u phương pháp biể
u diễ
n sốliệ
u; trong tài liệ
u này ta làm quen
với mộ
t sốloạ i cơbả n, đó là:
 Mả ng màu (color patch)
 Đư ờng đ ồng mức (contour)
 Bềmặ t 3 chiều (surface)

Hãy bắ tđ ầu với mộ t ví dụđơn giản là mô phỏng đ ị


a hình đáy biển của một khu
vực giảtưởng đư ợc cho trong ma trận z. Đáy biể
n này có dạng tương tựnhưmặ t
cắt ngang cân bằ ng (Dean) theo phương trình:
z = - 0.1 y2/3

Với trục x dọc theo bãi biển và trục y hướng ra khơi. Ta xét lướ a độtrên mặ
i tọ t
bằng, các đ m nút lưới có phạ
iể m vi 0 < x < 200, 0 < y < 200. Khoả ng cách giữa
các điểm nút lưới theo phương x là Δx = 10, theo phương y là Δy = 4. Nghĩa là tọa
độcủ a tất cảcác điểm nút lưới có dạng:

0,0⋮ ⋮ 10,0⋮ ⋮ ⋮ 200,0 ⋮

[
x i , y i⋮
=


0,4⋮ ⋮

0,200 ⋮ ⋮
10,4⋮ ⋮ ⋮

10,200 ⋮⋮ ⋮
200,4 ⋮

200,200 ⋮
]
Lệ nh meshgrid sẽgiúp ta làm đ iều đó:
[x, y] = meshgrid(0:10:200, 0:4:200);

(Một lần nữa cầ u ; ởcuối câu lệ


n chú ý dấ nh, nế
u không rấ u con sốsẽđược
t nhiề
in ra màn hình!)

Lệnh meshgrid lấ
y hai thông số: thông sốvec-tơthứnhấ a độtrên trục x,
t là các tọ
thông sốvec-tơthứhai là các tọađ ộtrên trục y. Kế
t quảta đượ c một ma trận các

- 55 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

điểm trên một vùng hình chữnhậ t (51 × 21) có các tọađ ộtương ứng dựng từcác
vec-tơtrên6. Sau đ ng z sẽđ
ó mả ược tính từmả ng y theo công thức Dean:
z = -0.1 * y .^ (2/3);

Trong đó cầ
n chú ý phép tính lũ
y thừa cho từng phầ
n tử.

Câu lệnh đơn giả t đểhiể


n nhấ n thịmả
ng
màu biểu thịz là:
pcolor(x, y, z)

Bả ng màu mặ c định được dùng có tên là


7
jet. Ta có thểthay bả ng màu này bằ ng
một sốbả ng màu khác, chẳ ng hạ n:
colormap(gray); pcolor(x, y, z);

Cầ n hiệ n tên các trụ c x và y theo cách


tương tựnhưta đ ã làm với biểuđ ồdạ ng
đường:
xlabel('x(m)'); ylabel('y(m)'); Hình 11: Bảng màu biểu thịđị
a hình đáy biển với
mặt cắt ngang cân bằng theo Dean
Có thểhiển thịthanh chú thích bên cạ
nh
bảng màu bằng lệnh:
colorbar

Viết thêm dòng chữz(m) bên cạnh thanh chỉdẫn màu này bằ ng cách Insert –
Text Box. Xóa bỏđường bao củ
a hình chữnhật bằ
ng cách nháy phải chuột – Line
Style – None.

Chú ý rằ ng khi hiện các bản đồđị a hình / bản vẽmặ t bằng, trong hầu hế t các
trường hợp ta muố n đặt những tỷlệbằng nhau trên hai trục x và y. Khi đ
ó ta dùng
lệnh:
axis equal;

6 x và y đều là ma trận 2 chiều. Do các đ


iểm trên lướ
i xế p theo hàng nên ta nhậ
n thấ
y các phầ
n tửgiố
ng
nhau trên mỗ i cột của x (các điể
m có cùng tọađ ộx); và tươ ng tựđối với y.
10 ⋮ 200 0 ⋮ 0

[ ] [ ]
0 0
0 10 ⋮ 200 4 4 ⋮ 4
x= và y=
⋮ ⋮ ⋮ ⋮ ⋮ ⋮
0 10 ⋮ 200 200 200 ⋮ 200
7 Bảng màu jet mặ
c dù rự
c rỡnhưng không hiệ ng đ
u quảkhi in trắ en, thay vào đ
ó nên dùng bả
ng màu
gray.

- 56 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

Tiế a đồthịlạ
p theo ta có khung củ ng màu 8:
i cho vừa với bả
axis tight;

Bên cạ nh cách dùng biể uđ ồmả ng màu, còn 160 -3 -3 -3

có thểbiể u thịdưới dạ ng đườ


ng đồng mức. 140
Cách này thường được dùng với các bả n in 120 -2.5 -2.5 -2.5

lên giấy: 100


-2 -2 -2

y (m)
[C,h] = contour(x,y,z);9 80

60 -1.5 -1.5 -1.5

Các đ ường đồ ng mức củ a đ n đ


áy biể ã xuất 40
-1 -1 -1
hiện song song với trục x, nhưng cần phải có 20
-0.5 -0.5 -0.5
giá trịsốtrên đường đồng mức: 00
0 50
0
100
0
150
0
200
x (m)
clabel(C,h);

Và cũ ng nhưđố i với mảng màu, ta có thểcă


n Hình 12: Đường đồng mức biể u diễn đị
a
chỉnh các trụ c một cách hợp lý: hình đáy biể
n với mặt cắt theo Dean
axis equal tight;
xlabel('x(m)'); ylabel('y(m)');

Ta cũ ng có thểbiể n đị
u diễ a hình dưới dạ
ng không gian (3 chiề
u) sửdụ ng lệnh
surf hoặ c mesh:
figure; surf(x, y, z);
figure; mesh(x, y, z);
Sau đ ó hãy sửdụng công cụxoay hình bằ ng cách ấ
n nút Rotate 3D trên thanh
công cụ( ).

8 Hai lệnh trên có thểđượ c gộ p lại thành mộ t lệ


nh axis equal tight
9 Cách viết này có vẻkhác với câu lệ nh thông thường, tuy nhiên theo MatLab, các lệ nh vẽđ ều có thểviết
dưới dạng hàm. Chẳ ng hạ n, hãy gõ thửlệ nh zzz = plot(t, z). Mặ t khác, có gì khác nếu ta gõ lệ
nh
clabel(contour(x,y,z)); ?

- 57 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

u diễn mặt cắt Dean dưới dạng


Hình 13: Biể
Hình 14: Biểu diễn mặt cắt Dean dưới dạng lưới
mặt 3 chiều
3 chiề
u

7.2. Chỉđị nh các vịtrí trong không gian 2 chiều


Khi thểhiện dữliệ u không gian bằ ng mả ng màu, trong một sốtrường hợp ta phả
i
chỉra những vịtrí thỏa mãn mộ t điều kiệ
n nào đó. Cách đơn giản nhấ
t là đ
ánh dấu
chúng bằng những điể m riêng.

Chẳ ng hạn, hãy chỉra các vịtrí có z < -3


trong ví dụtrên. Có hai bước nhưsau:
 Tìm các chỉ số(i,j) trong ma trậ n có giá
trịthỏa mãn z(i,j) < -3
 Chấ m các điể m xác đ ị
nh bởi x(i,j), y(i,j)
lên mả ng màu

ind = find(z < -3);


hold on;
plot(x(ind), y(ind), ... 'k.');

Hình 15: Đánh dấu trên mảng màu 2 chiều

7.3. Mặt cắt đị a hình


Trong nhiề u trường hợp cần biể
u diễn mộ t mặt cắt đị
a hình từbiểuđ ồhai chiều.
Và tổng quát hơn, có thểlà phân bốđộsâu nước, áp suấ t, độmặn, hay bấ
t kì một
biến đặ n xác đị
c trưng nào dọc theo một tuyế nh trên mặt bằ ng.

Sốliệu của mặt cắ t được lấy từ1 cột (hoặc hàng) từmả ng 2 chiề u tương ứng.
Chẳng hạn, mặ
t cắt có x = 100 m (tương ứng với cộ
t thứ11 (trong số21 cột) trong
n z):
ma trậ

- 58 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

ymc1 = y(11,:);
zmc1 = z(11,:);
plot(ymc1, zmc1, '*-');
xlabel('y (m)'); ylabel('z (m)');

7.4. Trường véctơ


Trong các bài toán kỹthuậ t thủy độ
ng lực thường yêu câu mô phỏng trường dòng
chảy. Biể u diễ n dòng chả
y trong không gian 2 chiề u được hỗtrợrấ t tốt trong
MatLab bằ ng câu lệnh:
quiver(x, y, u, v)

trong đó x, y là hai ma trậ


n chứa tọa độcủ t cảcác điể
a tấ m theo phương ngang
(thường đ ược phát sinh bằ ng lệ
nh meshgrid); u và v là hai ma trậ n chứa thành
phầ n lưu tốc của tất cảcác điểm (u là lưu tốc theo phương x, v là lưu tố
c theo
phương y).

Giảsửtrong thưmụ c hiệ n thời đã có file data_u.txt và data_v.txt, mỗ


i file chứa
một ma trận giá trịu và v. Khi đ ó, hai ma trận này được đọ c nhưsau:
u = dlmread('data_u.txt');
v = dlmread('data_v.txt');

Giảsửu và v đ ã đọ c có kích thướ ng nhau = sốđ


c giố iểm trên trục x × sốđiể
m trên
trục y:
[sizex, sizey] = size(u);

Ta muố n biểu diễ n lên hình với, chẳ


ng hạn, Δx = 10 m và Δy = 5 m:
dx = 10; dy = 5;
[x, y] = meshgrid(0:dx:(sizex – 1)*dx, 0:dy:(sizey -1) * dy);
figure;
quiver(x, y, u, v);
xlabel('X(m)'); ylabel('Y(m)');
axis equal tight;

- 59 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

50

40

30

Y (m) 20

10

0
0 20 40 60 80
X(m)

n trường vec-tơ
Hình 16: Biểu diễ

- 60 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

8. PHẦN BÀI TẬP


Bài tậ
p số1:
Tính toán sóng theo sốliệ
u sau:
o
T = 8 s, H = 2 m, α= 30 .
o o

•G嫕gi trịcho 3 biế


n T, Ho, alpha0.
•T嫕h Co.
•T嫕h L
o
•Mở1 file disperse.m bằ ng cách gõ>> edit disperse
•Với file mới mởhãy gõ vào nội dung sau:function [L] = disperse(h, Lo)
L = Lo;
err = Inf;
while err > 0.1;
Ltry = Lo * tanh(2*pi*h / L);
err = abs(Ltry - L);
L = Ltry;
end;
•Ta đ t lậ
ã thiế p đượ c hàm tính L từcác giá trịh và Lo cho trước

•Hãy thiết lậ
p một vec-tơh chứa độsâu khác nhau: 3 m, 3.2 m, ..., 4 m. Tính L tạ
i
các độsâu cho bởih.
•T嫕h C tương ứ ng với L
•Tính sin_alpha theo công thức
sinα= sinα* C / Co(chú ý đ ơn vịđ
ộ!)
o
•T嫕h alpha (d嫕g lệ
nh asin)

•T嫕h Kr = sqrt(cosα/ cosα


)
o

•T嫕h Ksh theo c嫕g thức Ksh =

•Tính H = Ho × Ksh × Kr

i c嫕gi
•Ghi lạ trịcủa H

- 61 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

t kế
•Viế t quảra file ketqua.txt

Bài tậ
p số2

Quan hệgiữa vận chuyể n bùn cát S và lưu tốc u có quan hệdạ ng: S = aub . Đểxác
đị
nh các hệsốa và b ngườ i ta tiế
n hành thí nghiệm và thu đượ c kết quảsau:
u (m/s) 0.2 0.35 0.57 0.68 0.81 0.96 1.12
S 0.0002 0.0018 0.0159 0.0282 0.0609 0.1258 0.2858
(m3 /s.m)

1) Hãy nhậ p các giá trịu và S vào hai vec-tơ, sau đ


ó tính X và Y là logarit tương
ứng củ a u và S.
2) Vẽđồthịđ iểm của X và Y.
3) Hai hệ số a và b đ ược xác đ ịnh bằ ng cách dựa vào quan hệ :
log S = log a + b log u, hay Y = b X + log a.

Sửdụng hàm polyval đểtính b và log a trong phương trình trên nhưsau:
p = polyval(X, Y, 1)

Phần tửđ ầu củ
a vec-tơp chính là b; phầ
n tửthứ2 của p bằ
ng log a.
Hãy tính a.

4) Vẽđ
ồthịđ
ường thẳ
ng: Y = b X + log a lên cùng hệtrục với các đ
iểm chấ
mở
câu 2).

Bài tậ
p số3

1) Một chuỗi sốliệ u đo đạc vận tốc dòng chảyđ ược phát sinh bởi:
t = 0:0.5:48;
N là dãy sốngẫ u nhiên có chiều dài bằng length(t)
u = 0.4 + 0.12 sin(2πt / 24) + 0.05 N

2) Tính ứng suấ t tiế


p tạ
i ven bờ, biế
t
0.5
C = 60 m /s
τ= ρg u 2 / C 2
Thiết lậ
p subplot 3 hàng × 1 cột. Hai vùng trên vẽhai đồthịu ~ t, τ~ t.
2
3) Nếu bờcó thành phầ n đất sét với ứng suấ
t tiế
p tới hạ
nτc = 0.65 N/m , hãy chỉ
ra xem có bao nhiêu thời điể
m xuấ t hiệ
n τ> τc.

- 62 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

4) Công thức xói lởđ


ường bờđược xác đị
nh bởi:

ng cách xói lởE.


Hãy tính khoả

E = 10 (τ– τ
c) nếu τ> τ
c
= 0 trường hợp còn lạ
i

VẽE ~ t lên vùng đ


ồthịdưới cùng tạ
o bởi subplot.

Bài tậ
p số4:
Cho véctơX = [10 20 30] và Y = [10 40 30].
1. Tính diệ n tích tam giác tạ o bởi 3 đỉ nh có tọa đ ộ X(1)Y(1), X(2)Y(2),
X(3)Y(3).
2. Tổng quát hơn, tính diệ
n tích đa giác n cạ
nh (trên mặ
t phẳ
ng 2 chiều) với tọa độ
xi và yi của đỉ
nh thứi cho bởi phầ n tửthứi của véctơX và Y tương ứng (do đ óX
và Y là 2 véctơcó cùng chiề u dài = n).

LỜI GIẢI

Bài tậ
p số1:
Hướng dẫ n: tạ
o một script file có tên baitap1.m, soạn thả
o nội dung dư
ới đây, và
i. Sau đó chạ
ghi lạ y file này, ta sẽthu được kế t quả.

% baitap1
% Inputs: T, H0, alpha0
% Outputs: C0, L0, L
%-------------------------------------------------------------
clear all;

g=9.81;
T=8;
H0=2;
alpha0=30;
%-------------------------------------------------------------

L0=g*T^2/(2*pi)
C0 = L0/T;
h=[3:0.2:4]

% n=length(h);
% for i = 1:n

- 63 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

% L(i)=disperse(h(i), L0);
% end;

L = disperse(h,L0); % Wave length

C=L/T % Wave celerity


sin_alpha=sin(alpha0)/C0*C
alpha = asin(sin_alpha) % arcsin
Kr=sqrt(cos(alpha0)./cos(alpha)) % Refraction coefficient
k=2*pi./L % Wave number
Ksh=sqrt(1./tanh(k.*h)/(1+2*k.*h/sinh(2*k.*h))) % Shoaling coefficient
H=H0*Ksh.*Kr % Wave height

Bài tậ
p số2:
Hướng dẫ n: tạ
o một script file có tên baitap2.m, soạn thả
o nội dung dư
ới đây, và
i. Sau đó chạ
ghi lạ y file này, ta sẽthu được kế t quả.

(Bài này làm theo các bước nhưtrên lớp: tính log(u), log(S), vẽlên trục tọa độ
thường (không vẽlên trục loga vì ởđ
ây ta đã tính giá trịcủa loga rồ
i), và xác đ
ịnh
các hệsốa, b củ a đường thẳng mộtcách gầ nđ úng trên đồthị ).

Bài tậ
p số3:
Hướng dẫ n: tạ
o một script file có tên baitap3.m, soạn thả
o nội dung dư
ới đây, và
i. Sau đó chạ
ghi lạ y file này, ta sẽthu được kế t quả.

clear all;
t=0:0.5:48
N=rand(1,length(t));
u=0.4+0.12*sin(2*pi*t/24)+0.05*N
plot(N);
hold on;
plot(u,'+');
C=60;
Rho = 1000;
g=9.81;
To = Rho*g/C^2*u.^2
plot(t,To)
hold on
grid on
Toc = 0.65
10 * (To - Toc) .* (To > Toc) + 0 .* (To <= Toc)

Bài tậ
p số4:
Hướng dẫn: Lầ n lượt thực hiệ n các bước sau:
o một script file có tên baitap4.m, soạ
1. Tạ n thả
o nộ
i dung dưới đ
ây, và ghi lạ
i.

- 64 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

function Sdagiac = dientich(x,y);


% Tinh dien tich da giac

n = length (x);
m = length (y);
if m ~=n
'Error: 2 vecto X va Y can co chieu dai bang nhau!'
else
Sdagiac = 0;
for i = 1:(n-1)
Sdagiac = Sdagiac + 0.5*(y(i)+y(i+1))*(x(i+1)-x(i));
end
Sdagiac = Sdagiac + 0.5*(y(n)+y(1))*(x(1)-x(n));
end
2. Vừ a rồi ta đ o ra mộ
ã tạ t hàm mới trong Matlab, với tên là hàm dientich. Sử
dụng hàm này ta có thểdễdàng tính đ ược diệ n tích đ
a giác nói chung và tam giác
nói riêng bằng cách gọi hàm từcửa sổnhậ p lệ
nh
>> dientich(X,Y) 
Lưu ý rằ ng hàm tính diệ
n tích ngầ mđ ị
nh rằ ng 2 véc tơX, Y ởđây đã chứa sốliệu
cho trước vềtọa độcác đ ỉnh củ ađ a giác theo nhưquy ư ớc. Hơ
n nữa, khi nhậ
p tọa
độta đ ánh sốcác đỉnh từ1 đ ến n theo chiề u kim đồng hồ.

* Đểtính diện tích tam giác S với chiề


u dài 3 cạ
nh cho trước là a, b, c, bạ
n có thể
thửthuật toán khác nhưsau:
S  p ( p a)( p b)( p c )
với p=(a+b+c)/2 là một nửa chu vi.

- 65 -
Bài giảng Tin Ứng dụng 2 – Matlab 7

9. TÀI LIỆU THAM KHẢO:

1. Matlab R14 - Helps & Demos, The Mathworks, Inc., 2004


2. David F. Griffths, An introduction to Matlab, Department of Mathematics-
The University of Dundee – Sweden, 1996
3. John M. Stockie, A Whirlwind Tour of MATLAB for Students of CS 3113,
Department of Mathematics and Statistics, University of New Brunswick -
Canada, 2003
4. Bill Mason, Introduction to Matlab, Northeastern University - College of
Computer and Information Science – USA, 2003.
5. Tobin A. Driscoll, Crash course in MATLAB, Department of Mathematical
Sciences - University of Delaware – USA, 2006
n Hoàng Hả
6. Nguyễ i & Nguyễ n Việ
t Anh, Lập trình Matlab và ứng dụng,
NXB Khoa học và Kỹthuật – Hà Nội, 2005
7. Nguyễn Phùng Quang, Matlab & Simulink dành cho kỹsưđ
iều khiể
n tự
độ
ng, NXB Khoa họ c & Kỹthuậ t – Hà Nội, 2006
n Phương Thả
8. Nguyễ o, Programming in Matlab, handouts, 2007
9. ĐH. Thủy Lợi, Matlab version 7.0 cơbả
n, Khóa tin học nâng cao cho cán
bộgiảng dạy của dựán 95 bộNN&PTNT, handouts, 2007
10. Knight A., Basics of MatLab® and beyond, CRC Press, 2000
11. Timothy A. Davis & Kermit Sigmon, Matlab® Primer, Chapman &
Hall/CRC
12. R. J. Braun, Beginning Matlab Exercises, Department of Mathematical
Sciences – University of Delaware – USA.

- 66 -