Th vi n hàm c a MATLAB bao gồm rất nhiều ch ng trình tính toán con; Các ch ng trình con này giúp ng i s dụng gi i quy t nhiều lo i bài toán khác nhau, đặc bi t là các bài toán về ma tr n
Trang 1CH NG 1
GI I THI U V MATLAB
MATLAB là s n phẩm phần mềm c a công ty MathWorks Inc u điểm nổi b t c a MATLAB là kh nĕng tính toán và biểu di n đồ ho kỹ thu t nhanh chóng, đa d ng và chính xác cao Th vi n hàm c a MATLAB bao gồm rất nhiều ch ng trình tính toán con; Các ch ng trình con này giúp ng i s dụng gi i quy t nhiều lo i bài toán khác nhau, đặc
bi t là các bài toán về ma tr n, s ph c, h ph ng trình tuy n tính cũng nh phi tuy n MATLAB cũng cho phép x lý d li u và biểu di n đồ ho trong không gian 2D và 3D với nhiều d ng đồ thị thích hợp, giúp ng i s dụng có thể trình bày k t qu tính toán một cách
tr c quan và thuy t phục h n Thêm vào đó, các phiên b n MATLAB ngày càng phát triển nhiều module phần mềm bổ sung, gọi là các Toolbox (bộ công cụ) với ph m vi ch c nĕng chuyên dụng cho t ng chuyên ngành cụ thể
Tài li u này giới thi u cách s dụng MATLAB phần cĕn b n và ng dụng các bộ công
cụ Control system toolbox và SIMULINK để mô ph ng, phân tích động học các h th ng điều khiển Các ví dụ và hình minh ho trong tài li u đ ợc th c hi n với phiên b n
MATLAB 7 Release 14
1.1 KH I Đ NG
• Nhắp đúp chuột vào biểu t ợng MATLAB trên màn hình Desktop; hoặc :
• Chọn Start > Programs > MATLAB 7.0 > MATLAB 7.0
Trang 2C a sổ l nh Command Window : Đây là c a sổ chính c a MATLAB T i đây ta
th c hi n toàn bộ vi c nh p l nh và nh n k t qu tính toán Dấu >> là dấu đợi l nh Sau khi nh p l nh và k t thúc bằng động tác nhấn phím ENTER, MATLAB s x lý l nh và
xuất k t qu liền ngay d ới dòng l nh Ví dụ :
>> a=5*2+6 (nh p l nh và nhấn Enter )
16
C a sổ Command History : Tất c các l nh đã s dụng trong Command Window
đ ợc l u gi và hiển thị t i đây Có thể lặp l i l nh cũ bằng cách nhắp đúp chuột vào l nh
đó Cũng có thể cắt dán, sao chép, xoá c nhóm l nh hoặc t ng l nh riêng r
C a sổ Workspace Browser : Khái ni m Workspace (không gian làm vi c) là một
vùng nhớ động trong bộ nhớ c a ch ng trình, t động hình thành khi MATLAB đ ợc kh i động và t động xóa khi thoát MATLAB Workspace l u gi các bi n khi ta s dụng MATLAB Tất c các bi n tồn t i trong Workspace đều đ ợc hiển thị t i c a sổ Workspace Browser với các thông tin về tên bi n, giá trị, kích cỡ Byte và lo i d li u
C a sổ th mục hi n hành Current Directory : Đ ợc hiển thị khi nhắp chuột vào ô Current Directory Nh c a sổ này ng i s dụng có thể nhanh chóng nh n bi t các th
mục con và các t p tin (file) đang có trong th mục hi n hành Các thao tác m file, l u file, tìm M-file để th c thi có m c u tiên cao nhất cho th mục hi n hành Mặc định khi
kh i động MATLAB thì th mục hi n hành là ' \Th mục cài đặt MATLAB\work'
Tên th mục hi n hành cũng đ ợc chỉ rõ trên thanh toolbar (vị trí )
Trên đây chỉ là một cách hiển thị tổ hợp các c a sổ trong màn hình MATLAB Tùy theo thói quen và nhu cầu s dụng, ng i dùng có thể thay đổi linh ho t cách hiển thị thông
qua menu Desktop > Desktop layout > (Với các phiên b n tr ớc nh MATLAB 6 R12
và MATLAB 6.5 R13 chọn menu View > Deskstop Layout >…)
1.3 TI N ÍCH TR Ợ GIÚP
Ti n ích trợ giúp (Help) c a MATLAB rất phong phú Có thể gọi t menu help trên
thanh menu hoặc nh p l nh t i Command window theo cú pháp:
help tênl nh % xem trợ giúp t i command window
doc tênl nh % xem tr ợ giúp trong c a sổ Help
Th c hi n một trong các cách sau đây :
• Nhắp chuột vào nút U góc trên, ph i c a màn hình MATLAB
• Chọn menu File > Exit MATLAB
Trang 31.5 TÍNH TOÁN T I COMMAND WINDOW
Với các bài toán đ n gi n, chỉ cần dùng ít câu l nh MATLAB, chúng ta th ng gi i
S dụng dấu = ta có thể khai báo một bi n, đồng th i gán giá trị cho bi n đó Các bi n
đ ợc phân bi t với nhau b i tên bi n
Tên bi n hợp l : a; b; A; A1; A2; chieu_cao; TT; TT_1; TT_2
Tên bi n không hợp l : 1B; 2B; G(s); G'; G*, chieu cao; chieu-cao
Các tên bi n sau đây là khác nhau: S; s ; the_tich; The_tich; THE_TICH
Trang 4M t s l u ý khi nh p l nh:
- Bình th ng MATLAB luôn hiển thị k t qu c a câu l nh trên màn hình N u mu n MATLAB không hiển thị k t qu thì cu i câu l nh ta đặt thêm dấu chấm phẩy (;)
- Nhiều câu l nh có thể đặt chung trên một dòng nh ng bắt buộc ph i phân cách nhau
b i dấu phẩy (,) hoặc chấm phẩy (;) Không cho phép phân cách các l nh bằng kho ng tr ng N u cu i l nh nào có dấu phẩy thì MATLAB hiển thị k t qu , còn
dấu chấm phẩy thì không hiển thị k t qu
ví dụ trên, n u nh p l nh :
>> S=a*b; V=S*h thì MATLAB chỉ hiển thị giá trị c a V, không hiển thị giá trị c a S
- Các phím mũi tên ↑ ↓ ← → trên bàn phím rất h u ích khi nh p l nh Để gọi l i l nh
v a gõ, b n có thể nhấn phím mũi tê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 ↓ có tác dụng ng ợc với ↑ 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, giúp
b n d dàng chỉnh s a nội dung dòng l nh
Xem n i dung c a Workspace:
Cách 1: Vào c a sổ Workspace Browser xem danh sách li t kê
Cách 2: Dùng l nh who ho ặc whos
>> who % li t kê tên các bi n đang có trong Workspace ra màn hình Command Your variables are:
S V a ans b h
>> whos % li t kê c tên bi n và các thông tin liên quan
Name Size Bytes Class
Grand total is 6 elements using 48 bytes
L u n i dung c a Workspace thành t p tin d li u :
- Cách 1: Vào menu File > Save Workspace As > chọn th mục khác (n u cần) >
nh p tên t p tin > ấn nút Save T p tin d li u có tên tổng quát là *.mat
- Cách 2: Nh p l nh >>save ' đường dẫn\ tênfile.mat '
Ví dụ: >>save ' C:\ MATLAB 7\ Work \ mydata1.mat '
N u b n không nh p đ ng d n thì mặc định là l u vào th mục hi n hành
T ải n i dung c a m t t p tin d li u vào l i Workspace :
- Cách 1: Vào menu File > Import Data > MATLAB Data File (*.mat) > chọn tên t p
tin > ấn nút Open
- Cách 2: Nh p l nh >>load ' đường dẫn\ tênfile.mat '
- Cách 3: Vào c a sổ Current Directory, nhắp đúp chuột vào tên t p tin cần m
Trang 5Thao tác trên các bi n có trong Workspace :
• Xem l i giá trị c a bi n: Gõ tên bi n t i dấu nhắc l nh
>>V=S*h V=60
• Xoá s ch nội dung đang có trên màn hình Command window (nh ng không xoá
bi n) và đ a con tr về đầu màn hình :
>> clc
• Xoá một s bi n :
>> clear tênbi n_1 tênbi n_2 tênbi n_n
% chú ý là tr ng hợp này, gi a các tên bi n có kho ng tr ng
Ví dụ, để xoá hai bi n S và V ta gõ l nh :
>> clear S V
• Xoá h t mọi bi n trong Workspace :
>> clear Các thao tác xem nội dung, xoá, l u, đổi tên, chỉnh s a giá trị (edit value) c a bi n
cũng có thể th c hi n t i c a sổ Workspace Browser
Thao tác trên th m c:
• Xem đ ng d n và tên th mục hi n hành: >> cd
Khi mới kh i động MATLAB7, th mục hi n hành mặc định là 'C:\MATLAB7\work'
• T o th mục mới : >> mkdir('đ ng d n', 'tên th m c m i')
Ví dụ: >> mkdir('C:\matlab7\work','Nguyen Van A')
N u b n không nh p đ ng d n thì mặc định là l u vào th mục hi n hành
L ưu ý: tên th mục cho phép có kho ng tr ng gi a các t , nh ng tên bi n và tên file
thì không đ ợc phép
B n cũng có thể nhắp ph i chuột trong c a sổ Current Directory, chọn new > folder
> nh p (gõ) tên th mục mu n t o mới > nhấn Enter
Trang 6CH NG 2
M-FILE
Trong MATLAB, M-file là các file ch ng trình đ ợc so n th o và l u d ng vĕn
b n Cĩ hai lo i M-file là Script file (file l nh) và Function file (file hàm) C hai đều cĩ
phần tên m rộng là ".m " MATLAB cĩ rất nhiều M-file chuẩn đ ợc xây d ng sẵn Ng i
dùng cũng cĩ thể t o các M-file mới tuỳ theo nhu cầu s dụng
2.1 L P TRÌNH D NG SCRIPT FILE
Thay vì nh p và th c thi t ng câu l nh t i c a sổ Command window, b n cĩ thể so n
và l u tất c các câu l nh cần thi t để gi i bài tốn vào một Script file Sau đĩ b n chỉ cần
gõ tên file để th c thi tồn bộ ch ng trình
1) M c a sổ Editor :
Cách 1: Trong command window gõ l nh edit
Cách 2: Vào menu File >New >M-File
Cách 3: Nhắp chuột vào icon (icon đầu tiên trên thanh toolbar)
THEO TRÌNH T THU T TỐN
CH NG TRÌNH DÙNG LÀM GÌ, AI VI T, ĐÂU,
KHI NÀO ?
vù ng soạn thả o
Trang 7• Ký hi u % có thể dùng bất c chỗ nào trong ch ng trình để t o câu ghi chú, gi i thích Các câu ghi chú đặt phía trên dòng l nh đầu tiên s hi n trên màn hình khi
Nhap chieu dai a:
sau đó ch ng i dùng nh p một giá trị s t bàn phím, nh n giá trị v a nh p và gán vào bi n a
Ví d 1: So n th o t p tin vd1.m v ới nội dung nh sau :
3) L u: Vào menu File > Save > đặt tên t p tin > nhắp nút save
T p tin Scrift file có phần m rộng là ".m", và đ ợc l u vào th mục hi n hành
N u không có s l a chọn khác thì th mục hi n hành đ ợc mặc định là th mục
work c a MATLAB Tên t ập tin phải bắt dầu bằng ký tự chữ, không có khoảng
tr ống giữa các ký tự (gi ng nh quy định về tên bi n) L u ý kiểm tra và tắt các
phần mềm gõ ti ng Vi t nh Vietkey, Unikey,…n u cần
4) Gọi th c hi n SCRIPT FILE:
Cách 1: Trong c a sổ so n th o nhắp chuột vào nút run trên thanh toolbar
Cách 2: Tr về màn hình Command window và gõ tên file (không có phần m rộng
.m), sau đó nhấn Enter để thực thi
Ví dụ để th c thi file "vd1.m " v a t o, t i dấu nhắc l nh ta gõ : >> vd1
L u ý là dù gọi th c hi n theo cách 1 hay cách 2 thì MATLAB cũng đều xuất
k t qu tính toán t i c a sổ Command Window
5) M một M-file đang có để xem l i hay chỉnh s a:
Cách 1: Trong c a sổ Editor hoặc Command window, vào menu File >open >… Cách 2: Vào c a sổ Workspace, nhắp đúp chuột vào tên M-file cần m
Cách 3: T i Command window, gõ l nh edit (' đ ng d n\tên file')
% Chuong trinh tinh the tich hinh hop
% DHSPKT, 10/2004
% Nguoi viet: Nguyen Van A
% -
a = input('Nhap chieu dai a:');
b = input('Nhap chieu rong b:');
h = input('Nhap chieu cao h:');
S=a*b; % Dien tich day
Trang 82.2 L P TRÌNH D NG FUNCTION FILE
T ng t nh trong toán học, các hàm (function) trong MATLAB s nh n vào giá
trị c a các đ i s và tr về giá trị t ng ng c a hàm Trình t t o và th c thi một file hàm bao gồm các b ớc nh sau:
1) M c a sổ Editor : th c hi n t ng t nh Scrift file
• Tham s ra (cũng gọi là tham bi n) dùng để ch a các k t qu x lý c a hàm
Khi gọi th c hi n hàm ta có thể thay chúng bằng các tên bi n cụ thể
• Tham s vào (cũng gọi là tham trị, hay đ i s ) là các bi n trong hàm mà s
nh n các giá trị vào cụ thể khi gọi th c hi n hàm
Tên các tham s vào, ra trong phần danh sách đ ợc phân cách nhau bằng dấu
phẩy N u chỉ có 1 tham s ra thì không cần dùng dấu ngoặc vuông [ ]
3) L u: nh cách l u c a Scrift file Khi l u hàm, MATLAB s lấy tên hàm làm tên file, ng i l p trình không nên s ửa lại tên này để tránh l n lộn khi gọi th c
hi n hàm
4) Gọi th c hi n Function file: t c a sổ Command th c hi n nh sau:
N u chỉ có một tham s ra:
>> tênbi n = tênfile (danh sách các giá trị vào)
N u có nhiều tham s ra:
>> [tênbi n1, tênbi n2, ] = tênfile (danh sách các giá trị vào)
Ví d 2: T o t p tin tt_hinhhop.m
function V = tt_hinhhop(a,b,h)
% chuong trinh tinh the tich hinh hop
% khi biet cac canh a(dai),b(rong),h(cao)
S=a*b;
V=S*h;
Th c thi trong Command window :
>> TT=tt_hinhhop(5,2,4) % tham bi n V có thể đổi tên tuỳ ý, ví dụ đổi là TT
TT = 40
Trang 9Chú ý:
- Khi b n gõ l nh help tênfilehàm thì các câu ghi chú phía trên dòng khai báo
function hoặc d ới dòng function nh ng tr ớc dòng l nh đầu tiên trong file hàm s
đ ợc hi n trên màn hình
- Khi gọi th c thi một file hàm ta dùng tên file, không phải tên hàm Do đó n u ví
dụ 2 ta đặt tên file là "vd2.m" thì khi th c thi ph i dùng l nh:
>> TT=vd2(5,2,4)
Ví d 3: T o file hàm dttt_hinhhop.m v ới 2 tham s ra
% CTr tinh dien tich day va the tich hinh hop
% khi biet cac canh a(dai),b(rong),h(cao)
function [S,V] = dttt_hinhhop(a,b,h)
S=a*b; % dien tich day
V=S*h; % the tich
Th c thi trong Command window :
>> [DT,TT] = dttt_hinhhop(5,2,4) % Các tham bi n S,V có thể đổi tên tuỳ ý
% chương trình đổi độ sang radian
function rad = change(do)
Trang 10Đ c đi m c a hàm :
Các hàm chỉ thông tin với MATLAB thông qua các bi n truyền vào cho nó và các
bi n ra mà nó t o thành, các bi n trung gian bên trong hàm thì không t ng tác với môi
tr ng MATLAB
Khi MATLAB th c hi n lần đầu các file hàm, nó s m file và dịch các dòng l nh
c a file đó ra một d ng mã l u trong bộ nhớ nhằm mục đích tĕng t c độ th c hi n các l i
gọi hàm ti p theo N u sau đó không có s thay đổi gì trong M file, quá trình dịch s không
x y ra lần th hai N u trong hàm có ch a l i gọi hàm M-file khác thì các hàm đó cũng
đ ợc dịch vào trong bộ nhớ Bằng l nh clear function ta có thể xoá c ỡng b c các hàm đã
dịch, nh ng v n gi nguyên các M-file
Mỗi hàm có không gian làm vi c riêng c a nó (local workspace), tách bi t với môi
tr ng MATLAB (s dụng base workspace), m i quan h duy nhất gi a các bi n trong hàm với môi tr ng bên ngoài là các bi n vào và ra c a hàm đó N u b n thân các bi n c a hàm bị thay đổi thì s thay đổi này chỉ tác động bên trong c a hàm đó và mà không làm nh
h ng đ n các bi n c a môi tr ng MATLAB Các bi n c a hàm s đ ợc gi i phóng ngay sau khi hàm th c thi xong nhi m vụ, vì v y không thể s dụng thông tin c a lần gọi tr ớc cho lần gọi sau
Các hàm có thể s dụng chung các bi n với hàm khác hay với môi tr ng MATLAB n u các bi n đ ợc khai báo là bi n toàn cục Để có thể truy c p đ ợc các bi n bên trong một hàm thì các bi n đó ph i đ ợc khai báo là bi n toàn cục trong mỗi hàm s
dụng nó
Một M-file có thể ch a nhiều hàm Hàm chính (main function) trong M-file này
ph i đ ợc đặt tên trùng với tên c a M-file Các hàm khác đ ợc khai báo thông qua câu l nh
function đ ợc vi t sau hàm đầu tiên Các hàm con (local function) chỉ đ ợc s dụng b i hàm chính, t c là ngoài hàm chính ra thì không có hàm nào khác có thể gọi đ ợc chúng Tính nĕng này cung cấp một gi i pháp h u hi u để gi i quy t t ng phần c a hàm chính một cách riêng r , t o thu n lợi cho vi c l p một file hàm duy nhất để gi i bài toán ph c t p
Ví d 5 : T o file hàm tinh_gia_tien.m có nội dung sau
function gia = tinh_gia_tien(L,d)
% CTr tinh gia tien khoi thep hinh tru
% khi biet chieu dai L (mm),duong kinh d (mm)
Trang 112.3 Bi n c c b và bi n toàn c c
a) Bi n c c b
Bi n cục bộ chỉ có ph m vi s dụng trong một hàm Các bi n cục bộ không l u gi
trong Workspace T i Command window ta không thể truy c p đ ợc các bi n cục bộ Các
bi n trong các file hàm đều là bi n cục bộ, tr phi có s ch động khai báo khác đi
Ví dụ: các bi n a, b, h, S,V trong file hàm tt_hinhhop.m là các bi n cục bộ
b) Bi n toàn c c
Bi n toàn cục có ph m vi s dụng trong nhiều hàm hoặc nhiều M-file Các bi n toàn
cục đ ợc l u gi trong Workspace c a MATLAB và hiển thị t i c a sổ Workspace
browser T i Command window ta chỉ có thể truy c p đ ợc các bi n toàn cục
Ví dụ: Các bi n trong các Script-file là các bi n toàn cục
Các bi n t o tr c ti p t i Command window là các bi n toàn cục
Để các bi n trong Script-file tr thành bi n cục bộ, ta có thể chuyển một Script-file thành m ột Function-file đ n gi n không có các tham s vào, ra Ví dụ, t Scrift-file vd1.m
ta t o file hàm vd1B.m có nội dung nh sau:
function vd1B()
a = input('Nhap chieu dai a:');
b = input('Nhap chieu rong b:');
h = input('Nhap chieu cao h:');
S=a*b % dien tich day
V=S*h % the tich
Khi gọi th c hi n bằng l nh >>vd1B hoặc >>vd1B( ), ta v n có các k t qu t ng t
>>vd1, chỉ khác là các bi n a, b, h, S, V bây gi là bi n cục bộ nên không còn truy c p
đ ợc t c a sổ Command window Sau khi hàm th c thi xong, n u gõ l nh:
>> a
B n s nh n đ ợc dòng thông báo sau :
??? Undefined function or variable 'a '
% hàm hoặc bi n 'a' ch a đ ợc định nghĩa
Trang 12CH NG 3
CÁC KI U D LI U VÀ PHÉP TÍNH
MATLAB có kh nĕng tính toán trên mọi kiểu d li u s và ch D li u s có thể
là s th c, s ph c, vect , ma tr n D li u ch có thể là chuỗi ký t , biểu th c logic, biểu
Trang 13Ví d 2 Gi i ph ng trình b c hai ax2 + bx + c = 0 ; với a = 1; b = - 5 ; c = 2
Ta bi t các nghi m c a ph ng trình b c hai có d ng :
2 1,2
4.5616
>> x2 = (- b - delta^(1/2))/(2*a) x2 =
hay 2.2251e-308 + realmax: s chấm động d ng lớn nhất, ≈ 21023
hay 1.7977e+308 + Inf hay inf : s vô cùng (Infinity), với Inf = +∞ ; -Inf = -∞
+ NaN hay nan : (Not-a-number) không ph i là s , ví dụ k t qu phép chia 0/0 + eps : độ chính xác t ng đ i c a s có chấm động, bằng 2-52
hay 2.2204e-016
3) Đ nh d ng s
Khi hiển thị k t qu tính toán ra màn hình, MATLAB dùng định d ng s mặc định là
format short Tùy theo yêu cầu ta có thể định d ng l i các con s khi hiển thị Vi c định
d ng này không nh h ng đ n độ chính xác tính toán vì MATLAB v n l u gi các bi n trong bộ nhớ với giá trị th c s c a nó
L nh s d ng D ng hi n th Ví d : hi n th s π: >> pi
format bank 2 ch s th p phân 3.14
format 4 ch s th p phân 3.1416
format short 4 ch s th p phân 3.1416
format short e 4 ch s th p phân
với dấu chấm động 3.1416e+00 (= 3.1416*10^0) format long 14 ch s th p phân 3.14159265358979
Để đọc gi i thích chi ti t về l nh format, b n gõ l nh: help format
Trang 144) M t s hàm toán c b ản :
Khi s dụng các hàm này, đ i s x là s th c, ph c, vect , hay ma tr n đều đ ợc
sqrt(x) Cĕn b c hai c a x, t ng đ ng l nh x^(1/2) exp(x) Hàm mũ c s e c a x (= e x
)
Ví d ụ: exp(0)= e0
=1; exp(1)= e1 =2.7182 log(x) Logarit c s e c a x (= lnx)
abs(x) - Tìm giá trị tuy t đ i c a x n u x là s th c
- Tìm môđun c a x n u x là s ph c round(x) Làm tròn x tới s nguyên gần nhất
rem(x,y) Tìm phần d c a x /y , có dấu lấy theo x
mod(x,y) Tìm phần d c a x /y, có dấu lấy theo y
sign(x) Hàm lấy dấu c a x (hàm signum); tr về 1 n u
x>0; tr về -1 n u x<0; tr về 0 n u x=0
Ví d ụ: sign(5)=1; sign (-5)=-1; sign(0)=0
sin(x) sin c a x, với x là radian
cos(x) cos c a x, với x là radian
tan(x) tang c a x, với x là radian
asin(x) arcsin c a x, với x là radian
acos(x) arccos c a x, với x là radian
atan(x) arctg c a x, với x là radian
sinc(x) = (sin(πx)) /πx n u x ≠0
= 1 n u x=0 sind(x); cosd(x); tand(x) sin; cos; tang c a x, với x là độ
asind(x); acosd(x); atand(x) arcsin; arccos; arctg c a x, với x là độ
sinh(x) sinhyperbol c a x ; sinh(x) = (ex - e-x)/2
cosh(x)
coshyperpol c a x ; cosh(x) = (ex + e-x)/2
⇒ cosh(x) + sinh(x) = ex cosh(x) - sinh(x) = e-x tanh(x) tanhyperpol(x) ; tanh(x) = sinh(x) / cosh(x)
MATLAB có rất nhiều hàm toán học đ ợc xây d ng sẵn Để tìm hiểu kỹ h n, b n
có thể gõ l nh help elfun, help elmat, help specfun hoặc help datafun
Trang 15• Trong Matlab các ký t i và j dùng để ký hi u toán t o
N u i hoặc j đã đ ợc s dụng cho các giá trị khác thì ta ph i định nghĩa l i nh sau: i=sqrt(-1) hoặc j = sqrt(-1)
Ví d : >> z = 3 - 5i % hoặc >> z = 3 - i*5
3.0000 - 5.0000i
>> z=5*exp(4i) % t c là z=5e4i z=
>> z2=modul*exp(theta*i) % th l i, n u tính đúng thì s có z2=z1 z2= 2.0000 + 3.0000i
Trang 163.3 CHU I
Trong MATLAB, chuỗi là dãy ký t đặt trong cặp dấu nháy đ n ' '
Mỗi ký t c a chuỗi chi m 2 byte trong bộ nhớ
>>s = '46' % s là bi n chuỗi, ch a 2 ký t 4 và 6, chi m 4 byte
>>str = 'the tich hinh hop' % str là bi n chuỗi, ch a 17 phần t , chi m 34 byte
>>a=46 % a là bi n s th c, chi m 8 byte bộ nhớ
>>c=46+32i % c là bi n s ph c, chi m 16 byte bộ nhớ
Các hàm x lý chu i thông d ng :
ischar(s); isstr(s) Hàm tr về 1 (True) n u s là chuỗi
strcat (s1, s2, ) N i các chuỗi thành hàng, t động ngắt bớt kho ng
tr ng cu i chuỗi n u có
strvcat (s1,s2, ) Ghép các chuỗi thành cột (ma tr n ký t ), t động
thêm kho ng tr ng, b qua chuỗi rỗng str2mat (s1,s2, ) Ghép các chuỗi thành cột (ma tr n ký t ), t động
thêm kho ng tr ng, chuỗi rỗng cũng tính là 1 cột disp(s) Hiển thị nội dung c a bi n s ra màn hình
fprintf Đ a d li u có định d ng ra file hoặc màn hình
strcmp(s1,s2) So sánh hai chuỗi, true n u s1 gi ng s2
strncmp(s1,s2,N) True n u N ký t đầu c a s1, s2 gi ng nhau
eval('chuỗi') X lý chuỗi nh một l nh MATLAB
ng d ng:
Ghép m ảng chu i v i s và hi n th k t quả :
>> a= 12;
>> str=['Gia tri cua a la: ', num2str(a)] ;
>> disp(str) % hi n nội dung, không cho hi n tên bi n
Trang 17Chao cac ban
Chung ta bat dau nhe !
L u ý :
H K t qu l nh strvcat ('Hello','Yes') t ng t nh ['Hello';'Yes ']
% strvcat t động thêm hai kho ng tr ng sau chuỗi Yes để ghép hợp l , t c là hai
hàng ph i có s phần t (s ký t ) bằng nhau là 5
H K t qu l nh strvcat('Hello','','Yes') khác với str2mat ('Hello', '','Yes')
% ví dụ này strvcat t o 2 hàng vì b qua chuổi rỗng'', còn str2mat t o 3 hàng
H K t qu l nh strcat('Chao ','Ban') khác với ['Chao ', 'Ban']
% strcat t o k t qu ChaoBan, các kho ng tr ng sau t Chao bị b qua
Ví d : So n th o t p tin: tthinhtru.m
% Chuong trinh tinh the tich hinh tru
% khi biet ban kinh R ,chieu cao h
function V = tthinhtru(R,h)
S=pi*R^2;
V=S*h;
disp (['Ban kinh R = ',num2str(R)])
disp (['Chieu cao h = ',num2str(h)])
disp ('The tich :') %fprintf('The tich :\n')
Th c thi t i Command window :
Trang 183.4 VÉCT
Trong MATLAB, các thu t ng véct và m ảng đ ợc dùng không phân bi t
• Để khai báo một véct c t (m ng cột) ta nh p các phần t nằm trong dấu ngoặc vuông
[ ], phân cách nhau b i dấu chấm phẩy
• Để khai báo một véct hàng (m ng hàng) ta nh p các phần t nằm trong dấu ngoặc
vuông [ ], phân cách nhau b i kho ng trắng hoặc dấu phẩy
c a tổng bình ph ng các phần t c a a)
prod(a) Tích các phần t
Trang 19min(a) Phần t bé nhất c a vect a max(a) Phần t lớn nhất c a vect a mean(a) Trung bình cộng c a các phần t
Ví d ụ: a) Cho n=50 Tìm tổng n s chẵn đầu tiên
b) Cho n=50 Tìm tổng n s lẻ đầu tiên b) Cho n=5 Tìm n!
Cộng + c=a+2 c= [(a1+2);(a2+2); ; (an+2)]
Tr - c=a-2 c= [(a1-2);(a2-2); ; (an-2)]
Các phép tính gi a hai véc t :
Lũy th a .^ c=a.^b c= [(a1^b1);(a2^b2); ; (an^bn)] Tích có h ớng .* c=a.*b c= [(a1*b1);(a2*b2); ; (an*bn)] Chia ph i ./ c=a./b c= [(a1/b1);(a2/b2); ; (an/bn)] Chia trái .\ c=a.\b c= [(a1\b1);(a2\b2); ; (an\bn)]
Cộng hai vect + c=a+b c= [(a1+b1);(a2+b2); ; (an+bn)]
Tr hai véct - c=a-b c= [(a1-b1);(a2-b2); ; (an-bn)] Chuyển vị (cột thành
hàng hay ng ợc l i) ' a' a=[a1; a2 ; ;an] thì a'=[a1 a2 an]
a=[a1 a2 an] thì a'=[a1; a2 ; ;an] Tích vô h ớng '* c=a'*b c= (a1*b1)+(a2*b2)+ + (an*bn)
Trang 20trong đó : aT là vect chuyển vị c a a,
||a|| và ||b|| là chuẩn Euclid c a a và b
- Biểu di n trong MATLAB:
>> theta = acos(a'*b/(norm(a).*norm(b))) % tính góc gi a hai véct c ột a và b
- Có thể t o một véct hàng có thang chia logarit bằng cách dùng l nh:
logspace(giá tr ị đầu, giá trị cu i, s phần t )
Đ i với hàm logspace, giá trị đầu và giá trị cu i đ ợc nh p b i s mũ th p phân, ví dụ: thay vì nh p 100 (10^2) ta chỉ cần nh p 2 N u ta không nh p s phần t thì mặc định là 50
Trang 21• Các phép tính cộng, tr , nhân, luỹ th a, chia ph i, chia trái gi a ma tr n và một s vô
h ớng có thể th c hi n với mọi ma tr n Cú pháp t ng t nh vect với s vô h ớng,
ví dụ: A+2; A-2; A.*2; A.^2; A./2 ; A.\2; Các phép tính này s đ ợc th c hi n cho t ng
s h ng c a ma tr n đây có hai tr ng hợp cần l u ý là A.*2 = A*2 và A./2 = A/2
• Các phép tính gi a hai ma tr n nh cộng, tr , chấm nhân, chấm chia chỉ th c hi n đ ợc
với các ma tr n có cùng kích th ớc (cùng s hàng và s cột) Cụ thể là:
- Phép tính A+B ho ặc A-B th c hi n cộng hoặc tr t ng ng t ng s h ng
- Phép chấm nhân A *B th c hi n nhân t ng ng t ng s h ng
- Phép chấm chia A./B hoặc A.\B th c hi n chia ph i hoặc trái t ng ng t ng s h ng
• Phép nhân A*B đ ợc hiểu là phép nhân ma tr n nh trong toán học, chỉ th c hi n đ ợc
ma tr n A vuông hay không vuông, còn inv(A)*B chỉ dùng đ ợc khi A vuông
• Phép luỹ th a A.^2 (có dấu chấm) th c hi n luỹ th a t ng s h ng t ng ng, có thể
th c hi n với ma tr n A bất kỳ Còn phép luỹ th a A^2 tương đương với A*A , chỉ có
nghĩa khi A là ma tr n vuông
Trang 22Ví d 2: Kiểm ch ng các phép tính trên ma tr n
>> syms a1 a2 a3 a4 b1 b2 b3 b4; % hàm syms để khai báo các bi n ch
>> A=[a1 a2; a3 a4] , B=[b1 b2; b3 b4]
Trang 23(a) T o vect a ch a các phần t hàng hai c a ma tr n X
(b) T o vect b ch a hai phần t cu i hàng hai c a ma tr n X
Trang 24c a ma tr n A det(A) Tính định th c c a ma tr n vuông A
poly(A) Tìm đa th c đặc tr ng c a ma tr n vuông A
eig(A) Tìm giá trị riêng c a ma tr n vuông A
diag(A) Lấy đ ng chéo chính c a ma tr n A
tril(A) Lấy các phần t t đ ng chéo chính tr xu ng
triu(A) Lấy các phần t t đ ng chéo chính tr lên
Trang 25Ví d 5 Tìm giá tr riêng và vect riêng c a ma tr n
N u ma tr n A là ma tr n vuông cấp n thì có n s λ tho mãn Ax = λx Giá trị λ gọi
là giá trị riêng và vect cột x gọi là vect riêng c a ma tr n A T ng ng với mỗi giá trị riêng λ là một vect riêng x
Trong Matlab, các giá trị riêng có thể tìm bằng cách dùng l nh eig(A) Để tìm đồng
th i c giá trị riêng và véct riêng c a A có thể dùng l nh [X,D]=eig(A) Các phần t trên
đ ng chéo chính c a ma tr n chéo D là các λ, còn các cột c a ma tr n X là các véct riêng làm tho mãn AX=XD
Trang 26(không ph i h Cramer) thì ma tr n A không vuông nên không dùng đ ợc hàm inv(A) B t
bu c ph ải dùng phép chia trái x=A\b
Trang 27Trong MATLAB, đa th c đ ợc biểu di n nh một vect hàng với các phần t là các
h s c a đa th c sắp theo th t gi m dần t b c cao nhất đ n b c 0
[k,d]=deconv (p1,p2) Chia hai đa th c ( k= k t qu ; d =phần d )
k=polyder(p) Tìm đ o hàm c a đa th c p
k=polyder(p,q) Tìm đ o hàm c a đa th c tích (p*q)
[n,d]=polyder(num,den) Tìm đ o hàm (d ng n/d) c a phân th c (num/den)
p=poly(r) L p đa th c p t vect r ch a các nghi m
polyval(p,x) Tính giá trị c a đa th c t i x (x có thể là m ng)
Trang 28K t qu trên t ng ng với đa th c : x5
Trang 29Tr ng hợp này Y(s) có c c bội p(1) = p(2) = -1
(nói cách khác là m u s c a Y(s) có nghi m bội p(1) = p(2) = -1 )
(s p )(s p )(s p ) (s 6)(s 4)(s 2)
Trang 30CH NG 4
4.1 Bi u th c logic
Biểu th c logic th ng đ ợc s dụng để biểu di n đi u ki n trong các vòng lặp hay
trong các câu l nh điều ki n Các biểu th c logic trong MATLAB đ ợc thành l p trên c s các toán t quan h và toán t logic Toán t quan h là các ký hi u thể hi n s so sánh, toán t logic là các ký hi u dùng để liên k t các biểu th c logic
12.5>12 là biểu th c logic, có giá trị là 1
6~=6 là biểu th c logic, có giá trị là 0
ischar(s) True n u s là chuỗi ký t
isstr(s) True n u s là chuỗi ký t
isnumeric(x) True n u x là s (con s , m ng s , )
isempty(x) True n u x (chuỗi, m ng, ma tr n, ) là rỗng
strcmp(s1,s2) True n u 2 chuỗi s1, s2 gi ng nhau
isglobal(x) True n u x là bi n toàn cục
Trang 31Ví d : Vi t ch ng trình yêu cầu ng i dùng nh p vào t bàn phím điểm s c a
một học sinh N u điểm s t 1 đ n 4 thì xuất ra dòng nhắn "lo i y u", n u điểm s là 5
hoặc 6 thì xuất ra dòng nhắn "lo i trung bình", n u điểm s là 7 hoặc 8 thì xuất dòng nhắn
"lo i khá", n u điểm s là 9 hoặc 10 thì xuất dòng nhắn "lo i gi i" N u điểm s nằm ngoài
ph m vi t 1 đ n 10 thì xuất dòng nhắn "S li u không hợp l "
diem= input('Nhap diem so: ');
if (diem>=1)&(diem<=4) fprintf('loai yeu') elseif (diem==5)|(diem==6) fprintf('loai trung binh') elseif (diem==7)|(diem==8)
fprintf('loai kha') elseif (diem==9)|(diem==10) fprintf('loai gioi') else
fprintf('So lieu khong hop le') end
Trang 32Điều ki n trong cấu trúc switch-case ph i có giá trị d ng s nguyên hoặc d ng
chuỗi l nh case s so sánh giá trị c a điều ki n với các giá trị th để th c hi n kh i l nh
t ng ng N u không có giá trị th nào phù hợp thì th c hi n kh i l nh 3
disp('ch ương trình tính tổng giai thừa 1!+2! +3!+ +n!')
n = input ('Nhap gia tri n:');
Trang 33Khác với vòng lặp for, s lần lặp c a vòng lặp while không đ ợc xác định
Ta xét ví dụ tính tổng n s chẵn phần trên bằng vòng lặp while (thay vì for) :
% chương trình in ra và tính tổng n số chẵn đầu tiên
while i<=n S=S+2*i;
fprintf('%2d la so chan thu:%3d\n',2*i,i) i=i+1;
end disp(['Tong can tim la: ',num2str(S)]);
Ghi chú : Vi c kiểm tra điều ki n nh p n>0 cũng đ ợc th c hi n bằng vòng lặp while để
có thể lặp vô h n lần N u kiểm tra bằng cấu trúc if – end thì chỉ lặp đ ợc 1 lần
Trang 344.4 Các l nh t o s gián đo n
• L nh continue
Trong vòng lặp for hay while, khi gọi continue ngay l p t c chu trình tính
chuyển sang b ớc lặp k ti p, mọi l nh ch a đ ợc th c hi n c a vòng lặp (thuộc về
b ước lặp hiện tại) s bị b qua
• L nh break
L nh break m nh h n l nh continue, nó làm ng ng ngay l p t c vòng lặp đang tính L nh break có tác dụng c trong các cấu trúc điều ki n if, switch N u break đ ợc s dụng ngoài vòng lặp for hay while trong ph m vi c a một M-file, khi
ấy M-file s bị ng ng t i vị trí c a break
Ví d ụ: Vi t đo n ch ng trình tìm và in ra màn hình các s nguyên t bé h n 100
clear, clc disp('================================================') disp('Chuong trinh tim va in ra cac so nguyen to < 100') fprintf('%3d la so nguyen to thu:%3d\n',2,1)
count=1; % bien dung de dem so thu tu for m= 3:1:100
for k=2:1:m-1
if mod(m,k)==0, break, end end
if k == m-1, count=count+1;
fprintf('%3d la so nguyen to thu:%3d\n',m,count) end
end
• L nh return
Vi c thi hành các M-file hàm s k t thúc khi gặp dòng cu i cùng c a file đó
hoặc gặp dòng l nh return L nh return giúp ta k t thúc một hàm mà không cần
else
DET=det(A) end
Trang 35y1= x2+3x + 5 trong kho ng [0,10]
trong đó tham s S là chuỗi ký t tuỳ chọn để khai báo màu v , kiểu nét và/
hoặc ký hi u đánh dấu t i các điểm d li u N u không dùng tham s S thì mặc định
là màu xanh d ng (blue), nét liền (solid), không có ký hi u đánh dấu
- solid x x-mark v triangle (down)
: dotted + plus ^ triangle (up) - dashdot * star < triangle (left)
dashed s square > triangle (right)
point o circle p pentagram
d diamond h hexagram
Trang 365 grid ho ặc grid on % hi n các ô l ới to độ
6 hold ho ặc hold on % gi nguyên đồ thị để v ti p trên cùng h trục to độ
7 legend('chúthích1', 'chúthích2', ) % t o ô chú thích khi v nhiều đồ thị
Để v hai hay nhiều đồ thị trên cùng một h trục to độ ta có thể dùng l nh hold on
nh trên hoặc dùng l nh plot với cú pháp tổng quát :
plot(x1,y1,S1,x2,y2,S2,…) trong đó x1,y1,S1 ng với đồ thị th nhất; x2,y2,S2 ng với đồ thị th hai,…
ví dụ trên, thay vì dùng l nh hold on ta có thể v k t hợp hai đồ thị y1 và y2 bằng
một l nh plot duy nhất nh sau:
>> plot(x,y1,'k',x,y2,'b ')
-1 0 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
Do thi sin(x) va cos(x)
truc x
cos(x)
Trang 375.2 H TR C TO Đ (axis), C A S V (figure), Đ TH CON (subplot)
L nh axis là công cụ dùng để qu n lý hình dáng và thang chia c a c hai trục đ ng
và ngang L nh này có nhiều tuỳ chọn, để bi t một cách đầy đ về nó, b n có thể gõ l nh
help axis hay doc axis Một s cách th ng dùng c a l nh axis là:
vuông, so với mặc định là ch nh t) axis equal Lấy thang chia gi ng nhau cho c hai trục
axis off Tắt b ch độ nền trục, nhãn, ô l ới,
N u mu n v nhiều đồ thị trên các figure (c a sổ v ) khác nhau, ta t o figure mới
bằng l nh figure hoặc chọn menu file > new > figure trong c a sổ figure đang v Mỗi đ i
t ợng đồ họa t o mới nh figure, axis, line, đ ợc MATLAB t động gán cho một số hiệu để qu n lý, gọi là handle Tr ng hợp tổng quát thì giá trị handle là một s th c
Riêng đ i với figure thì mỗi figure t o mới s đ ợc gán với handle là một s nguyên
d ng, ví dụ: 1, 2, 3, B n có thể chuyển qua l i gi a các figure đang có bằng cách dùng chuột để chọn hoặc dùng l nh figure(H) trong đó H là s hi u c a figure
Các l nh tìm handle th ng dùng là gcf (Get handlle to current figure – tìm handle
c a figure hi n hành), gca ( Get handle to current axis – tìm handle c a h trục hi n hành),
findobj(gcf, 'Type','Line') (tìm handle c a các đ ng đồ thị trong figure hi n hành)
Mặt khác, một c a sổ figure có thể ch a nhiều h n một h trục L nh
subplot(m,n,p) chia figure thành một ma tr n (m x n) vùng đồ ho con gọi là subplot, và
chọn p là subplot hi n hành Các subplot đ ợc đánh s lần l ợt t trái qua ph i, t trên
figure % m mới một c a sổ figure tr ng
subplot(2,2,1) % t o 4 subplot và chọn subplot 1 góc trên trái
plot(x,y), axis([0 2*pi -1 1]), title('sin(x)')
subplot(2,2,2) % chọn subplot 2 góc trên ph i
plot(x,z), axis([0 2*pi -1 1]), title('cos(x)')
subplot(2,2,3) % chọn subplot 3 góc duới trái
plot(x,u), axis([0 2*pi -1 1]), title('2sin(x)cox(x)')
subplot(2,2,4) % chọn subplot 4 góc d ới ph i
plot(x,v), axis([0 2*pi -1 1]), title('tan(x)')
Trang 38với x ∈ [xmin,xmax] ; y ∈ [ymin,ymax]
ezplot(x,y) V đồ thị hàm tham s x=x(t); y=y(t) với t ∈[-2π, 2π] ezplot(x,y, [tmin,tmax]) v đồ thị x=x(t); y=y(t) với t ∈[tmin, tmax]
Hàm s cần v có thể nh p theo nhiều cách Hai cách th ng dùng là:
Cách 1 Nh p biểu th c hàm trong cặp dấu nháy ' '
Cách 2 Khai báo bi n bằng hàm syms ; sau đó nh p biểu th c hàm
Ví dụ, hàm y=2sinxcosx có thể nh p bằng một trong hai cách:
Cách 1: >> y= '2*sin(x)*cos(x)'
Cách 2: >> syms x ; y=2*sin(x)*cos(x)
Trang 39Khi v bằng hàm ezplot thì tiêu đề đồ thị s đ ợc t o t động (không cần dùng l nh title) Sau khi v b n cũng có thể dùng các l nh ti n ích hold, grid, legend, axis,…t ng t
đồ thị c a hàm plot Các tuỳ chọn về màu, kiểu nét và marker không có trong cú pháp c a
l nh ezplot do đó n u mu n thi t đặt theo ý riêng, b n ph i điều chỉnh thông qua handle và
l nh set nh sau:
Cách 1:
h=ezplot(y) % v và l u handle c a đ ng đồ thị vào bi n h
set(h, 'Color','màu','Linestyle','ki unét',…) % thi t đặt l i màu, kiểu nét,… Cách 2: (MATLAB 6.x chỉ dùng đ ợc cách này)
+
=+ −
Trang 40>> axis square ; grid
5) V đ th hàm x=x(t); y=y(t) trong khoảng m c đ nh t ∈[-2π, 2π]