SlideShare uma empresa Scribd logo
1 de 195
Baixar para ler offline
Chương 1

NHẬP MÔN MATLAB

Tính toán khoa học
Nội dung
•
•
•
•
•
•

Giới thiệu chung về MATLAB
Làm việc với MATLAB
Lập trình với MATLAB
Các phép tính ma trận nâng cao
Đồ thị nâng cao
Vào ra dữ liệu

Tính toán khoa học
Giới thiệu chung về MATLAB
• MATLAB (Matrix Laboratory) là phần mềm của hãng
MathWorks Inc.
• Đối tượng là các ma trận.
• MATLAB tích hîp c¸c ph-¬ng ph¸p tÝnh to¸n, hiÓn thÞ vµ
ng«n ngữ lËp trình m¹nh ®Ó cung cÊp cho ng-êi sö dông mét
m«i tr-êng lµm viÖc thuËn tiÖn ®Ó gi¶i c¸c vÊn ®Ò tÝnh to¸n
khoa häc.
• CÊu tróc më cña MATLAB cho phÐp sö dông MATLAB vµ
c¸c thµnh phÇn cña nã ®Ó kh¶o s¸t dữ liÖu, nghiªn cøu c¸c
thuËt to¸n vµ t¹o c¸c c«ng cô tiÖn Ých cña ng-êi sö dông.

Tính toán khoa học
Giới thiệu chung về MATLAB (tiếp)
• Ngoài ra Matlab cũng đã tạo sẵn rất nhiều công cụ tiện ích như:
–
–
–
–

Khai ph¸ dữ liÖu (Data acquisition)
Ph©n tÝch vµ kh¶o s¸t dữ liÖu (Data analysis and exploration)
HiÓn thÞ vµ xö lý ¶nh (Visualization and image processing)
Dùng mÉu vµ Ph¸t triÓn thuËt to¸n (Algorithm prototyping and
development)
– M« hình hãa vµ m« pháng (Modeling and simulation)
– ...

• MATLAB là công cụ được các nhà khoa học, kỹ sư sử dụng để phát triển
các phần mềm giải các bài toán tính toán trong khoa học kỹ thuật.
• Bản thân MATLAB cũng cung cấp công cụ để giải nhiều bài toán của
khoa học kỹ thuật.
• MATLAB được dùng trong nhiều trường đại học để hỗ trợ việc giảng
dạy các giáo trình toán, đặc biệt là các giáo trình liên quan đến tính toán
số như đại số tuyến tính ứng dụng, giải tích số, tính toán khoa học, …
Tính toán khoa học
Làm việc với MATLAB

Tính toán khoa học
Màn hình làm việc của Matlab

Thư mục hiện thời
Current Directory

Cửa sổ lệnh
Command Window
Các lệnh quá khứ
Command history

Truy cập
chức năng

Tính toán khoa học
Màn hình làm việc của Matlab (tiếp)

Vùng nhớ làm việc
Workspace

Cửa sổ lệnh
Command Window

Các lệnh quá khứ
Command History

Tính toán khoa học
Chương trình trên Matlab
• Matlab có thể làm việc như là một siêu máy tính cầm tay nếu
chúng ta chỉ cần Matlab thực hiện một số lệnh bằng cách đánh
trực tiếp trên của sổ lệnh…
• Chương trình được thực hiện bằng cách nào?
• Chương trình trong Matlab có thể là:
– Kịch bản (Scripts), hoặc
– Các hàm (Functions)
• Scripts: Dãy lệnh Matlab ghi trong một file được đưa vào cửa sổ
lệnh và được thực hiện tức thì
• Functions: Các môđun chương trình tiếp nhận dữ liệu vào và trả
lại kết quả (ví dụ hàm sin nhận đầu vào x và trả lại giá trị sin(x))
• Chương trình có thể được soạn thảo bằng bất cứ bộ soạn thảo
văn bản nào (tuy nhiên Matlab cũng cung cấp bộ soạn thảo
chương trình của riêng mình)

Tính toán khoa học
Bộ soạn thảo của Matlab (Matlab Editor)
Các chức
năng

Tự động gán
màu chữ và
dóng hàng
Dãy các
file được
mở để
soạn thảo

Tính toán khoa học
Cơ cấu làm việc của Matlab
• Matlab là ngôn ngữ thông dịch (interpreted language)
– Các câu lệnh được đánh trực tiếp trong cửa sổ lệnh và được thực hiện tức
thì
– Các biến được phân bố bộ nhớ ngay lần đầu tiên chúng được khởi tạo
– Muốn thực hiện lại một lệnh chỉ việc gõ lại lệnh đó

• Tất cả các biến được sử dụng trong cửa sổ lệnh được
cất giữ vào Vùng nhớ làm việc Base Workspace
–
–
–
–
–
–

Có thể gán giá trị mới cho các biến nếu cần thiết
Có thể chọn để xoá bỏ một số biến khỏi vùng nhớ làm việc
Vùng nhớ làm việc có thể cất giữ vào một file dữ liệu
Phần mở rộng của file dữ liệu là .mat (ví dụ: mydata.mat)
File là file nhị phân
Các file dữ liệu (đuôi .mat ) có thể nạp trở lại vào Vùng nhớ làm việc
Tính toán khoa học
Câu lệnh, Chỉ thị & Biến
• Tại dấu nhắc của cửa sổ lệnh, người sử dụng có thể gõ:
– Lệnh (Command):
• save mydata (cất giữ vùng nhớ làm việc vào mydata.mat)
• whos (hiển thị danh mục các biến trong vùng nhớ làm việc)

– Chỉ thị gán (Assignment Statement):
•
•
•
•

A = width * length;
B = 267;
Câu lệnh gán chỉ có một tên biến ở vế trái của toán tử gán (=)
Vế phải sẽ được tính dựa vào giá trị hiện thời của các biến và kết quả
tính được sẽ gán cho biến ở vế trái.
• Giá trị có thể có dạng số hoặc dạng ký tự
• Kiểu của biến sẽ được cập nhật mỗi khi nó được gán giá trị (chú ý: rất
thoải mái nhưng rất dễ mắc sai lầm…)

– Biến
• Phân biệt 31 ký tự đầu tiên (những ký tự tiếp theo bị bỏ qua); Phân
biệt chữ hoa hay thường
Tính toán khoa học
Lµm viÖc trong chÕ ®é héi tho¹i
• Khi sö dông chÕ ®é héi thäai, ng-êi sö dông ®¸nh trùc tiÕp c©u
lÖnh vµo sau dÊu nh¾c cña MATLAB. Khi Ên nót “Enter”,
dßng lÖnh sÏ ®-îc thùc hiÖn.
• VÝ dô,
>> x = 1;
>> 4*atan(x)
• KÕt qu¶ sÏ ®-îc ®-a ra mµn hình d-íi d¹ng
ans =
3.1416
• DÊu chÊm ph¶y ";" ë cuèi dßng lÖnh ®-îc sö dông ®Ó ngăn
MATLAB kh«ng ®-a kÕt qu¶ cña phÐp thao t¸c.

Tính toán khoa học
Chương trình trên MATLAB
• Mét c¸ch lµm viÖc kh¸c víi MATLAB lµ ta cã thÓ viÕt ch-¬ng
trình ®Ó thùc hiÖn c¸c tÝnh to¸n.
• ĐÓ lµm ®iÒu nµy ta cÇn so¹n th¶o mét file văn b¶n b»ng bÊt kú
bé so¹n th¶o văn b¶n nµo, trong ®ã cã bé so¹n th¶o cña
MATLAB.
• File văn b¶n chøa c¸c c©u lÖnh ph¶i ®-îc ®Æt tªn víi ®u«i lµ
*.m, nÕu kh«ng MATLAB sÏ kh«ng chÊp nhËn ch-¬ng trình.
• Ch-¬ng trình ®-îc so¹n th¶o cÇn cÊt giấu trong th- môc lµm
viÖc hiÖn thêi cña MATLAB.

Tính toán khoa học
• VÝ dô, néi dung cña file Tinhpi.m
% Program 1.1 (TÝnh sè ).
% Ch-¬ng trình tÝnh gi¸ trÞ cña Pi = 3.14159265358979...
% Mçi dßng b¾t ®Çu bëi % sÏ lµ dßng chó gi¶i vµ sÏ ®-îc
% MATLAB bá qua khi nã thùc hiÖn ch-¬ng trình.
x = 1;
4*atan(x)

• ĐÓ thùc hiÖn ch-¬ng trình ta chØ cÇn gâ tªn cña file ch-¬ng
trình sau dÊu nh¾c cña MATLAB
>> Tinhpi
ans =
3.1416

Tính toán khoa học
Các từ khoá…
• Matlab sử dụng một loạt các từ khoá (reserved
words) mà để tránh xung đột, không nên sử dụng để
đặt tên biến…
for
end
if
while
function
return
elsif
case
otherwise

switch
continue
else
try
catch
global
persistent
break

Tính toán khoa học
C¸c tªn biÕn vµ tªn hµm chuÈn cña MATLAB
Tên biến hằng
ans

Mô tả
Biến ngầm định chứa kết quả

beep

Phát tiếng kêu

pi

Hằng số pi

eps
inf

infinity

NaN
i

Số 0 của Matlab

not a number

(hoÆc)

j

realmin, realmax
bitmax
nargin, nargout
varargin
varaout

Đơn vị phức
Số thực dương nhỏ nhất và lớn nhất
Số nguyên lớn nhất
Số lượng biến vào/ra của lệnh gọi hàm
Số lượng biến trong lệnh gọi hàm
Số lượng biến đầu ra trong lệnh gọi hàm
Tính toán khoa học
C¸c tªn biÕn vµ tªn hµm chuÈn cña MATLAB
Tªn hµm
abs (x)
acos (x)
asin (x)
atan (x)
conj (x)
cos (x)
exp (x)

ý nghÜa
Gi¸ trÞ tuyÖt ®èi cña sè thùc x (hoÆc
biªn ®é cña sè phøc x).
hµm ng-îc cña cosin.
hµm ng-îc cña sin.
hµm ng-îc cña tang.
sè phøc liªn hîp
hµm cosin.
hµm mò.

Tính toán khoa học
C¸c tªn biÕn vµ tªn hµm chuÈn cña MATLAB
Tªn hµm
imag (x)

ý nghÜa
phần ảo của số phức

log (x)

Logarithm cơ số e

log10 (x)

Logarithm cơ số 10

real (x)

phần thực của x

sign (x)

Hàm dấu, trả lại dấu của đối số

sin (x)

hàm sin.

sqrt (x)

Căn bậc hai

tan (x)

hàm tang
Tính toán khoa học
Khu«n d¹ng dữ liÖu
• MÆc dï tÊt c¶ c¸c tÝnh to¸n sè trong Matlab ®Òu ®-îc thùc hiÖn
víi ®é chÝnh x¸c kÐp (double precision), nh-ng khu«n d¹ng
cña dữ liÖu ®-a ra cã thÓ ®Þnh d¹ng l¹i nhê c¸c lÖnh ®Þnh d¹ng
cña Matlab.
• C¸c biÕn ngÇm ®Þnh còng nh- c¸c biÕn cña ng-êi sö dông ®Þnh
nghÜa ®Òu cã thÓ ®-a ra theo nhiÒu khu«n d¹ng kh¸c nhau.
• Khu«n d¹ng ®-îc chän nhê sö dông lÖnh format:
–
–
–
–

FORMAT SHORT
FORMAT LONG
FORMAT SHORTE
FORMAT LONGE
mũ
– FORMAT RAT

số dấu phảy động có 4 chữ số sau dấu.
số dấu phảy động có 14 chữ số.
số dấu phảy động có 4 chữ số với số mũ.
số dấu phảy động có 15 chữ số với số
biểu diễn đúng hoặc gần đúng dưới dạng
phân số
Tính toán khoa học
Khu«n d¹ng dữ liÖu: VÝ dụ
>> pi
ans =
3.1416

>> format short e, pi
ans =
3.1416e+000

>> format long, pi

>> format rat, pi
ans =

3.14159265358979
>> format long e, pi

ans =
355/113

ans =

3.141592653589793e+000

Tính toán khoa học
VÏ ®å thÞ ®¬n gi¶n
• Ьn gi¶n nhÊt, ®å thÞ cã thÓ ®-îc vÏ nhê nèi
c¸c ®iÓm ®-îc ®¸nh dÊu trªn mÆt ph¼ng täa ®é
®Ò c¸c.
• VÝ dô:
>> x = [1;2;3;4;5];
>> y = [0;.25;3;1.5;2];
>> plot(x,y)

Tính toán khoa học
VÏ ®å thÞ ®¬n gi¶n
• Theo ngÇm ®Þnh, Matlab sÏ nèi c¸c ®iÓm ®¸nh
dÊu bëi c¸c ®o¹n th¼ng. Mét c¸ch vÏ kh¸c
®-îc thùc hiÖn nh- sau
>> plot(x,y,'o')

Tính toán khoa học
Khëi t¹o biÕn vect¬ vµ ma trËn
• Mét trong những ®iÓm m¹nh cña MATLAB lµ nã cho
phÐp lµm viÖc víi c¸c ma trËn vµ vect¬. ĐÓ sö dông
mét biÕn ta cÇn khëi t¹o nã. Cã thÓ khëi t¹o biÕn
vect¬ vµ ma trËn theo nhiÒu c¸ch.
• Đèi víi vect¬ (hay ma trËn chØ cã mét dßng) ta cã thÓ
sö dông c¸c c¸ch khëi t¹o sau
>> a = [1 2 3 4 5 6 7 8 9 10];
>> b = [1:10];
>> c = [1:0.5:5.5];
>> d = sin(a);
>> e = [5 d 6];
Tính toán khoa học
Khëi t¹o biÕn vect¬ vµ ma trËn
• Mét trong những c¸ch khëi t¹o vect¬ th-êng
dïng lµ sö dông to¸n tö
first : increment : last
• C©u lÖnh
a= first : increment : last

khëi t¹o vect¬ dßng a b¾t ®Çu tõ phÇn tö first
vµ kÕt thóc t¹i phÇn tö last víi ®é dµi b-íc lµ
increment. NÕu kh«ng chØ ra increment, thì gi¸
trÞ ngÇm ®Þnh nã lµ b»ng 1.
Tính toán khoa học
Khëi t¹o biÕn vect¬ vµ ma trËn
• VÝ dô:
1) ĐÓ khëi t¹o vect¬ a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) cã thÓ thùc hiÖn
>> a=1:10
a= 1 2

3

4

5

6

7

8

9 10

2) Đé dµi b-íc cã thÓ lµ sè ©m
>> a=[100:-10:20]
a = 100 90 80 70 60 50 40 30 20

3) C¸c gi¸ trÞ cña th«ng sè cã thÓ x¸c ®Þnh bëi biÓu thøc to¸n häc
>> c=0:pi/6:2*pi
c = Columns 1 through 6
0 0.5236 1.0472 1.5708 2.0944 2.6180
Columns 7 through 12
3.1416 3.6652 4.1888 4.7124 5.2360 5.7596
Column 13 6.2832

Tính toán khoa học
Khëi t¹o biÕn vect¬ vµ ma trËn
• ĐÓ khëi t¹o ma trËn ta cã thÓ lµm nh- sau
>> A = [1 2 3; 4 5 6; 7 8 9];
>> B = [x; y; z];
>> C = [A; 10 11 12];
• Chó ý lµ c¸c dßng cña ma trËn ®-îc ph©n t¸ch nhau
bëi dÊu ";", trong khi ®ã c¸c phÇn tö trªn mét dßng
®-îc ph©n t¸ch bëi dÊu c¸ch (hoÆc dÊu ph¶y).

Tính toán khoa học
ĐÞa chØ cña m¶ng (Array addressing)
• C¸c phÇn tö cña mét m¶ng tæng qu¸t (lµ vect¬
hay ma trËn) cã thÓ ®Þa chØ hãa theo nhiÒu c¸ch.
• C¸ch ®¬n gi¶n nhÊt lµ chØ ra phÇn tö bëi vÞ trÝ
dßng vµ cét cña nã trong m¶ng
• C¸c dßng vµ cét ®-îc ®¸nh sè b¾t ®Çu tõ 1.

Tính toán khoa học
ĐÞa chØ cña m¶ng (Array addressing)
• VÝ dô
>> x = [10 5 3 7 -2 8];
>> x(5)
ans =
-2
>> A = [3 4 9; 2 5 1; 7 4 2]
A =
3 4 9
2 5 1
7 4 1
>> A(1,3)
ans =
9
Tính toán khoa học
ĐÞa chØ cña m¶ng (Array addressing)
• Trong tr-êng hîp ma trËn, cã thÓ x¸c ®Þnh
®Þa chØ dßng hay cét bëi lÖnh :.
• VÝ dô: NÕu cÇn lÊy c¸c phÇn tö cña cét thø
hai vµ c¸c phÇn tö cña dßng thø 3 trong ma
trËn A cã thÓ dïng c¸c lÖnh
>> A(:,2)
>> A(3,:)

Tính toán khoa học
ĐÞa chØ cña m¶ng (Array addressing)
• Thay vect¬ chØ sè vµo chç c¸c chØ sè ta cã thÓ sinh ra hoÆc lÊy
®-îc c¸c m¶ng con phøc t¹p h¬n.
• VÝ dô
>> Asub = A(i:j,k:l);
x¸c ®Þnh Asub lµ ma trËn gåm c¸c phÇn tö n»m trªn giao cña
c¸c dßng tõ i ®Õn j, c¸c cét tõ k ®Õn l.
• NÕu chØ sè ®-îc chØ ra bëi ký tù : thì ®iÒu ®ã cã nghÜa lµ tÊt
c¶ c¸c gi¸ trÞ cã thÓ cña chØ sè cña chiÒu ®ã cña m¶ng ®Òu
®-îc chän.
• VÝ dô:
>> B = A(:,[3 1 2]);

Tính toán khoa học
ĐÞa chØ cña m¶ng (Array addressing)
• Ta còng cã thÓ nèi nhiÒu ma trËn ®Ó ®-îc ma trËn
míi.
• VÝ dô:
– NÕu A vµ B lµ c¸c ma trËn cã cïng sè dßng thì
>> C = [A B];
cho ma trËn C cã cïng sè dßng nh- A vµ B, nh-ng cã sè
cét lµ tæng sè cét cña A vµ B.
- NÕu A vµ B lµ c¸c ma trËn cã cïng sè cét thì
>> C = [A; B]
cho ma trËn C cã sè cét b»ng sè cét cña A hoÆc B nh-ng
sè dßng cña C lµ b»ng tæng sè dßng cña A vµ B.

Tính toán khoa học
ĐÞa chØ cña m¶ng (Array addressing)
• ĐÓ xo¸ mét dßng hay cét cña ma trËn ta sö dông cÆp
ngoÆc vu«ng rçng []:
• VÝ dô: Gi¶ sö A lµ ma trËn trong vÝ dô tr-íc. Khi ®ã,
lÖnh
>> A(:,2) = [];
cho ta ma trËn thu được từ A bởi việc xoá đi cột thứ 2.

• Kh«ng thÓ xo¸ bá mét phÇn tö cña ma trËn, bëi vì khi
®ã kÕt qu¶ kh«ng cßn lµ ma trËn nữa.
• Tuy nhiªn, nhê m« t¶ chØ sè bëi to¸n tö : cã thÓ thùc
hiÖn viÖc xo¸ bá mét phÇn tö hoÆc mét d·y phÇn tö vµ
c¸c phÇn tö cßn l¹i ®-îc s¾p xÕp l¹i trong mét vect¬
dßng
Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• Tr-íc xÐt mét sè hµm cña MATLAB cho th«ng tin vÒ
®Æc tr-ng cña m¶ng.
• Hµm length cho phÐp x¸c ®Þnh sè phÇn tö cña vect¬.
NÕu gäi hµm ®èi víi ma trËn thì nã sÏ tr¶ l¹i sè lín
h¬n trong sè dßng vµ sè cét cña ma trËn.
• Hµm size, nã tr¶ l¹i sè dßng vµ sè cét cña ma trËn hay
vect¬. KÕt qu¶ cña hµm size lµ mét vect¬ 12 chøa sè
dßng vµ sè cét cña ma trËn. C¸ch sö dông chuÈn cña
hµm nµy lµ
>> [rows cols] = size(A);

Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• Cộng (và trừ) các ma trận cùng kích thước được
thực hiện từng thành phần.
• Ví dụ
>> A=[5 -1 2; 3 4 7]; B=[2 2 1; 5 0 3];
>> A+B
ans = 7 1 3
8 4 10

• Chú ý các ma trận phải có cùng kích thước:
>> C=[3 1; 6 4];
>> A+C
??? Error using ==> + Matrix dimensions must agree.

Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• Nhân với một số (chia cho một số khác không)
cũng được thực hiện theo từng thành phần. Ví
dụ:
>> A=[5 -1 2; 3 4 7];
>> 2*A
ans =
10 -2 4
6 8 14

• Phép toán * trong tích trên là bắt buộc phải có:
>> 2A
??? 2 | Missing operator, comma, or semicolon.

Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• Cộng vectơ và nhân vectơ với một số
được thực hiện tương tự.
>> v=[3; 5]; w=[-2; 7];
>> 10*v-5*w
ans =
40
15

Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• Phép nhân hai ma trận cũng có thể thực
hiện được trên Matlab.
• Để nhân hai ma trận hay nhân ma trận với
vector chỉ việc dùng toán tử * giống như
phép nhân của các đại lượng vô hướng.
• Matlab nhận dạng kích thước của đầu vào
và thực hiện phép nhân.
• Điều mà người sử dụng quan tâm là kích
thước của các ma trận và vector phải phù
hợp để có thể thực hiện được phép toán.
Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• Ví dụ:
>> x = [1 2 3];
>> A = [4 5 6; 5 4 3];
>> b = A*x
??? Error using ==> *
Inner matrix dimensions must agree.
>> y = [1; 2; 3];
>> b = A*y
b =
32
22
Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• ĐÓ thùc hiÖn chuyÓn vÞ vect¬ hoÆc ma trËn cã
thÓ dïng lÖnh chuyÓn vÞ ' viÕt ngay sau tªn
biÕn.
>> A = [ 4 5; 5 4; 6 3]
>> A'
ans =
4 5 6
5 4 3

Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• PhÐp to¸n chuyÓn vÞ thùc hiÖn ®èi víi ma trËn phøc sÏ thùc hiÖn
chuyÓn vÞ liªn hîp:
>> A = [1 2;3 4]
A=
1 2
3 4
>> A'
ans =
1 3
2 4
>> B = A + i*.5*A
B=
1.0000 + 0.5000i
3.0000 + 1.5000i
>> B'
ans =
1.0000 - 0.5000i
2.0000 - 1.0000i

2.0000 + 1.0000i
4.0000 + 2.0000i

3.0000 - 1.5000i
4.0000 - 2.0000i

Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• Mét phÐp chuyÓn vÞ kh¸c Ýt dïng ®èi víi ma trËn phøc
®-îc thùc hiÖn nhê phÐp to¸n ".'". VÝ dô:
>> B.'
ans =
1.0000 + 0.5000i 3.0000 + 1.5000i
2.0000 + 1.0000i 4.0000 + 2.0000i

• (Chó ý lµ ' vµ .' cho kÕt qu¶ nh- nhau ®èi víi ma trËn
thùc).

Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• NÕu A lµ ma trËn vu«ng cßn m lµ sè nguyªn d-¬ng thì
A^m sÏ cho ta tÝch cña m nh©n tö lµ A.
• Ví dụ:
>> A=[1 2; 3 4]; A^2
ans =
7
10
15
22
>> pi^2
ans =
10975/1112
>> mu2= 2^100;
>> format long, mu2
mu2 =
1.267650600228229e+030

Tính toán khoa học
Ví dụ: Tính số Fibonacci
• Dãy số Fibonacci được định nghĩa bởi công thức đệ qui
f0=0, f1=1,
fn=fn-1 + fn-2, n ≥ 2.
• Đưa vào ma trận:
1 1 
F 
,
1 0

 0
f  
1 

• Dễ dàng kiểm tra được rằng
 fn 
F f 

f n 1 

n

>> F=[1 1;1 0]; f=[0;1]; F^10*f

Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• PhÐp to¸n luü thõa ¸p dông víi ma trËn kÝch th-íc 11 trë
thµnh phÐp to¸n luü thõa cña ®¹i l-îng v« h-íng.
• VÝ dô:
>> c=3.1;
>> c^3
ans =
29.7910

• Sè mò cã thÓ lµ sè thùc tuú ý
• VÝ dô:
>> 3^(-1/3)
ans =
0.6934

Tính toán khoa học
Gi¶i ph-¬ng trình ma trËn sö dông phÐp chia ma trËn
• NÕu A lµ ma trËn vu«ng kh«ng suy biÕn thì nghiÖm cña
ph-¬ng trình Ax = b lµ x = A-1b. Matlab cµi ®Æt phÐp to¸n
nµy vµ ký hiÖu lµ to¸n tö "".
• VÝ dô:
>> A = rand(3,3);
>> b = rand(3,1);
>> x = Ab
x=
-159.3380
314.8625
-344.5078
>> A*x-b
ans =
1.0e-13 *
-0.2602
-0.1732
-0.0322
Tính toán khoa học
Gi¶i ph-¬ng trình ma trËn sö dông phÐp chia ma trËn
• Chó ý: hµm rand t¹o c¸c sè ngÉu nhiªn víi ph©n bè ®Òu trªn
®äan (0,1). H·y sö dông lÖnh help rand ®Ó xem gi¶i ®¸p chi tiÕt
vÒ hµm nµy.
• Nh- vËy Ab lµ t-¬ng ®-¬ng víi viÖc nh©n tr¸i b víi ma trËn A1 (tuy nhiªn, ®Ó ®-a ra kÕt qu¶, Matlab kh«ng tÝnh ma trËn
nghÞch ®¶o mµ gi¶i trùc tiÕp hÖ ph-¬ng trình).
• Khi sö dông to¸n tö "" ®èi víi ma trËn kh«ng vu«ng, Matlab
sÏ gi¶i hÖ ph-¬ng trình t-¬ng øng trong nghÜa bình ph-¬ng bÐ
nhÊt;
• H·y sö dông lÖnh help slash ®Ó cã ®-îc gi¶i ®¸p chi tiÕt h¬n.
• Gièng nh- ®èi víi c¸c phÐp to¸n sè häc kh¸c, c¸c ma trËn ph¶i
cã kÝch th-íc phï hîp.

Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• Tích theo từng thành phần của hai ma trận cùng
kích thước A và B là ma trận A.*B với các phần tử
là tích của các phần tử tương ứng của A và B.
• Ví dụ:
>> A=[ 1 2 3; 4 5 6]; B=[3 2 1;-1 2 2];
>> A.*B
ans = 3 4 3
-4 10 12

Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• Phép chia và luỹ thừa theo từng thành phần:
A./B và A.^B được định nghĩa tương tự. Lưu ý
là các phép tính với các thành phần phải là có
nghĩa, nếu không MATLAB sẽ báo lỗi.
• Ví dụ:
>> A./B
ans = 1/3 1 3
-4 5/2 3
>> A.^B
ans = 1
4 3
1/4 25 36
Tính toán khoa học
C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn
• Phép cộng ma trận với vô hướng: Giá trị của
vô hướng được cộng vào từng thành phần của
ma trận.
• Ví dụ:
>> A=[1 2 3; 2 3 4];
>> A+5
ans =
6
7
8
7
8
9

Tính toán khoa học
C¸c hµm vµ phÐp to¸n vect¬ hãa
• C¸c hµm cña Matlab ®Òu lµ hµm ®-îc vect¬ hãa,
nghÜa lµ nÕu ¸p dông c¸c hµm cña Matlab ®èi víi
m¶ng, nã sÏ t¹o ra m¶ng míi cã cïng kÝch th-íc víi
c¸c thµnh phÇn lµ gi¸ trÞ hµm t¹i c¸c thµnh phÇn t-¬ng
øng cña m¶ng ban ®Çu.
• VÝ dô: Vẽ đồ thị hµm y=sin(x) trªn ®o¹n [0, 2*pi]
>> x = (0:.1:2*pi);
>> y = sin(x);
>> plot(x,y)

Tính toán khoa học
C¸c hµm vµ phÐp to¸n vect¬ hãa
• Matlab còng cung cÊp c¸c phÐp to¸n sè häc ®-îc
vect¬ hãa, ®-îc ký hiÖu gièng nh- phÐp to¸n sè häc
th«ng th-êng nh-ng cã thªm dÊu chÊm "." ë tr-íc.
• VÝ dô: ĐÓ vÏ ®å thÞ hµm sè: y = x/(1+x2) trªn ®o¹n [5, 5] ta cã thÓ dïng c¸c lÖnh
>> x = (-5:.1:5);
>> y = x./(1+x.^2);
>> plot(x,y)

Tính toán khoa học
C¸c hµm t¹o ma trËn ®Æc biÖt
•
•
•
•

zeros(m,n) t¹o ma trËn mn gåm toµn sè 0;
ones(m,n) t¹o ma trËn mn gåm toµn sè 1;
eye(n) t¹o ma trËn ®¬n vÞ nn;
diag(v) (gi¶ thiÕt v lµ vect¬ n chiÒu) t¹o ma
trËn ®-êng chÐo kÝch th-íc nn víi v lµ
®-êng chÐo.

Tính toán khoa học
Biến xâu trong MATLAB
• MATLAB cho phép sử dụng biến xâu ký tự: Sử
dụng lệnh gán
S = 'Any Characters'
cho phép tạo mảng ký tự (xâu ký tự).
• Ví dụ:
>> msg = 'You''re right!'
msg =
You're right!

• Lưu ý: Để tạo dấu ‘ trong xâu ký tự cần đánh
hai dấu ‘

Tính toán khoa học
Biến xâu trong MATLAB
• Lệnh S = [S1 S2 ...] ghép các xâu S1, S2,...
thành một xâu mới S.
• Ví dụ:
>> name = ['Michel' ' Paul ' ' Heath ']
name =
Michel Paul Heath
>> name(1)
ans =
M
>> name(1)+name(9)
ans =
174

• Lưu ý đến cách truy cập đến các thành phần
trong xâu.
Tính toán khoa học
Biến xâu trong MATLAB
• S = char(X) tạo S là ký tự có mã
ASCII là X.
• X = double(S) chuyển ký tự thành số
• Ví dụ:
>> char([65 66 67])
ans =
ABC
>> X = double('ABC')
X =
65
66
67
Tính toán khoa học
Biến xâu trong MATLAB
• Để khởi tạo biến mảng mà mỗi phần tử là
một xâu, sử dụng:
>> S = {'Hello' 'Yes' 'No' 'Goodbye'}
S =
'Hello'
'Yes'
'No'
'Goodbye'
>> S(4)
ans =
'Goodbye'

Tính toán khoa học
LẬP TRÌNH TRÊN MATLAB

Tính toán khoa học
Câu lệnh trong Matlab
• Câu lệnh hay gặp nhất trong Matlab có
dạng
variable = expression

Câu lệnh này sẽ gán giá trị của biểu thức
expression cho biến variable.
Ví dụ:
>> x=2^10*pi
x=
3.216990877275948e+003
Tính toán khoa học
Câu lệnh trong Matlab
• Câu lệnh của Matlab cũng còn có thể có
dạng đơn giản như sau:
expression

trong trường hợp này giá trị của biểu thức
sẽ được gán cho biến ngầm định có tên là
ans.
Ví dụ:
>> 2*pi*exp(-5)
ans =
0.04233576958521
Tính toán khoa học
Câu lệnh trong Matlab
• Cuối cùng, một dạng nữa của câu lệnh trong
Matlab là
variable
– Nếu như biến đã được gán giá trị trước đó thì nội
dung của biến được đưa ra màn hình,
– Nếu trái lại sẽ có thông báo rằng biến chưa được xác
định.

• Người sử dụng có thể tận dụng điều này để
kiểm tra xem một tên biến đã được dùng hay
chưa.
Tính toán khoa học
Câu lệnh trong Matlab
• Câu lệnh của Matlab sẽ được thực hiện ngay
sau khi nhấn phím Enter. Nếu câu lệnh Matlab
kết thúc bởi Enter, theo ngầm định, Matlab sẽ
đưa kết quả thực hiện lên thiết bị ra chuẩn
(ngầm định là màn hình).
• Muốn tránh việc đưa kết quả ra ngay trực tiếp
sau câu lệnh, cần kết thúc câu lệnh bởi dấu ;
sau đó mới đến Enter.
• Khi câu lệnh của Matlab quá dài có thể ngắt
thành hai hoặc nhiều dòng sử dụng dấu nối
dòng … ở cuối mỗi dòng chứa câu lệnh.
Tính toán khoa học
Câu lệnh trong Matlab
• Ví dụ:
>> avariablewithlongname = 100 + (32-17.33)*5 ...
+ 2^3 - log(10)/log(2);

• Để xóa tất cả biến trong Matlab, ta dùng
lệnh
>> clear

• Để xóa một số biến cụ thể, ta dùng lệnh
>> clear var1 var 2 ...

trong đó var1, var2, .. Là các tên của cá
biến cần xóa.
Tính toán khoa học
Các phép toán quan hệ và logic trong Matlab
Phép toán quan hệ

Ý nghĩa

<

Nhỏ hơn

<=

Nhỏ hơn hoặc bằng

>

Lớn hơn

>=

Lớn hơn hoặc bằng

==

Bằng

~=

Không bằng
Ý nghĩa

Phép toán lôgic
&

AND (hội)

|

OR (tuyển)

~

NOT (phủ định)

0

FALSE

Số khác không

TRUE
Tính toán khoa học
Câu lệnh if
• Dạng tổng quát của câu lệnh if là
if expr1
statements1
elseif expr2
statements2
...
else
statements
end

elseif và else là tuỳ chọn

• Nhóm lệnh đi ngay sau biểu thức (expr) đầu tiên có giá
trị khác 0 sẽ được thực hiện.
• Nếu không có expr nào khác 0 thì nhóm lệnh sau else
được thực hiện
Tính toán khoa học
Câu lệnh if
• VÝ dô:
>> t = rand(1);
>> if t > 0.75
s = 0;
elseif t < 0.25
s = 1;
else
s = 1-2*(t-0.25);
end
>> s
s =
0
>> t
t =
0.7622
Tính toán khoa học
Câu lệnh if
• C¸c phÐp to¸n quan hÖ trong Matlab lµ <, >, <=, >=, == (so
s¸nh b»ng logic), vµ ~= (kh«ng b»ng).
• C¸c phÐp to¸n hai ng«i nµy sÏ tr¶ l¹i gi¸ trÞ 0 hoÆc 1 (®èi víi
c¸c biÕn v« h-íng):
>> 5>3
ans =
1
>> 5<3
ans =
0
>> 5==3
ans =
0

Tính toán khoa học
Câu lệnh vòng lặp for
• Vòng lặp for lặp lại các câu lệnh trong thân của
nó đối với các giá trị của biến chạy được lấy từ
một vector dòng cho trước.
• Ví dụ
>> for i=[1,2,3,4]
disp(i^2)
end
1
4
9
16
Tính toán khoa học
Câu lệnh vòng lặp for
• Chú ý đến việc sử dụng hàm nội trú disp: hàm này đưa
ra màn hình nội dung của biến.
• Vòng lặp, cũng giống như câu lệnh if, phải kết thúc bởi
end. Vòng lặp ở trên thường được viết dưới dạng như
sau.
>> for i=1:4
disp(i^2)
end
1
4
9
16

• Nhớ lại cách khởi tạo 1:4 cũng chính là [1, 2, 3, 4].
Tính toán khoa học
Câu lệnh vòng lặp for
• Đoạn lệnh
n=4; x = []; for i=1:n, x = [x, i^2], end
hay
x=[];
for i= 1:n
x = [x, i^2];
end

sẽ tạo ra vector x = [1, 4, 9, 16].
• Đoạn lệnh
n=4;x=[]; for i=n:-1:1, x = [x, i^2],end

sẽ tạo ra vector x = [16, 9, 4, 1].
Tính toán khoa học
Câu lệnh vòng lặp for
• Đoạn lệnh
m = 4;
n = 5;
for i=1:m
for j=1:n
h(i,j) = i/(i+j-1);
end
end
h

sẽ tạo ra ma trận Hilbert kích thước 4 x 5.
• Dấu ; ở cuối câu lệnh trong thân của vòng lặp dùng để
ngăn Matlab không đưa cá kết quả trung gian, ma trận
kết quả được đưa ra bởi lệnh h.
Tính toán khoa học
Câu lệnh while
• Câu lệnh có dạng sau:
while expr
C¸c c©u lÖnh
end

• Các câu lệnh trong thân của vòng lặp
while sẽ được lặp lại chứng nào biểu thức
expr còn là true (có giá trị khác 0).

Tính toán khoa học
Câu lệnh while
• Ví dụ:
>> x=1;
>> while 1+x > 1
x = x/2;
end
>> x
x =
1.1102e-16
• Chú ý: Về mặt chính xác toán học thì 1 + x > 1
đối với mọi x > 0.
Tính toán khoa học
Câu lệnh while
• Ví dụ: Đoạn chương trình sau đưa ra giá trị p nguyên dương
nhỏ nhất để 1+1/(2^p)=1.
x=1; p=0; y=1; z=x+y;
while x~=z
y=y/2;
p=p+1;
z=x+y;
end
p
p =
53
Tính toán khoa học
Hiện tượng tràn số nhỏ
Ví dụ: Tìm q nguyên dương nhỏ nhất để
1/2q = 0.
x=1; q=0;
Tràn số nhỏ
while x>0
underflow
x=x/2;
q=q+1;
q
end;
q

1/ 2  0

q = 1075
Tính toán khoa học
Hiện tượng tràn số lớn
Ví dụ: Tìm r nguyên dương nhỏ nhất để 2r = inf.
x=1; r=0;
while x~=inf
x=2*x;
r=r+1;
end
r

overflow

2  inf
r

r = 1024

Tính toán khoa học
Cẩn thận với tràn số
• Ví dụ (Kahan)
h
x
y
e
f
z

=
=
=
=
=
=

1./2.;
2./3. - h;
3./5. - h;
(x+x+x) - h;
(y+y+y+y+y)-h;
f/e;

• z=?
• Nếu tính toán số học chính xác thì f/e = 0/0
Tính toán khoa học
C©u lÖnh switch
• Câu lệnh switch cho phép thực hiện rẽ nhánh
dựa trên giá trị biểu thức.
• Dạng tổng quát của câu lệnh switch là:
switch bieuthuc
case giatri
cac cau lenh
case {giatri1, giatri2, giatri3,...}
cac cau lenh
...
otherwise
cac cau lenh
end
Tính toán khoa học
Ví dụ:
>> date= ‘Sunday’;
>> switch lower(date)
case {‘sunday',‘saturday’}
disp(‘the weekend.')
otherwise
disp(‘the workday.')
end
Kết quả: the weekend.
Tính toán khoa học
C©u lÖnh break
• LÖnh break dïng ®Ó ng¾t viÖc thùc hiÖn vßng lÆp
WHILE hay lµ FOR. Trong vßng lÆp lång nhau,
BREAK sÏ chØ tho¸t khái vßng lÆp trong.
• NÕu sö dông lÖnh break ngoµi vßng lÆp FOR hay
WHILE trong kÞch b¶n hoÆc hµm cña MATLAB, lÖnh
nµy sÏ chÊm døt viÖc thùc hiÖn kÞch b¶n hay hµm t¹i
chÝnh ®iÓm ®ã. LÖnh break sö dông trong c©u lÖnh IF,
SWITCH-CASE, sÏ ng¾t c©u lÖnh t¹i ®iÓm ®ã.

Tính toán khoa học
Kịch bản (Script)
• Kịch bản là dãy các câu lệnh của Matlab được ghi lại trong
một m – file, file đuôi .m.
• Khi đánh tên của file (không cần .m), dãy các lệnh này sẽ được
thực hiện.
• Lưu ý: m – file phải được đặt tại một trong các thư mục mà
Matlab sẽ tự động tìm kiếm m – file trong đó; danh mục các
thư mục như thế có thể xem nhờ lệnh path.
• Một trong những thư mục mà Matlab luôn khảo sát chính là
thư mục hiện thời. Thư mục này được hiển thị trong cửa sổ
Current Directory.
• Người sử dụng có thể thay đổi thư mục hiện thời nhờ dùng các
tiện ích trong cửa sổ này.
• Câu hỏi: thay đổi thư mục hiện thời như thế nào?
Tính toán khoa học
Kịch bản: Ví dụ
• VÝ dô: Gi¶ sö file plotsin.m chøa c¸c dßng
x = 0:2*pi/N:2*pi;
y = sin(w*x);
plot(x,y)
• Khi ®ã d·y lÖnh
>> N=100;w=5;
>> plotsin
sÏ ®-a ra ®å thÞ
Tính toán khoa học
Kịch bản (Script)
• VÝ dô nµy cho thÊy c¸c lÖnh trong mét kÞch
b¶n cã thÓ truy nhËp c¸c biÕn ®-îc x¸c ®Þnh
trong Matlab ®-îc coi lµ biÕn tæng thÓ (l-u ý
truy nhËp biÕn N vµ w trong plotsin.m).
• C¸c c©u lÖnh trong kÞch b¶n ®-îc thùc hiÖn
gièng nh- lµ chóng ®-îc ®¸nh trùc tiÕp tõ bµn
phÝm.

Tính toán khoa học
Hàm (function)
• ViÖc sö dông hµm cã những -u ®iÓm h¬n h¼n kÞch
b¶n:
– Dïng hµm, ng-êi sö dông cã thÓ t¹o những lÖnh míi trong
Matlab.

• Mét hµm ®-îc ®Þnh nghÜa trong m-file b¾t ®Çu bëi
dßng cã cÊu tróc sau:
function [out1,out2,...] = funcname(inp1, inp2,...)
• PhÇn cßn l¹i cña m-file sÏ chøa c¸c c©u lÖnh cña
Matlab tÝnh gi¸ trÞ cña c¸c ®Çu ra (outputi) vµ hoµn
thµnh c¸c c«ng viÖc ®ßi hái kh¸c.

Tính toán khoa học
Hàm (function)
• ĐiÓm quan träng cÇn l-u ý lµ: khi hµm ®-îc gäi ®Ó
thùc hiÖn Matlab sÏ t¹o mét kh«ng gian nhí ®Þa
ph-¬ng.
• C¸c lÖnh trong hµm kh«ng ®-îc truy nhËp c¸c biÕn tõ
kh«ng gian nhí toµn côc (trong phÇn héi tho¹i), ngo¹i
trõ c¸c biÕn ®-îc liÖt kª trong danh s¸ch ®Çu vµo.
• Còng chÝnh vì lÏ ®ã, c¸c biÕn ®-îc t¹o ra khi thùc
hiÖn hµm sÏ bÞ xãa bá khi viÖc thùc hiÖn hµm kÕt
thóc, ngäai trõ c¸c biÕn ®-îc liÖt kª trong danh s¸ch
®Çu ra
Tính toán khoa học
Hàm: Ví dụ 1
• VÝ dô 1. Tr-íc hÕt xÐt viÖc t¹o hµm randint
sinh ngÉu nhiªn ma trËn nguyªn víi c¸c phÇn
tö lµ sè ngÉu nhiªn trong kho¶ng tõ a ®Õn b.
function A = randint(m,n,a,b)
% RANDINT tạo ma trận nguyên ngẫu nhiên.
% randint(m,n) cho mxn ma trận với các thành phần trong khoảng từ 0 đến 9.

% rand(m,n,a,b) cho các phần tử từ a đến b.

if nargin < 3, a = 0, b = 9; end
A = floor((b-a-1)*rand(m,n)) + a+1;

Tính toán khoa học
Hàm: Ví dụ 1
• D·y lÖnh nµy cÇn ®-îc ghi vµo tÖp văn b¶n cã tªn randint.m
(cã cïng tªn víi tªn hµm). Dßng ®Çu tiªn m« t¶ tªn hµm, c¸c
biÕn vµo vµ c¸c biÕn ra; nÕu kh«ng cã dßng m« t¶ nµy thì tÖp
sÏ chØ lµ tÖp kÞch b¶n.
• Khi ®ã lÖnh Matlab
z = randint(4,5),
sÏ truyÒn gi¸ trÞ 4 vµ 5 cho c¸c biÕn m vµ n trong hµm vµ gi¸ trÞ
cña hµm sÏ ®-îc g¸n cho biÕn z. Do c¸c biÕn trong hµm lµ biÕn
®Þa ph-¬ng, nªn tªn cña chóng lµ ®éc lËp víi c¸c biÕn ®ang sö
dông trong m«i tr-êng Matlab.
• Chó ý: viÖc sö dông hµm nargin (sè l-îng biÕn vµo - "number
of input arguments") cho phÐp ta ®Æt gi¸ trÞ ngÇm ®Þnh cho c¸c
biÕn vµo v¾ng mÆt, ë vÝ dô ®ang xÐt lµ hai biÕn a vµ b.
• floor(X) rounds the elements of X to the nearest integers
towards minus infinity.
Tính toán khoa học
Hàm: Ví dụ 2
• Mét hµm còng cã thÓ cã nhiÒu biÕn ®Çu ra. Ta xÐt vÝ dô minh ho¹ sau:
• VÝ dô 2. VÝ dô, hµm sau ®©y tr¶ l¹i gi¸ trÞ trung bình (mean) vµ ®é lÖch
chuÈn cña vect¬ x, nÕu x lµ vect¬; tr¶ l¹i hai vect¬ chøa gi¸ trÞ trung bình
vµ ®é lÖch chuÈn cña tõng vect¬ cét trong ma trËn x:
function [mean, stdev] = stat(x)
% STAT Mean and standard deviation
% For a vector x, stat(x) returns the
% mean and standard deviation of x.
% For a matrix x, stat(x) returns two row vectors containing,
% respectively, the mean and standard deviation of each column.

[m n] = size(x);
if m == 1
m = n; % handle case of a row vector
end
mean = sum(x)/m;
stdev = sqrt(sum(x.^2)/m - mean.^2);

Tính toán khoa học
Ví dụ 2
• Gi¶ sö ®o¹n ch-¬ng trình trªn ®-îc lưu víi tªn
stat.m, khi ®ã lÖnh
[xm, xd] = stat(x)
sÏ g¸n gi¸ trÞ trung bình vµ ®é lÖch chuÈn cña ma trËn
x cho c¸c biÕn xm vµ xd t-¬ng øng.
• Ta còng cã thÓ lÊy mét sè ®Çu ra ®èi víi những hµm
cã nhiÒu ®Çu ra. VÝ dô, lÖnh
xm = stat(x)
(kh«ng cã dÊu ngoÆc bäc biÕn xm) sÏ g¸n gi¸ trÞ trung
bình cña x cho biÕn xm.
Tính toán khoa học
Ví dụ 3
• Hµm tÝnh -íc chung lín nhÊt cña hai sè nguyªn b»ng thuËt to¸n ¥c¬lit.
VÝ dô nµy minh ho¹ viÖc sö dông th«ng b¸o lçi trong thùc hiÖn hµm.
• Hµm néi tró cña Matlab rem(a, b) tr¶ l¹i phÇn d- (remainder) cña phÐp
chia a cho b.

function a = gcd(a,b)
a = round(abs(a)); b = round(abs(b));
if a == 0 & b == 0
error('The gcd is not defined when both numbers are zero')
else
while b ~= 0
r = rem(a,b)
a = b; b = r;
end
end

Tính toán khoa học
Ví dụ 4
• VÝ dô sau ®©y minh ho¹ kh¶ năng t¹o hµm vect¬ ho¸.
• VÝ dô 4. Hµm tÝnh gi¸ trÞ f(x) = sin(x2).
• C¸c lÖnh sau cÇn ®-îc cÊt giữ trong file văn b¶n
fcn.m (Tªn hµm trong Matlab ph¶i trïng víi tªn cña
m-file kh«ng cã phÇn më réng):
function y = fcn(x)
y = sin(x.^2);

• L-u ý lµ nhê sö dông phÐp to¸n vect¬ hãa .^ nªn hµm
fcn còng ®-îc vect¬ hãa.

Tính toán khoa học
Ví dụ 4
• Víi hµm fcn võa x¸c ®Þnh, ta cã thÓ sö dông hµm fcn
t-¬ng tù nh- lµ hµm néi tró sin:
>> x = (-pi:2*pi/100:pi)';
>> y = sin(x);
>> z = fcn(x);
>> plot(x,y,x,z)
>> grid

• Đå thÞ thu ®-îc như sau

Tính toán khoa học
Đồ thị hàm sin(x) và sin(x2)

Chó ý:
• C¸ch sö dông plot ®Ó vÏ ®ång thêi ®å thÞ cña hai (hoÆc nhiÒu h¬n)
hµm sè.
•LÖnh grid ®· hiÓn thÞ l-íi täa ®é trªn ®å thÞ.
Tính toán khoa học
Ví dụ 5
• Chó ý lµ f(x)=sin(x2) cã nghiÖm trong kho¶ng
giữa 1 vµ 2 (chÝnh x¸c nghiÖm nµy lµ
).
x 
• ThuËt to¸n tæng qu¸t ®Ó tìm nghiÖm cña
ph-¬ng trình phi tuyÕn lµ ph-¬ng ph¸p chia
®«i: Ta kh¶o s¸t hµm sè trªn ®o¹n mµ hµm sè

thay ®æi dÊu (®o¹n nµy ch¾c ch¾n chøa
nghiÖm) vµ chia ®«i liªn tôc ®o¹n chøa nghiÖm
cho ®Õn khi ®o¹n nµy lµ rÊt nhá.

Tính toán khoa học
Ví dụ 5
• Hµm bisect cµi ®Æt ph-¬ng ph¸p chia ®«i m« t¶ mét
sè kü thuËt lËp trình quan träng trªn Matlab.
• Kü thuËt quan träng ®Çu tiªn, mµ thiÕu nã kh«ng thÓ
cµi ®Æt thñ tôc chia ®«i, ®ã lµ kh¶ năng truyÒn tªn cña
mét hµm nµy cho mét hµm kh¸c. ë ®©y, bisect cÇn
biÕt tªn hµm mµ ®èi víi nã ta cÇn tìm nghiÖm.
– Tªn hµm ®-îc truyÒn d-íi d¹ng x©u.
– Hoặc lµ mçi khi ta cÇn sö dông bisect ®Ó tìm nghiÖm cña
mét hµm nµo ®ã thì ta cÇn söa l¹i file bisect.m.

Tính toán khoa học
Ví dụ 5
• Hµm néi tró feval cÇn thiÕt cho viÖc tÝnh gi¸ trÞ hµm mµ tªn cña
nã ®-îc chØ ra trong x©u. Nh- vËy, ®o¹n héi tho¹i
>> fcn(2)
vµ
>> feval('fcn',2)
lµ t-¬ng ®-¬ng (chó ý lµ dÊu nh¸y ®¬n ' ®-îc dïng ®Ó x¸c ®Þnh
x©u). Mét biÕn cã thÓ g¸n cho gi¸ trÞ cña mét x©u:
>> str = 'fcn';
>> feval(str,2)

Tính toán khoa học
Ví dụ 5
• Ch-¬ng trình Matlab sau ®©y sö dông c¸c ph-¬ng tiÖn x©u ®Ó
truyÒn tªn cña hµm cho bisect.
function c = bisect(fn,a,b,tol)
% c = bisect('fn',a,b,tol)
% Hµm nµy x¸c ®Þnh nghiÖm cña hµm sè trªn ®o¹n
% [a,b] víi sai sè tol. Gi¶ thiÕt r»ng t¹i a vµ b hµm cã gi¸ trÞ ®èi dÊu.
% TÝnh gi¸ trÞ cña hµm t¹i hai ®Çu mót vµ kiÓm tra xem cã sù thay ®æi cña
dÊu hay kh«ng
fa = feval(fn,a);
fb = feval(fn,b);
if fa*fb >= 0
error('Hµm sè ph¶i cã dÊu tr¸i ng-îc t¹i a vµ b')
end

Tính toán khoa học
Ví dụ 5
% BiÕn done ®-îc sö dông ®Ó b¸o hiÖu lµ ta tìm ®-îc nghiÖm chÝnh x¸c
% kh«ng cÇn chê ®Õn khi ®o¹n chøa nghiÖm ®ñ nhá.
done = 0;
% Bisect the interval
c = (a+b)/2;
% Main loop
while abs(a-b) > 2*tol & ~done
% TÝnh gi¸ trÞ hµm t¹i ®Çu mót
fc = feval(fn,c);
if fa*fc < 0
% NghiÖm ë bªn tr¸i c
b = c; fb = fc; c = (a+b)/2;
elseif fc*fb < 0
% NghiÖm ë bªn ph¶i c
a = c;
fa = fc; c = (a+b)/2;
else
% Tãm ®-îc nghiÖm
done = 1;
end
end
Tính toán khoa học
Ví dụ 5
• Gi¶ sö r»ng ®o¹n ch-¬ng trình trªn ®-îc cÊt
giữ trong file cã tªn bisect.m, ta cã thÓ thùc
hiÖn nã nh- sau:
>> x = bisect('fcn',1,2,1e-6)
x=
1.7725
>> sqrt(pi)-x
ans =
-4.1087e-07
Tính toán khoa học
Ví dụ 5
• m - file không chỉ tạo ra mét lÖnh míi trong Matlab mµ cïng
víi nã trî gióp hÖ thèng còng tù ®éng më réng. LÖnh help sÏ
®-a ra ®äan chó gi¶i ®Çu tiªn trong m-file:
>> help bisect
% c = bisect('fn',a,b,tol)
% Hµm nµy x¸c ®Þnh nghiÖm cña hµm sè trªn ®o¹n
% [a,b] víi sai sè tol. Gi¶ thiÕt r»ng t¹i a vµ b hµm cã gi¸ trÞ ®èi dÊu.
% TÝnh gi¸ trÞ cña hµm t¹i hai ®Çu mót vµ kiÓm tra xem cã sù thay ®æi cña dÊu hay
kh«ng

• NÕu muèn xem néi dung cña c¶ file chøa hµm h·y sö dông
lÖnh:
type filename

trong ®ã filename lµ tªn file cÇn xem néi dung (phÇn më réng
ngÇm ®Þnh lµ .m).
Tính toán khoa học
C¸c phÐp tÝnh ma trËn n©ng cao

Tính toán khoa học
TrÞ riªng vµ vect¬ riªng
• Mét trong những phÐp tÝnh rÊt hay ph¶i thùc hiÖn víi ma trËn
®ã lµ tìm gi¸ trÞ riªng vµ vect¬ riªng víi lÖnh eig. NÕu A lµ ma
trËn vu«ng, thì
ev = eig(A)
sÏ cho ta gi¸ trÞ riªng cña A trong mét vect¬, cßn
[V,D] = eig(A)
cho ta ph©n tÝch phæ cña A:
– V lµ ma trËn mµ c¸c cét cña nã lµ c¸c vect¬ riªng cña A,
– D lµ ma trËn ®-êng chÐo víi c¸c phÇn tö trªn ®-êng chÐo lµ c¸c trÞ
riªng cña A.
– Đ¼ng thøc AV = VD ®-îc thùc hiÖn.
– NÕu A lµ chÐo ho¸, thì V lµ chÐo ho¸, cßn nÕu A lµ ®èi xøng thì V lµ
trùc giao (nghÜa lµ VTV = I).
Tính toán khoa học
Ví dụ
A = [1 3 2;4 5 6;7 8
>> eig(A)
ans =
15.9743
-0.4871 + 0.5711i
-0.4871 - 0.5711i
>> [V,D] = eig(A)
V =
-0.2155
-0.5277
-0.8216
D =
15.9743
0
0
>> A*V-V*D
ans = 1.0e-14 *
-0.0888
0
0

9];

0.0683 + 0.7215i
-0.3613 - 0.0027i
0.2851 - 0.5129i

0.0683 - 0.7215i
-0.3613 + 0.0027i
0.2851 + 0.5129i

0
-0.4871 + 0.5711i
0

0
0
-0.4871 - 0.5711i

0.0777 - 0.1998i
-0.0583 + 0.0666i
-0.0555 + 0.2387i

0.0777 + 0.1998i
-0.0583 - 0.0666i
-0.0555 - 0.2387i

Tính toán khoa học
Ví dụ: A là ma trận đường chéo
>> A=[1 2 3; 0 3 4; 0 0 5]
A =
1
2
3
0
3
4
0
0
5
>> [V, D]=
V =
1.0000
0
0
D =
1
0
0

eig(A)
0.7071
0.7071
0

0
3
0

0.6163
0.7044
0.3522

0
0
5
Tính toán khoa học
Ví dụ: A là ma trận đối xứng
>> A=[5 6 7; 6 7 8; 7 8 9]
A =
5
6
7
6
7
8
7
8
9
>> [V, D]= eig(A); V
V =
0.7685
0.4082
0.4927
0.0660
-0.8165
0.5736
-0.6365
0.4082
0.6544
>> V*V'
ans =
1.0000
-0.0000
0.0000
-0.0000
1.0000
0.0000
0.0000
0.0000
1.0000
Tính toán khoa học
Các phép toán nâng cao
• Matlab cßn cung cÊp rÊt nhiÒu hµm liªn quan ®Õn xö lý ma
trËn. PhÇn lín c¸c hµm nh- vËy liªn quan ®Õn ph©n tÝch ma
trËn d-íi d¹ng tÝch. Mét sè phÐp ph©n tÝch hay dïng trong sè
c¸c ph©n tÝch nh- vËy lµ:
– lu
tÝnh ph©n tÝch LU cña ma trËn;
– chol tÝnh ph©n tÝch Cholesky cña ma trËn ®èi xøng x¸c ®Þnh
d-¬ng;
– qr
tÝnh ph©n tÝch QR cña ma trËn;
– svd tÝnh trÞ chÝnh qui (singular values) hay trÞ chÝnh qui ph©n r·
(singular value decomposition) cña ma trËn;
– cond, condest, rcond tÝnh hoÆc ®¸nh gi¸ c¸c sè ®iÒu kiÖn cña ma
trËn (condition numbers);
– norm tÝnh c¸c lo¹i chuÈn (norms) cña ma trËn hay vect¬;

Tính toán khoa học
TÝnh to¸n víi ma trËn th-a
(Sparse matrix computations)
• Matlab cã kh¶ năng cÊt giữ vµ lµm viÖc víi c¸c ma
trËn th-a. ĐiÒu nµy gióp phÇn n©ng cao kh¶ năng øng
dông cña Matlab vµo viÖc gi¶i quyÕt c¸c vÊn ®Ò cña
thùc tÕ.
• T¹o ma trËn th-a cã thÓ cã ®«i chót phøc t¹p h¬n,
trong khi lµm viÖc víi chóng l¹i ®¬n gi¶n h¬n, bëi vì
c¸c phÐp to¸n cã thÓ ¸p dông ®èi víi c¶ ma trËn th-a
lÉn ma trËn dµy. Ch¼ng h¹n, to¸n tö chia cã lµm viÖc
víi c¶ ma trËn th-a, vì thÕ hÖ th-a cã thÓ gi¶i ®-îc
gièng nh- lµ hÖ dµy.
• Mét sè hµm néi tró cña Matlab cã thÓ lµm viÖc víi ma
trËn th-a nh-ng kh«ng ¸p dông cho ma trËn dµy
Tính toán khoa học
T¹o ma trËn th-a
• NÕu ma trËn A ®-îc cÊt giữ trong d¹ng th«ng th-êng (dµy),
thì lÖnh S = sparse(A) t¹o b¶n sao cña A ®-îc cÊt giữ trong
d¹ng th-a. VÝ dô:
>> A = [0 0 1;1 0 2;0 -3 0]
A=
0 0 1
1 0 2
0 -3 0
>> S = sparse(A)
S=
(2,1)
1
(3,2)
-3
(1,3)
1
(2,3)
2
Tính toán khoa học
T¹o ma trËn th-a
>> whos
Name
Size
Bytes Class
A
3x3
72 double array
S
3x3
64 sparse array
Grand total is 13 elements using 136 bytes

• RÊt tiÕc lµ d¹ng nµy cña lÖnh sparse lµ kh«ng
cã Ých nhiÒu l¾m, bëi vì ma trËn A th-êng lµ
rÊt lín vµ viÖc t¹o tr-íc nã trong d¹ng dµy ®ßi
hái rÊt nhiÒu thêi gian.
Tính toán khoa học
T¹o ma trËn th-a
• Matlab cung cÊp mét sè c¸ch nhËp ma trËn
th-a tiÖn lîi h¬n. LÖnh
S = sparse(m,n)
t¹o mn ma trËn toµn sè 0 d-ới d¹ng th-a. Sau
®ã c¸c thµnh phÇn kh¸c kh«ng cña nã sÏ ®-îc
bæ sung dÇn dÇn:
>> A = sparse(3,2)
A=
All zero sparse: 3-by-2
Tính toán khoa học
T¹o ma trËn th-a
• Tiếp theo ta đánh vào các phần tử khác không
>> A(1,2)=1;
>> A(3,1)=4;
>> A(3,2)=-1;
>> A
A =
(3,1)
(1,2)
(3,2)

4
1
-1

• (Râ rµng c¸ch lµm nµy lµ tiÖn lîi h¬n, do ta kh«ng
ph¶i nhËp c¸c phÇn tö 0 cña ma trËn)
Tính toán khoa học
T¹o ma trËn th-a
• Cßn cã nhiÒu kh¶ năng sö dông kh¸c cña lÖnh
sparse. H·y sö dông help sparse ®Ó xem chi tiÕt
thªm vÒ lÖnh nµy.

Tính toán khoa học
T¹o ma trËn th-a
>> Mét

trong những d¹ng ma trËn th-a rÊt phæ biÕn lµ
ma trËn d¹ng băng, tøc lµ ma trËn víi c¸c phÇn tö
kh¸c 0 chØ n»m trªn mét sè ®-êng chÐo nµo ®ã. C¸c
ma trËn nh- vËy cã thÓ t¹o bëi lÖnh spdiags. XÐt ma
trËn sau:

A=[
64
-16
0
-16
0
0
0
0
0

-16 0 -16 0 0 0 0 0;
64 -16 0 -16 0 0 0 0;
-16 64 0 0 -16 0 0 0;
0 0 64 -16 0 -16 0 0;
-16 0 -16 64 -16 0 -16 0;
0 -16 0 -16 64 0 0 -16;
0 0 -16 0 0 64 -16 0;
0 0 0 -16 0 -16 64 -16;
0 0 0 0 -16 0 -16 64]
Tính toán khoa học
T¹o ma trËn th-a
• Đ©y lµ ma trËn kÝch th-íc 99 víi 5 ®-êng chÐo kh¸c
kh«ng. Trong c¸ch chØ sè ho¸ cña Matlab, chØ sè cña
c¸c ®-êng chÐo kh¸c kh«ng cña A lµ -3, -1, 0, 1, and
3 (®-êng chÐo chÝnh cã chØ sè lµ 0, c¸c ®-êng chÐo
trªn nã ®-îc tiÕp tôc ®¸nh sè tăng dÇn b¾t ®Çu tõ 1,
c¸c ®-êng chÐo d-íi nã ®-îc tiÕp tôc ®¸nh sè gi¶m
dÇn b¾t ®Çu tõ -1). ĐÓ t¹o ma trËn nµy d-íi d¹ng th-a,
tr-íc hÕt cÇn t¹o ma trËn kÝch th-íc 95 chøa c¸c
phÇn tö kh¸c 0 cña c¸c ®-êng chÐo. TÊt nhiªn, mçi
®-êng chÐo lµ mét vect¬ cét cã kÝch th-íc kh¸c nhau,
chØ cã ®-êng chÐo chÝnh cã ®é dµi 9.
Tính toán khoa học
T¹o ma trËn th-a
• ĐÓ tËp hîp tÊt c¶ c¸c ®-êng chÐo trong mét ma trËn, c¸c ®-êng chÐo
cã ®é dµi ng¾n h¬n cÇn ®-îc bæ sung thªm c¸c sè 0 ®Ó ®-îc vect¬ cét
cã cïng kÝch th-íc víi ®-êng chÐo chÝnh. Qui t¾c bæ sung lµ: Nèi ®u«i

®èi víi c¸c ®-êng chÐo n»m d-íi ®-êng chÐo chÝnh, vµ nèi ®Çu ®èi víi
c¸c ®-êng chÐo n»m trªn ®-êng chÐo chÝnh. Nh- vËy ta cÇn t¹o ma
trËn:
>> B = [
-16 -16
-16 -16
-16 0
-16 -16
-16 -16
-16 0
0 -16
0 -16
0 0

64 0 0
64 -16 0
64 -16 0
64 0 -16
64 -16 -16
64 -16 -16
64 0 -16
64 -16 -16
64 -16 -16];
Tính toán khoa học
T¹o ma trËn th-a
• Trong ví dụ trên: CÇn l-u ý ®Õn kü thuËt t¹o c¸c
dßng cña ma trËn kÝch th-íc lín trªn d·y c¸c dßng.
• LÖnh spdiags còng ®ßi hái vect¬ chØ sè cña c¸c ®-êng
chÐo:
>> d = [-3,-1,0,1,3];
• B©y giê ma trËn cã thÓ t¹o nh- sau:
S = spdiags(B,d,9,9);
• Hai ®èi sè cuèi cïng cho kÝch th-íc cña ma trËn S.

Tính toán khoa học
T¹o ma trËn th-a
• Cã lÏ ma trËn th-a hay dïng nhÊt lµ ma trËn ®¬n vÞ.
Nhí l¹i lµ ma trËn ®¬n vÞ cã thÓ t¹o d-íi d¹ng dµy bëi
lÖnh eye. ĐÓ t¹o ma trËn ®¬n vÞ th-a, cã thÓ dïng lÖnh
I = speye(n)
• Mét lÖnh tiÖn Ých kh¸c lµ
spy
– LÖnh nµy hiÓn thÞ ®å thÞ cÊu tróc th-a cña ma trËn. VÝ dô,
cÊu tróc th-a cña ma trËn S ë trªn cã thÓ hiÓn thÞ nhê ®¸nh
lÖnh:

>> spy(S)

Tính toán khoa học
Đå ho¹ n©ng cao

Matlab cã thÓ ®-a ra nhiều d¹ng ®å thÞ kh¸c nhau:
–
–
–
–
–

®-êng cong hai chiÒu (2D curves),
mÆt 3 chiÒu (3D surfaces),
®-êng khung cña mÆt 3 chiÒu (contour plots of 3D surfaces),
®-êng cong tham sè 2D vµ 3D (parametric curves in 2D and 3D).
.....

Tính toán khoa học
Đ-a nhiÒu ®å thÞ lªn cïng mét cöa sæ
• LÖnh subplot t¹o nhiÒu b¶n vÏ trªn cïng mét cöa sæ. ChÝnh x¸c
h¬n, subplot(m,n,i) t¹o mn b¶n vÏ, ®-îc xÕp trong m¶ng víi m
dßng vµ n cét. LÖnh nµy còng b¾t buéc lÖnh plot tiÕp theo ph¶i
chuyÓn ®Õn hÖ to¹ ®é thø i (®Õm theo sè dßng). VÝ dô
>> t = (0:.1:2*pi)';
>> subplot(2,2,1)
>> plot(t,sin(t))
>> subplot(2,2,2)
>> plot(t,cos(t))
>> subplot(2,2,3)
>> plot(t,exp(t))
>> subplot(2,2,4)
>> plot(t,1./(1+t.^2))

Tính toán khoa học
Đưa ra nhiều đồ thị

Tính toán khoa học
Vẽ đường
• Hµm plot ®-îc sö dông ®Ó vÏ dữ liÖu trªn mÆt ph¼ng.
Cho vect¬ x gåm c¸c hoµnh ®é x1, ..., xn vµ vect¬ y
gåm c¸c tung ®é y1,..., yn, lÖnh plot(x,y) sÏ vÏ c¸c
®iÓm tõ (x1, y1) ®Õn (xn, yn). Theo ngÇm ®Þnh c¸c
®iÓm nµy sÏ ®-îc nèi theo thø tù bëi c¸c ®o¹n th¼ng.
• Tæng qu¸t c©u lÖnh cã d¹ng sau
plot(x1, y1,linestyle1,...,xn,yn,linestylen)

trong ®ã linestylei (i=1,2,..., n) lµ x©u hoÆc biÕn x©u
chøa kiÓu ®-êng vÏ.

Tính toán khoa học
Vẽ đường
• C©u lÖnh nµy cho phÐp vÏ c¸c bé dữ liÖu:
(x1,y1) víi kiÓu ®-êng vÏ linestyle1, (x2,y2)
víi kiÓu ®-êng vÏ linestyle2, ..., (xn,yn) víi
kiÓu ®-êng vÏ linestylen trªn cïng mét hệ trục
toạ độ.
• KiÓu ®-êng vÏ x¸c ®Þnh mµu vÏ, ký tù dïng ®Ó
hiÓn thÞ ®iÓm dữ liÖu vµ d¹ng cña ®-êng nèi.
KiÓu ®-êng vÏ lµ x©u ®-îc t¹o b»ng c¸ch ghÐp
c¸c ký tù tõ c¸c cét sau, mçi cét lÊy kh«ng qu¸
mét ký tù:
Tính toán khoa học
Vẽ đường
MÇu cña ®-êng vÏ
y yellow
m magenta
c cyan
r red
g green
b blue
w white
k black

Ký tù hiÓn thÞ
.
o
x
+
*
s
d
v
^
<
>
p

dÊu chÊm (point)
vßng trßn (circle)
dÊu x (x-mark)
dÊu céng (plus)
dÊu sao (star)
h×nh vu«ng (square)
kim c-¬ng (diamond)
tam gi¸c chØ xuèng
tam gi¸c chØ lªn
tam gi¸c chØ sang tr¸i
tam gi¸c chØ sang phải
«ng sao 5 c¸nh
(pentagram)
h «ng sao 6 c¸nh (hexagram)

Tính toán khoa học

NÐt vÏ
:
-.
--

solid
dotted
dashdot
dashed
Vẽ đường
• VÝ dô.
– LÖnh plot(x,y,'ro:') vÏ ®-êng nèi bëi c¸c chÊm mµu
®á víi ®iÓm dữ liÖu lµ vßng trßn nhá.
– LÖnh plot(x,y,'gd') vÏ c¸c ®iÓm dữ liÖu hình d¹ng
kim c-¬ng mµu xanh l¸ c©y mµ kh«ng nèi c¸c
®iÓm nµy.
– LÖnh plot(x,y,'y-',x,y,'go') vÏ dữ liÖu hai lÇn víi
®-êng nèi liÒn nÐt mµu vµng vµ c¸c ®iÓm dữ liÖu lµ
c¸c vßng trßn xanh l¸ c©y.

Tính toán khoa học
Vẽ đường
• ĐÓ vÏ tø gi¸c víi c¸c ®Ønh (0,0), (1,1), (4,2) vµ
(5,-1) ta cã thÓ sö dông c¸c lÖnh sau
>> x=[0 1 4 5 0];
>> y=[0 1 2 -1 0];
>> plot(x,y)

Tính toán khoa học
Vẽ đường
• Ta cã thÓ vÏ gÇn ®óng ®å thÞ cña hµm sè nhê vÏ nhiÒu ®iÓm
trªn ®å thÞ cña nã.
• VÝ dô: VÏ ®å thÞ cña hµm y=x3 trªn ®o¹n [-2,2],
– Tr-íc hÕt x¸c ®Þnh vect¬ lưới chia đoạn [-2, 2] với ®é dµi b-íc chia lµ
0.05
>> x=-2:.05:2;
– TiÕp ®Õn tÝnh vect¬ y cã kÝch th-íc gièng x víi c¸c thµnh phÇn lµ luü
thõa bËc ba cña c¸c thµnh phÇn cña vect¬ x
>> y=x.^3;
– Sö dông lÖnh plot(x, y) ®Ó vÏ ®å thÞ cña hµm sè:
>> plot(x,y)
– ĐÆt tªn cho hình vÏ nhê ®¸nh lÖnh
>> title('Graph of f(x)=x^3')

Tính toán khoa học
Đå thÞ hµm sè y = x3

Tính toán khoa học
Vẽ đường cong tham số
• ViÖc vÏ c¸c ®-êng cong tham sè cã thÓ thùc hiÖn mét
c¸ch t-¬ng tù. VÝ dụ: ĐÓ vÏ ®-êng
r(t) = (2tcost/(t+1), 2tsint/(t+1)) víi t  [0,4],
tr-íc hÕt ta x¸c ®Þnh vect¬ lưới chia t:
>> t=0:.1:4*pi;

TiÕp ®Õn tÝnh c¸c to¹ ®é x, y vµ vÏ ®-êng cong:
>> x=2*t.*cos(t)./(t+1);
>> y=2*t.*sin(t)./(t+1);
>> plot(x,y);
>> title('(2tcost/(t+1),2tsint/(t+1))')

Tính toán khoa học
Vẽ đường cong tham số
• MATLAB tù ®éng phãng c¸c trôc ®Ó ®å thÞ lÊp ®Çy mµn hình.
ĐÓ cã ®-îc tû lÖ chÝnh x¸c h·y ®¸nh lÖnh axis equal.
>> axis equal

Tính toán khoa học
Vẽ đường
• ĐÓ vÏ nhiÒu ®-êng trªn cïng mét hình vÏ, h·y
sö dông lÖnh hold on.
• VÝ dô: VÏ hai vßng trßn
x2 + y2 = 4 vµ (x-1)2 + (y-1)2 = 1.
• Ph-¬ng trình tham sè cña chóng lµ
r1(t)=(2cost,2sint)
vµ
r2(t)=(1+cost,1+sint) víi t  [0,2].
Tính toán khoa học
Vẽ đường
>> t=0:pi/20:2*pi;
>> plot(2*cos(t),2*sin(t))
>> hold on
>> plot(1+cos(t),1+sin(t))
>> axis equal
>> title('The circles x^2+y^2=4 and (x-1)^2
+(y-1)^2=1')

Tính toán khoa học
Vẽ đường cong 3D
• Trong kh«ng gian 3 chiÒu lÖnh t-¬ng tù nhplot lµ plot3.
• VÝ dô. ĐÓ vÏ ®-êng tham sè
r(t)=(cos(t),sin(t),t) víi t  [0,8]
ta thùc hiÖn c¸c lÖnh sau.
>> t=0:.1:8*pi;
>> plot3(cos(t),sin(t),t)
>> title('(cos t,sin t,t)')
Tính toán khoa học
Vẽ đường cong 3D

Tính toán khoa học
Vẽ đường cong trong toạ độ cực
• VÝ dô. ĐÓ vÏ ®-êng trong to¹ ®é cùc =2, víi
05 ta cã thÓ ®¸nh c¸c lÖnh sau
>>theta = 0:0.2:5*pi;
>>rho=theta.^2;
>>polar(theta,rho,'hb')

Tính toán khoa học
Vẽ đường cong trong toạ độ cực

Tính toán khoa học
Vẽ mặt
• ĐÓ vÏ ®å thÞ cña hµm sè f(x,y) trªn miÒn hình
chữ nhËt
R = [a,b]×[c,d] = {(x,y) | a x  b; c  y  d},
tr-íc hÕt ta cÇn t¹o l-íi ®iÓm trong miÒn kh¶o
s¸t nhê hµm meshgrid:
[X,Y] = meshgrid(x,y)

• tạo lưới chia hình chữ nhật được mô tả bởi
vectơ x, y trong hai mảng X, Y. Các dòng
trong X là các bản sao của vectơ x, các cột
trong Y là các bản sao của vectơ y
Tính toán khoa học
Vẽ mặt
• VÝ dô, ®Ó chia l-íi miÒn chữ nhËt [0,4]  [0,3]
thµnh c¸c l-íi chữ nhËt con kÝch th-íc réng 1
cao 0.5, tr-íc hÕt ta t¹o vect¬ x vµ y x¸c ®Þnh
phÐp chia l-íi.
>> x=0:4;
>> y=0:.5:3;

• TiÕp ®Õn dïng meshgrid ®Ó x¸c ®Þnh c¸c ®iÓm
trªn l-íi.
>> [X,Y]=meshgrid(x,y)
Tính toán khoa học
Vẽ mặt
• Gi¶ sö ta cÇn vÏ ®å thÞ cña hµm sè
f(x,y)=3x - 2y.
• Khi ®ã ta cÇn tÝnh ma trËn Z gåm c¸c to¹ ®é
theo trôc z.
>> Z=3*X-2*Y

• Cuèi cïng sö dông lÖnh surf ®Ó vÏ mÆt.
>> surf(X,Y,Z)
>> title('Graph of f(x,y)=3x-2y')
Tính toán khoa học
Vẽ mặt

Tính toán khoa học
Vẽ mặt
• TiÕp theo ta xÐt viÖc vÏ ®å thÞ cña hµm:
f(x,y)=x2y - 2y trªn miÒn [-2,2]  [-1,1].
• Ta sö dông l-íi vu«ng víi ®é dµi b-íc chia 0.1:
>> [X,Y]=meshgrid(-2:.1:2,-1:.1:1);

• Sö dông phÐp to¸n vect¬ ho¸ ®Ó x¸c ®Þnh Z.
>> Z=(X.^2).*Y-2*Y;

• Cuèi cïng ta vÏ mÆt nhê lÖnh.
>> surf(X,Y,Z)
>> title('Graph of f(x,y)=x^2y-2y')

Tính toán khoa học
Vẽ mặt

Tính toán khoa học
Vẽ mặt
• Mét trong những khã khăn khi vÏ mÆt lµ ph¶i
®èi mÆt víi phÐp chia cho 0. Ch¼ng h¹n, ta
muèn vÏ ®å thÞ cña hµm sè

f ( x, y ) 

xy
x y
2

2

• trªn l-íi vu«ng [-1, 1]  [-1, 1].

Tính toán khoa học
Vẽ mặt
• Sử dụng các lệnh
>> [X,Y]=meshgrid(-1:.1:1);
>> Z=X.*Y./sqrt(X.^2+Y.^2);
Warning: Divide by zero.

• Lỗi do (0,0) là điểm thuộc lưới chia.
• NÕu ta cø vÏ mÆt thì ®iÓm cña l-íi t¹i (0,0) sÏ
khuyÕt

Tính toán khoa học
Vẽ mặt
• ĐÓ tho¸t khái tình huèng nµy mét c¸ch lµm
®¬n gi¶n lµ h·y x¸c ®Þnh l-íi sao cho ®iÓm
(0,0) kh«ng thuéc l-íi ®iÓm chia.
• Ch¼ng h¹n, ta cã thÓ tiÕn hµnh nh- sau
>> [X,Y]=meshgrid(-.99:.1:1);
>> Z=X.*Y./sqrt(X.^2+Y.^2);
>> surf(X,Y,Z)
>> title('Graph of f(x,y)=xy/surd(x^2+y^2)')
>> axis equal

Tính toán khoa học
Vẽ mặt

Tính toán khoa học
Vẽ mặt
• VÝ dô. VÏ

z = sin(r)/r
• víi

r  x  y , 8  x  8;  8  y  8.
2

2

x = -8:0.5:8; y = -8:0.5:8;
[X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
mesh(X,Y,Z)
Tính toán khoa học
Vẽ mặt

Tính toán khoa học
Vẽ mặt
• ĐiÓm kh¸c nhau giữa hai lÖnh vÏ surf vµ mesh lµ:
surf t« mµu bÒ mÆt, cßn mesh thì kh«ng.
• ViÖc vÏ mÆt tham sè ®-îc tiÕn hµnh mét c¸ch t-¬ng
tù. Cho ph-¬ng trình tham sè

r(u,v)=(x(u,v),y(u,v),z(u,v))
cña mÆt, trong ®ã miÒn biÕn thiªn cña (u,v) lµ hình
chữ nhËt, tr-íc hÕt ta t¹o l-íi theo c¸c tham sè u vµ v,
sau ®ã x¸c ®Þnh c¸c to¹ ®é x, y vµ z theo l-íi nµy sö
dông ph-¬ng trình tham sè.

Tính toán khoa học
Vẽ mặt

• VÝ dô. XÐt mÆt cÇu b¸n kÝnh t©m t¹i gèc to¹ ®é cña kh«ng
gian R3 cã ph-¬ng trình tham sè

r ( , )  (  sin  cos  , sin  sin  ,  cos  );
0     ; 0    2
• Gi¶ sö ta cÇn vÏ mÆt cÇu ®¬n vÞ.
• Tr-íc hÕt ta t¹o l-íi theo c¸c tham sè  vµ .
>> phi=0:pi/20:pi;
>> theta=0:pi/10:2*pi;
>> [Phi,Theta]=meshgrid(phi,theta);
Tính toán khoa học
Vẽ mặt
• TiÕp theo ta sö dông ph-¬ng trình tham sè víi r =
1 ®Ó tÝnh c¸c to¹ ®é x, y vµ z
>> X=sin(Phi).*cos(Theta);
>> Y=sin(Phi).*sin(Theta);
>> Z=cos(Phi);

• Cuèi cïng ta vÏ mÆt vµ phãng trôc sao cho thu
®-îc hình ¶nh tr«ng gièng mÆt cÇu h¬n.
>> surf(X,Y,Z)
>> axis equal
>> title('Unit sphere in {bf R}^3')
Tính toán khoa học
Vẽ mặt

Tính toán khoa học
Đa thức trong Matlab
• Đa thức bậc n
P= anxn +an-1xn-1+…+a1x+a0

• Biểu diễn bằng vector hàng n+1 phần tử
– Sắp xếp hệ số từ bậc cao nhất đến bậc 0
– Ví dụ p=3x4 + x2 -3x+5
• >>p=[3 0 1 -3 5]
• p= 3 0 1 -3 5

Tính toán khoa học
Các phép tính với đa thức

Tính toán khoa học
Các phép tính với đa thức
• Ví dụ 1:
>> r=[1 3];
>> p=poly(r)
p=1–4 3
>>polyval(p,[1 3 5])
ans =
0 0 8

• Ví dụ 2:
x 4  3x  14 ( x 4  16  3x  2)

2
x 4
x2  4
1
2
 x2  4 

x2 x2
k(x)=x2 +4
r=[1 2]

p=[-2 2]

>> printsys(r,p,’x’)
num/den =
x+3
------------x^2 - 4 x + 3
Tính toán khoa học
Các phép tính với đa thức
Ví dụ 3:

Tính toán khoa học
Biểu thức chữ

Tính toán khoa học
Tính toán trên biểu thức chữ
• Tính toán biểu thức chữ gồm 3 bước
– Khai báo biến chữ
– Nhập hàm chữ
– Dùng các hàm chuẩn để tính toán hàm chữ

• Khai báo biến chữ: có 2 cách
– Khai báo 1 hoặc nhiều biến cùng lúc
syms bien_1 bien_2 … bien_n

– Khai báo từng biến
• tenbien= sym(‘tenbien’)
Tính toán khoa học
Tính toán trên biểu thức chữ
• Nhập hàm chữ
– Nhập sau khai báo syms hoặc sym
– Nhập đồng thời với khai báo sym
• Tenham=sym(‘bieu thuc chu’);

• Ví dụ: nhập hàm x2  12x  4

Tính toán khoa học
Tính toán trên biểu thức chữ
• Các hàm xử lý hàm chữ chứa trong thư
mục ToolboxesSymbolic Math

Tính toán khoa học
Tính toán trên biểu thức chữ

Tính toán khoa học
Tính toán trên biểu thức chữ
• Ví dụ:
–
–
–
–
–

cho hàm y = x2 + 2x +3
Tìm đạo hàm bậc 1 và bậc 2 của y
Tìm giới hạn y/x khi x tiến tới 
Tính tích phân hàm y trong đoạn [1, 3]
Tìm nghiệm của phương trình y = 0

Tính toán khoa học
Tính toán trên biểu thức chữ
–
–
–
–

syms x;
y = x^2+2*x+3;
% y=sym(‘x^2+2*x+3’);
Dy=diff(y) % đạo hàm bậc nhất
• Dy =2 *x +2

– D2y=diff(y,2) % đạo hàm bậc 2
• D2y = 2

– B=limit(y/x,x,inf,’left’) % tìm giới hạn trái
• B = inf

Tính toán khoa học
Tính toán trên biểu thức chữ
– c = int(y,1,3)

% tích phân xác định

• C =68/3

– r= solve(y)

% tìm nghiệm

r=
-1+i*2^(1/2)
-1-i*2^(1/2)

– Ngoài ra có thể tìm nghiệm của PT trên bằng nhiều
cách
• r = solve (‘x^2+2*x+3’)
• r = roots([1 2 3])
Tính toán khoa học
Vào-Ra dữ liệu
• Vào dữ liệu từ bàn phím
– Các lệnh liên quan đến nhập dữ liệu từ bàn phím: input,
keyboard, menu và pause.

• Lệnh input: Lệnh này đưa ra thông báo nhắc người
sử dụng nhập dữ liệu và nhận dữ liệu đánh từ bàn
phím. Lệnh có dạng
R = input(string)
trong đó R là tên biến, string là xâu ký tự chứa thông
báo nhắc người sử dụng biết về dữ liệu cần nạp. Dữ
liệu có thể là biểu thức bất kỳ. Nếu người sử dụng ấn
Enter ngay thì R sẽ là ma trận rỗng.
Tính toán khoa học
Vào dữ liệu từ bàn phím
• Ví dụ:
>> m=input('Nhap so dong cua ma tran: ')
Nhap so dong cua ma tran: 3
m =
3
>> n = input('Hay nhap so cot cua ma tran
n =')
Hay nhap so cot cua ma tran n =5
n =
5

Tính toán khoa học
Vào dữ liệu từ bàn phím
• Ví dụ
>> a =input('Hay nhap cac phan tu cua ma tran a
theo khuon dang:n [Cacphan tu dong 1 ;n
...
n Cac phan tu dong m] : nn')
Hay nhap cac phan tu cua ma tran a theo khuon dang:
[Cacphan tu dong 1 ;
...
Cac phan tu dong m] :
[1 2 3 4 5;
6 7 8 9 10;
11 12 13 14 15]

Tính toán khoa học
Vào-Ra dữ liệu
• Lệnh keyboard
– Khi lệnh này được đặt trong m – file thì nó ngắt
việc thực hiện chương trình.
– Màn hình xuất hiện dấu nhắc >>K.
– Người sử dụng có thể xem hoặc biến đổi giá trị các
biến bằng các lệnh của Matlab.
– Chấm dứt chế độ dùng Enter.
– Tiện lợi cho việc gỡ rối (debug) chương trình.

Tính toán khoa học
Vào-Ra dữ liệu
• Lệnh menu: Cho phép tạo bảng lựa chọn. Lệnh có
dạng sau.
CHOICE = menu(HEADER,ITEM1,..., ITEMn)
– Lệnh sẽ hiển thị tiêu đề của bảng chọn chứa trong xâu
HEADER, tiếp đến là dãy các lựa chọn trong các xâu:
ITEM1, …, ITEMn.
– Chỉ số của lựa chọn sẽ được trả lại cho biến CHOICE.

• Trong màn hình đồ họa Matlab sẽ hiển thị bảng lựa
chọn trong một cửa sổ MENU với các phím ấn chọn.

Tính toán khoa học
Vào-Ra dữ liệu
• Ví dụ:
>> CHOICE = menu('Hay chon cach vao du
lieu: ','Keyboard', 'File
','Random ' )

• Trên màn hình đồ họa hiển thị bảng lựa chọn:

• Người sử dụng chọn bằng việc click chuột vào lựa chọn
cần thiết.
Tính toán khoa học
Vào-Ra dữ liệu
• Cách sử dụng khác của menu
CHOICE = menu(HEADER, ITEMLIST)

trong đó ITEMLIST là mảng xâu.
• Ví dụ:
>> ItemList={'Input','Run','Output'};
>> HEADER='Select:';
>> CHOICE = MENU(HEADER, ItemList)
CHOICE =
1
Tính toán khoa học
Vào-Ra dữ liệu
• LÖnh pause: Sö dông ®Ó chê tr¶ lêi cña ng-êi sö dông.
pause(n)
trong ®ã n cã thÓ lµ sè kh«ng nguyªn. PAUSE(n) sÏ dõng n
seconds råi míi tiÕp tôc.
• LÖnh pause kh«ng cã tham sè sÏ dõng cho ®Õn khi ng-êi sö
dông gâ mét phÝm.
• LÖnh
pause off
chØ thÞ r»ng tÊt c¶ c¸c lÖnh PAUSE or PAUSE(n) ®i sau nã sÏ
kh«ng cã t¸c dông.
• LÖnh
pause on
chØ thÞ r»ng c¸c lÖnh PAUSE sau nã sÏ cã t¸c dông ng¾t.
Tính toán khoa học
Đưa ra màn hình
• Đưa ra màn hình nội dung mảng
– Gõ tên biến không có ; cuối lệnh

• Ví dụ:
>> x = [1 2 3];
>> y=[2; 3; 4];
>> x*y
ans =
20

Tính toán khoa học
Đưa ra màn hình
• Lệnh disp:
– Dùng để hiển thị nội dung của biến ra màn hìnhvà không hiển thị tên biến
– Làm việc dù có ; hay không
– Lệnh có dạng
disp(X)
với X là biến hoặc biểu thức cần hiển thị.

• Ví dụ:
>> B = [1 2 3; 4 5 6; 7 8 9]
>> disp(B^2);
30
36
42
66
81
96
102
126
150
>> disp(B.^2);
1
4
9
16
25
36
49
64
81
Tính toán khoa học
Đưa ra màn hình
• Ví dụ: Lập bảng tính giá trị hàm sin
clc
n = input('Give number of point n = ');
x = linspace(0,1,n);
y = sin(2*pi*x);
disp(' ')
disp('!
k
!
x(k) ! sin(x(k)) !')
disp('---------------------------------')
for k=1:n
degrees = (k-1)*360/(n-1);
disp(sprintf('! %2.0f
!
%3.0f !
%6.3f
!',k,degrees,y(k)));
end
disp( ' ');
disp('x(k) is given in degrees.')
disp(sprintf('One Degree = %5.3e Radians',pi/180))
Tính toán khoa học
Đưa ra màn hình
• Kết quả thực hiện có thể có dạng:
Give number of point n = 10

!
k
!
x(k) ! sin(x(k)) !
--------------------------------!
1
!
0 !
0.000
!
!
2
!
40 !
0.643
!
!
3
!
80 !
0.985
!
!
4
!
120 !
0.866
!
!
5
!
160 !
0.342
!
!
6
!
200 !
-0.342
!
!
7
!
240 !
-0.866
!
!
8
!
280 !
-0.985
!
!
9
!
320 !
-0.643
!
! 10
!
360 !
-0.000
!
x(k) is given in degrees.
One Degree = 1.745e-002 Radians

Tính toán khoa học
Đưa ra màn hình
• Lệnh fprintf
• Lệnh có dạng
fprintf(dialog_format, danh_sach_bien)

trong đó dialog_format là biến (hằng) xâu ký
tự thông báo và các ký tự định khuôn dạng dữ
liệu ra.

Tính toán khoa học
Đưa ra màn hình
• Ví dụ:
>> A = rand(3,3)
A =
0.1389
0.6038
0.0153
0.2028
0.2722
0.7468
0.1987
0.1988
0.4451
>> fprintf('Length of matrix A: %i%i',length(A))
Length of matrix A: 3
>> fprintf('Square of A:n
%i%i%in%i%i%in%i%i%in',A^2)
Square of A:
1.447541e-0012.317550e-0011.563636e-001
2.512430e-0013.449860e-0012.625931e-001
4.598234e-0015.387547e-0013.496177e-001
Tính toán khoa học
Vào ra với file văn bản
• Matlab cung cấp các lệnh cho phép làm việc
với các file
• Ở đây chỉ hạn chế trình bày các thao tác với
file văn bản
• Các lệnh chính liên quan đến làm việc với file
văn bản của Matlab là:
– fopen, fclose
– frewind, fread, fwrite
– fscanf, fprintf..
Tính toán khoa học
Vào ra với file văn bản
• Lệnh fopen. Dùng để mở file
fileID = fopen(FILENAME, PERMISSION)
– Lệnh này mở file văn bản có tên cho bởi FILENAME
(hằng xâu ký tự hoặc biến xâu)
– Chế độ làm việc được chỉ ra bởi PERMISSION.
– PERMISSION có thể là:
• ‘rt’ mở file để đọc
• ‘wt’ mở file để ghi (nếu chưa có file sẽ tạo ra file mới có tên
FILENAME)
• ‘at’ mở file nối đuôi (tạo file mới có tên FILENAME nếu chưa có)
• ‘rt+’ mở file để đọc và ghi (không tạo file mới)

– Biến nhận dạng fileID nhận giá trị nguyên và ta sẽ sử dụng
nó để thâm nhập vào file.
Tính toán khoa học
Vào ra với file văn bản
• Trong trường hợp muốn kiểm tra lỗi mở file có
thể sử dụng lệnh
[FID, MESSAGE] = fopen(FILENAME,PERMISSION)

nếu gặp lỗi mở file biến MESSAGE sẽ chứa
thông báo lỗi.

Tính toán khoa học
Vào ra với file văn bản
• Ví dụ:
>> [fileID, MESSAGE] = fopen('ETU.txt','rt');
>> fileID
fileID =
-1
>> MESSAGE
MESSAGE =
No such file or directory

Tính toán khoa học
Vào ra với file văn bản
• Lệnh đóng file fclose: Đóng file làm việc.
ST = fclose(FID)
– Lệnh này sẽ đóng file ứng với biến nhận dạng FID
– fclose trả lại biến ST giá trị 0 nếu nó hoàn thành việc đóng
file và -1 nếu gặp lỗi.
– Lệnh ST=fclose(‘all’) đóng tất cả các file đang mở ngoại
trừ 0, 1, 2.

• Lệnh frewind.
frewind(FID)
đặt con trỏ file cua FID vào đầu file.
Tính toán khoa học
Vào ra với file văn bản
• Lệnh fscanf: Đọc dữ liệu vào từ file
[A, COUNT] = fscanf(FID, FORMAT, SIZE)
ě Lệnh này đọc dữ liệu từ file tương ứng với FID
ě Chuyển đổi dữ liệu về khuôn dạng được xác định bởi biến xâu
FORMAT
ě Gán giá trị cho mảng A
ě COUNT là biến ra tùy chọn dùng để chứa số lượng phần tử đọc được.
ě SIZE là biến tùy chọn chỉ giới hạn số phần tử được đọc vào từ file, nếu
vắng mặt thì toàn bộ file được xét. Các giá trị có thể có của biến là:
ě N : đọc không quá N phần tử từ file vào vector cột
ě Inf : đọc không quá kết thúc file
ě [M, N] : đọc không quá M*N phần tử và đưa vào ma trận kích thước không quá
MxN theo từng cột, N có thể là inf nhưng M thì phải là hữu hạn.

Tính toán khoa học
Vào ra với file văn bản
• Nếu ma trận A là kết quả của việc chuyển khuôn dạng ký tự và
biến SIZE không có dạng [M, N] thì vector dòng sẽ được trả
lại.
• FORMAT là biến chứa các ký tự chuyển đổi khuôn dạng của
ngôn ngữ C.
• Các ký tự định khuôn dạng bao gồm: %, các ký hiệu thay thế,
độ dài trường, các ký tự chuyển đổi khuôn dạng: d, i, o, u, x, e,
f, g, s, c và […] (liệt kê tập hợp).
• Nếu %s được sử dụng thì khi đọc một phần tử có thể dẫn đến
phải sử dụng một loạt các thành phần của ma trận, mỗi thành
phần giữ một ký tự.
• Hãy sử dụng %c để đọc ký tự trắng (space) và khuôn dạng %s
bỏ qua các ký tự trắng.
Tính toán khoa học
Vào ra với file văn bản
• Nếu chỉ thị định dạng gồm cả số lẫn ký tự thì
ma trận kết quả sẽ là ma trận số và mỗi ký tự
sẽ được chuyển thành số bằng giá trị mã
ASCII của nó.
• fscanf khác với lệnh này trong C ở chỗ nó là
lệnh vector hóa trả lại đối số là ma trận.
• Biến xâu định dạng sẽ được sử dụng lặp lại
cho đến khi gặp kết thúc file hoặc đọc đủ số
lượng phần tử chỉ ra bởi SIZE.
Tính toán khoa học
Vào ra với file văn bản
• Ví dụ:
• Lệnh
S = fscanf(fid,'%s')
đọc (và trả lại) một xâu.
• Lệnh
A = fscanf(fid,'%5d')
đọc các số nguyên có 5 chữ số thập phân.

Tính toán khoa học
Vào ra với file văn bản
• Ví dụ: Giả sử có file văn bản với tên “kq” chứa xâu
“Day la ket qua dua ra”. Khi đó ta có thể đọc dữ liệu
vào như sau:
>> fid=fopen('kq','rt')
fid =
3
>> x = fscanf(fid,'%s')
x =
Daylaketquaduara
>> frewind(fid)
>> x = fscanf(fid,'%s%c')
x =
Day la ket qua dua ra
Tính toán khoa học
Vào ra với file văn bản
• Ví dụ: Giả sử file văn bản Matrix.txt chứa hai dòng
1 2 3 4 5
6 7 8 9 10

• Hãy theo dõi kết quả làm việc của các lệnh sau để
thấy tác động của lệnh fscanf
>> fopen('matrix.txt','rt')
ans =
4
>> A=fscanf(4,'%i',[2,5])
A =
1
3
5
7
9
2
4
6
8
10
Tính toán khoa học
Vào ra với file văn bản
>> frewind(4);
>> B = fscanf(4,'%i',[5,2])
B =
1
6
2
7
3
8
4
9
5
10
>> frewind(4);
>> C = fscanf(4,'%i',6)
C =
1
2
3
4
5
6
Tính toán khoa học
Vào ra với file văn bản
• Lệnh fprint : ghi dữ liệu theo khuôn dạng ra file.
COUNT = FPRINTF(FID,FORMAT,A,...)

• Lệnh này sẽ định dạng các thành phần của ma trận A (và các biến tiếp theo
trong danh sách) theo khuôn dạng được xác định bởi biến xâu format, và
ghi ra file tương ứng với biến nhận dạng FID.
• Biến:
– COUNT đếm số byte dữ liệu được ghi ra.
– FID là số nguyên nhận dạng tên file thu được từ lệnh fopen. Có thể dùng số 1
nếu sử dụng thiết bị ra chuẩn (màn hình). Nếu lệnh này không có FID thì mặc
định đưa kết quả ra màn hình.
– FORMAT là biến xâu chứa các ký tự mô tả định dạng dữ liệu giống như trong
ngôn ngữ C
– Các ký tự n, r, t, b, f có thể dùng để tạo linefeed, carriage return, tab,
backspace, và formfeed character tương ứng.
– Sử dụng  để tạo dấu  và %% để tạo ký tự %.
Tính toán khoa học
Vào ra với file văn bản
• Ví dụ:
x = 0:.1:1; y = [x; exp(x)];
fid = fopen('exp.txt','w');
fprintf(fid,'%6.2f %12.8fr',y);
fclose(fid);

Tạo ra file văn bản có tên ‘exp.txt’ chứa bảng giá trị của hàm mũ.
0.00 1.00000000
0.10
0.20
0.30
0.40
0.50
. . .

1.10517092
1.22140276
1.34985881
1.49182470
1.64872127

Tính toán khoa học
MỘT SỐ VẤN ĐỀ KHÁC
• Giải các bài toán phi tuyến trong Matlab
– Ngoài các hàm cho phép thực hiện các phép tính đại số tuyến tính, Matlab còn
cung cấp rất nhiều hàm cho phép giải quyết nhiều vấn đề tính toán khác như
Tính tích phân số, Bài toán điều kiện đầu của phương trình vi phân, Tìm
nghiệm, Tối ưu hóa…
– Trong “Toolboxes” còn cung cấp hàng loạt hàm cho các mục đích sử dụng
khác nhau như để xấp xỉ spline, xư lý tín hiệu số (signal processing), tối ưu
hóa…

• Có thể xem chi tiết về các lệnh sau đây nhờ sử dụng lệnh help.
– quad, quad8 TÝnh tÝch ph©n sè;
– ode23, ode45 ph-¬ng ph¸p thÝch nghi gi¶i bµi to¸n ®iÒu kiÖn ®Çu trong ph-¬ng
trình vi ph©n th-êng;
– fzero T×m nghiÖm cña ph-¬ng trình phi tuyÕn f(x) = 0 (mét biÕn);
– fmin Cùc tiÓu ho¸ hµm mét biÕn;
– fmins Cùc tiÓu ho¸ hµm nhiÒu biÕn;
– spline t¹o c¸c spline néi suy bËc ba cho d÷ liÖu cho tr-íc.

Tính toán khoa học
MỘT SỐ VẤN ĐỀ KHÁC
• Tính thời gian thực hiện
– Có thể tính thời gin thực hiện chương trình trên
Matlab sử dụng lệnh tic bắt đầu đồng hồ đếm thời
gian và toc dừng đồng hồ đếm thời gian và hiển thị
thời gian đếm được tính bằng giây.

• Ví dụ
>> A = rand(900,900);
>> tic; B = inv(A); toc;
elapsed_time =
4.4260
Tính toán khoa học
MỘT SỐ VẤN ĐỀ KHÁC
• Mét lÖnh t-¬ng tù còng cã thÓ sö dông ®Ó tÝnh thêi
gian, ®ã lµ lÖnh cputime. LÖnh nµy tr¶ l¹i thêi gian
tÝnh b»ng gi©y kÓ tõ lóc Matlab ®-îc kÝch ho¹t vµo sö
dông.
• VÝ dô:
>> B=rand(900,900);
>> t = cputime; C=inv(B); fprintf('Thoi gian tinh: %d
seconds',cputime-t)
Thoi gian tinh: 4.497000e+000 seconds

Tính toán khoa học
MỘT SỐ VẤN ĐỀ KHÁC
• Hiệu quả của chương trình viết trên Matlab
– Các hàm người sử dụng tạo ra trong Matlab chỉ được thông
dịch chứ không biên dịch. Tức là khi m – file được thực
hiện, mỗi lệnh trong nó sẽ được đọc vào và được thực hiện
chứ không phải là một chương trình được dịch ra ngôn ngữ
máy. Chính vì điều đó các chương trình Matlab sẽ chạy
chậm hơn nhiều so với các chương trình viết trên các ngôn
ngữ lập trình cấp cao khác, chẳng hạn C hay Fortran.
– Để tận dụng được Matlab tốt hơn, hãy cố gắng sử dụng các
hàm nội trú cũng như các phép toán của Matlab mỗi khi có
thể (bởi vì, lúc đó đoạn mã biên dịch được thực hiện thay
cho thông dịch).
Tính toán khoa học
MỘT SỐ VẤN ĐỀ KHÁC
• Ví dụ hai dãy lệnh sau đây cho cùng một kết quả
>> tic;
>> t = (0:.0000001:1)';
>> y=sin(t);
>> toc
elapsed_time = 0.0400
vµ
>> tic
>> t = (0:.0000001:1)';
>> for i=1:length(t)
y(i) = sin(t(i));
end
>> toc
elapsed_time = 0.8010

• Tuy nhiên đoạn lệnh dưới đòi hỏi thời gian nhiều gấp bội đoạn
lệnh trên.
Tính toán khoa học

Mais conteúdo relacionado

Mais procurados

Hệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tínhHệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tínhThế Giới Tinh Hoa
 
Bài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu SốBài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu Sốviethung094
 
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại sốPhương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại sốKhu Tiến
 
chuong 4. dai so boole
chuong 4.  dai so boolechuong 4.  dai so boole
chuong 4. dai so boolekikihoho
 
Giải số bằng mathlab
Giải số bằng mathlabGiải số bằng mathlab
Giải số bằng mathlabdvt1996
 
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tính
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tínhTính toán khoa học - Chương 2: Hệ phương trình tuyến tính
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tínhChien Dang
 
đại số tuyến tính 2 ( không gian eculid )
đại số tuyến tính 2 ( không gian eculid )đại số tuyến tính 2 ( không gian eculid )
đại số tuyến tính 2 ( không gian eculid )Bui Loi
 
ứNg dụng tích phân tính diện tích và thể tích
ứNg dụng tích phân tính diện tích và thể tíchứNg dụng tích phân tính diện tích và thể tích
ứNg dụng tích phân tính diện tích và thể tíchThế Giới Tinh Hoa
 
Giai phuong trinh vi phan bang bien doi laplace
Giai phuong trinh vi phan bang bien doi laplaceGiai phuong trinh vi phan bang bien doi laplace
Giai phuong trinh vi phan bang bien doi laplaceKiếm Hùng
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Nhóc Nhóc
 
thuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu sothuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu soKimkaty Hoang
 
Đại số boolean và mạch logic
Đại số boolean và mạch logicĐại số boolean và mạch logic
Đại số boolean và mạch logicwww. mientayvn.com
 
Giai nhanh phuong phap tinh
Giai nhanh phuong phap tinhGiai nhanh phuong phap tinh
Giai nhanh phuong phap tinhPham Huy
 
Bai7 khai trien_taylor
Bai7 khai trien_taylorBai7 khai trien_taylor
Bai7 khai trien_taylorljmonking
 
Phương pháp Toán Lý (phương trình truyền nhiệt và phương trình Laplace)
Phương pháp Toán Lý (phương trình truyền nhiệt và phương trình Laplace)Phương pháp Toán Lý (phương trình truyền nhiệt và phương trình Laplace)
Phương pháp Toán Lý (phương trình truyền nhiệt và phương trình Laplace)Lee Ein
 
Mạng neuron, trí tuệ nhân tạo
Mạng neuron, trí tuệ nhân tạoMạng neuron, trí tuệ nhân tạo
Mạng neuron, trí tuệ nhân tạoKien Nguyen
 

Mais procurados (20)

Hệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tínhHệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tính
 
Bài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu SốBài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu Số
 
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại sốPhương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
 
chuong 4. dai so boole
chuong 4.  dai so boolechuong 4.  dai so boole
chuong 4. dai so boole
 
Cac lenh trong matlab
Cac lenh trong matlabCac lenh trong matlab
Cac lenh trong matlab
 
Giải số bằng mathlab
Giải số bằng mathlabGiải số bằng mathlab
Giải số bằng mathlab
 
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tính
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tínhTính toán khoa học - Chương 2: Hệ phương trình tuyến tính
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tính
 
đại số tuyến tính 2 ( không gian eculid )
đại số tuyến tính 2 ( không gian eculid )đại số tuyến tính 2 ( không gian eculid )
đại số tuyến tính 2 ( không gian eculid )
 
ứNg dụng tích phân tính diện tích và thể tích
ứNg dụng tích phân tính diện tích và thể tíchứNg dụng tích phân tính diện tích và thể tích
ứNg dụng tích phân tính diện tích và thể tích
 
Giai phuong trinh vi phan bang bien doi laplace
Giai phuong trinh vi phan bang bien doi laplaceGiai phuong trinh vi phan bang bien doi laplace
Giai phuong trinh vi phan bang bien doi laplace
 
Xử lý tín hiệu số
Xử lý tín hiệu sốXử lý tín hiệu số
Xử lý tín hiệu số
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05
 
Luận văn: Biến đổi Laplace và một số ứng dụng, HAY, 9đ
Luận văn: Biến đổi Laplace và một số ứng dụng, HAY, 9đLuận văn: Biến đổi Laplace và một số ứng dụng, HAY, 9đ
Luận văn: Biến đổi Laplace và một số ứng dụng, HAY, 9đ
 
thuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu sothuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu so
 
Đại số boolean và mạch logic
Đại số boolean và mạch logicĐại số boolean và mạch logic
Đại số boolean và mạch logic
 
Giai nhanh phuong phap tinh
Giai nhanh phuong phap tinhGiai nhanh phuong phap tinh
Giai nhanh phuong phap tinh
 
Bai7 khai trien_taylor
Bai7 khai trien_taylorBai7 khai trien_taylor
Bai7 khai trien_taylor
 
Phương pháp Toán Lý (phương trình truyền nhiệt và phương trình Laplace)
Phương pháp Toán Lý (phương trình truyền nhiệt và phương trình Laplace)Phương pháp Toán Lý (phương trình truyền nhiệt và phương trình Laplace)
Phương pháp Toán Lý (phương trình truyền nhiệt và phương trình Laplace)
 
Chuong01
Chuong01Chuong01
Chuong01
 
Mạng neuron, trí tuệ nhân tạo
Mạng neuron, trí tuệ nhân tạoMạng neuron, trí tuệ nhân tạo
Mạng neuron, trí tuệ nhân tạo
 

Destaque

Tính toán khoa học - Chương 7: Các phương pháp cực tiểu hóa không ràng buộc
Tính toán khoa học - Chương 7: Các phương pháp cực tiểu hóa không ràng buộcTính toán khoa học - Chương 7: Các phương pháp cực tiểu hóa không ràng buộc
Tính toán khoa học - Chương 7: Các phương pháp cực tiểu hóa không ràng buộcChien Dang
 
Tính toán khoa học - Chương 0: Introduction
Tính toán khoa học - Chương 0: IntroductionTính toán khoa học - Chương 0: Introduction
Tính toán khoa học - Chương 0: IntroductionChien Dang
 
Tính toán khoa học - Chương 4: Giải phương trình phi tuyến
Tính toán khoa học - Chương 4: Giải phương trình phi tuyếnTính toán khoa học - Chương 4: Giải phương trình phi tuyến
Tính toán khoa học - Chương 4: Giải phương trình phi tuyếnChien Dang
 
Vi du chi tiet giai thich lap trinh gui trong matlab
Vi du chi tiet  giai thich lap trinh gui trong matlabVi du chi tiet  giai thich lap trinh gui trong matlab
Vi du chi tiet giai thich lap trinh gui trong matlabPhạmThế Anh
 
Lttt matlab chuong 3
Lttt matlab chuong 3Lttt matlab chuong 3
Lttt matlab chuong 3Hoa Cỏ May
 
CHƯƠNG 2 GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐ
CHƯƠNG 2  GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐCHƯƠNG 2  GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐ
CHƯƠNG 2 GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐĐinh Công Thiện Taydo University
 
Ve hinh hoc dong phan mem geogebra
Ve hinh hoc dong phan mem geogebraVe hinh hoc dong phan mem geogebra
Ve hinh hoc dong phan mem geogebraHoa Phượng
 
Giai phuong trinh bang excell
Giai phuong trinh bang excellGiai phuong trinh bang excell
Giai phuong trinh bang excelltrioby2
 
[Math educare] bai giang phuong trinh vi phan-trinh duc tai
[Math educare] bai giang phuong trinh vi phan-trinh duc tai[Math educare] bai giang phuong trinh vi phan-trinh duc tai
[Math educare] bai giang phuong trinh vi phan-trinh duc taiNguyen Vietnam
 
Ptit mô phỏng hệ thống truyền thông slide
Ptit mô phỏng hệ thống truyền thông slidePtit mô phỏng hệ thống truyền thông slide
Ptit mô phỏng hệ thống truyền thông slideLinh Linpine
 
Truyen song anten thay ngo lam
Truyen song anten thay ngo lamTruyen song anten thay ngo lam
Truyen song anten thay ngo lamhoangclick
 
Cơ lượng tử tiểu luận2
Cơ lượng tử  tiểu luận2Cơ lượng tử  tiểu luận2
Cơ lượng tử tiểu luận2Linh Tinh Trần
 
Thuchanh Ktdk-matlab
Thuchanh Ktdk-matlabThuchanh Ktdk-matlab
Thuchanh Ktdk-matlabmark
 
175 thuc-hanh-matlab-[dh-khoa-hoc-tu-nhien-hcm]
175 thuc-hanh-matlab-[dh-khoa-hoc-tu-nhien-hcm]175 thuc-hanh-matlab-[dh-khoa-hoc-tu-nhien-hcm]
175 thuc-hanh-matlab-[dh-khoa-hoc-tu-nhien-hcm]Vinh Phan
 
Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007Xuantham Nguyen
 
Xử lí tín hiệu số
Xử lí tín hiệu số Xử lí tín hiệu số
Xử lí tín hiệu số Tran An
 
Tìm hiểu về anten loa
Tìm hiểu về anten loaTìm hiểu về anten loa
Tìm hiểu về anten loaTuấn Trần
 

Destaque (20)

Tính toán khoa học - Chương 7: Các phương pháp cực tiểu hóa không ràng buộc
Tính toán khoa học - Chương 7: Các phương pháp cực tiểu hóa không ràng buộcTính toán khoa học - Chương 7: Các phương pháp cực tiểu hóa không ràng buộc
Tính toán khoa học - Chương 7: Các phương pháp cực tiểu hóa không ràng buộc
 
Tính toán khoa học - Chương 0: Introduction
Tính toán khoa học - Chương 0: IntroductionTính toán khoa học - Chương 0: Introduction
Tính toán khoa học - Chương 0: Introduction
 
Tính toán khoa học - Chương 4: Giải phương trình phi tuyến
Tính toán khoa học - Chương 4: Giải phương trình phi tuyếnTính toán khoa học - Chương 4: Giải phương trình phi tuyến
Tính toán khoa học - Chương 4: Giải phương trình phi tuyến
 
Vi du chi tiet giai thich lap trinh gui trong matlab
Vi du chi tiet  giai thich lap trinh gui trong matlabVi du chi tiet  giai thich lap trinh gui trong matlab
Vi du chi tiet giai thich lap trinh gui trong matlab
 
Các công logic cơ bản
Các công logic cơ bảnCác công logic cơ bản
Các công logic cơ bản
 
Lttt matlab chuong 3
Lttt matlab chuong 3Lttt matlab chuong 3
Lttt matlab chuong 3
 
Tu hoc matlab
Tu hoc matlabTu hoc matlab
Tu hoc matlab
 
CHƯƠNG 2 GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐ
CHƯƠNG 2  GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐCHƯƠNG 2  GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐ
CHƯƠNG 2 GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐ
 
Ve hinh hoc dong phan mem geogebra
Ve hinh hoc dong phan mem geogebraVe hinh hoc dong phan mem geogebra
Ve hinh hoc dong phan mem geogebra
 
Giai phuong trinh bang excell
Giai phuong trinh bang excellGiai phuong trinh bang excell
Giai phuong trinh bang excell
 
[Math educare] bai giang phuong trinh vi phan-trinh duc tai
[Math educare] bai giang phuong trinh vi phan-trinh duc tai[Math educare] bai giang phuong trinh vi phan-trinh duc tai
[Math educare] bai giang phuong trinh vi phan-trinh duc tai
 
Ptit mô phỏng hệ thống truyền thông slide
Ptit mô phỏng hệ thống truyền thông slidePtit mô phỏng hệ thống truyền thông slide
Ptit mô phỏng hệ thống truyền thông slide
 
Truyen song anten thay ngo lam
Truyen song anten thay ngo lamTruyen song anten thay ngo lam
Truyen song anten thay ngo lam
 
Cơ lượng tử tiểu luận2
Cơ lượng tử  tiểu luận2Cơ lượng tử  tiểu luận2
Cơ lượng tử tiểu luận2
 
Thuchanh Ktdk-matlab
Thuchanh Ktdk-matlabThuchanh Ktdk-matlab
Thuchanh Ktdk-matlab
 
175 thuc-hanh-matlab-[dh-khoa-hoc-tu-nhien-hcm]
175 thuc-hanh-matlab-[dh-khoa-hoc-tu-nhien-hcm]175 thuc-hanh-matlab-[dh-khoa-hoc-tu-nhien-hcm]
175 thuc-hanh-matlab-[dh-khoa-hoc-tu-nhien-hcm]
 
Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007
 
Xử lí tín hiệu số
Xử lí tín hiệu số Xử lí tín hiệu số
Xử lí tín hiệu số
 
Tìm hiểu về anten loa
Tìm hiểu về anten loaTìm hiểu về anten loa
Tìm hiểu về anten loa
 
Vật lý lượng tử
Vật lý lượng tử Vật lý lượng tử
Vật lý lượng tử
 

Semelhante a Tính toán khoa học - Chương 1: Nhập môn Matlab

Tailieu.vncty.com tu hoc-matlab
Tailieu.vncty.com   tu hoc-matlabTailieu.vncty.com   tu hoc-matlab
Tailieu.vncty.com tu hoc-matlabTrần Đức Anh
 
giao-trinh-tu-hoc-matlab.pdf
giao-trinh-tu-hoc-matlab.pdfgiao-trinh-tu-hoc-matlab.pdf
giao-trinh-tu-hoc-matlab.pdfMnhNguynGia4
 
Bai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBrand Xanh
 
Lttt matlab chuong 1
Lttt matlab chuong 1Lttt matlab chuong 1
Lttt matlab chuong 1Hoa Cỏ May
 
Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Vu Tuan
 
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577Trần Đức Anh
 
Mo phong bang Matlab-Simulinhk_P1.ppt
Mo phong bang Matlab-Simulinhk_P1.pptMo phong bang Matlab-Simulinhk_P1.ppt
Mo phong bang Matlab-Simulinhk_P1.pptHaTrungKien2
 
Sinh vienit.net --matlabtoantap
Sinh vienit.net --matlabtoantapSinh vienit.net --matlabtoantap
Sinh vienit.net --matlabtoantapNguyen Minh Cong
 
Ctdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepCtdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepNguyễn Ngọc Hà
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfHngTrn365275
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfnguyenkaka2
 

Semelhante a Tính toán khoa học - Chương 1: Nhập môn Matlab (20)

Chuong1
Chuong1Chuong1
Chuong1
 
Tailieu.vncty.com tu hoc-matlab
Tailieu.vncty.com   tu hoc-matlabTailieu.vncty.com   tu hoc-matlab
Tailieu.vncty.com tu hoc-matlab
 
giao-trinh-tu-hoc-matlab.pdf
giao-trinh-tu-hoc-matlab.pdfgiao-trinh-tu-hoc-matlab.pdf
giao-trinh-tu-hoc-matlab.pdf
 
Bai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tu
 
Lttt matlab chuong 1
Lttt matlab chuong 1Lttt matlab chuong 1
Lttt matlab chuong 1
 
chương1.pdf
chương1.pdfchương1.pdf
chương1.pdf
 
matlab co ban
matlab co banmatlab co ban
matlab co ban
 
Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731
 
Matlab intro
Matlab introMatlab intro
Matlab intro
 
Matlab tv
Matlab tvMatlab tv
Matlab tv
 
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577
 
Matlab toan tap
Matlab toan tapMatlab toan tap
Matlab toan tap
 
Mo phong bang Matlab-Simulinhk_P1.ppt
Mo phong bang Matlab-Simulinhk_P1.pptMo phong bang Matlab-Simulinhk_P1.ppt
Mo phong bang Matlab-Simulinhk_P1.ppt
 
Sinh vienit.net --matlabtoantap
Sinh vienit.net --matlabtoantapSinh vienit.net --matlabtoantap
Sinh vienit.net --matlabtoantap
 
Mat labtoantap
Mat labtoantapMat labtoantap
Mat labtoantap
 
Emailing buoi 2 thuat toan
Emailing buoi 2   thuat toanEmailing buoi 2   thuat toan
Emailing buoi 2 thuat toan
 
Ltc 01
Ltc 01Ltc 01
Ltc 01
 
Ctdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepCtdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xep
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 

Mais de Chien Dang

Tính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tínhTính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tínhChien Dang
 
Tính toán khoa học - Chương 6: Bài toán giá trị ban đầu với phương trình vi p...
Tính toán khoa học - Chương 6: Bài toán giá trị ban đầu với phương trình vi p...Tính toán khoa học - Chương 6: Bài toán giá trị ban đầu với phương trình vi p...
Tính toán khoa học - Chương 6: Bài toán giá trị ban đầu với phương trình vi p...Chien Dang
 
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phân
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phânTính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phân
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phânChien Dang
 
Vật lý Laser 2013 - Chương IV: Các loại laser và ứng dụng
Vật lý Laser 2013 - Chương IV: Các loại laser và ứng dụngVật lý Laser 2013 - Chương IV: Các loại laser và ứng dụng
Vật lý Laser 2013 - Chương IV: Các loại laser và ứng dụngChien Dang
 
Vật lý Laser 2013 - Chương III: Phát xạ Laser
Vật lý Laser 2013 - Chương III: Phát xạ LaserVật lý Laser 2013 - Chương III: Phát xạ Laser
Vật lý Laser 2013 - Chương III: Phát xạ LaserChien Dang
 
Vật lý Laser 2013- Chương II: Khuếch đại Laser
Vật lý Laser 2013- Chương II: Khuếch đại LaserVật lý Laser 2013- Chương II: Khuếch đại Laser
Vật lý Laser 2013- Chương II: Khuếch đại LaserChien Dang
 
Vật lý Laser 2013 - Chương I: Photon và Nguyên tử
Vật lý Laser 2013 - Chương I: Photon và Nguyên tửVật lý Laser 2013 - Chương I: Photon và Nguyên tử
Vật lý Laser 2013 - Chương I: Photon và Nguyên tửChien Dang
 
Lập trình Python GUI vs PySide
Lập trình Python GUI vs PySideLập trình Python GUI vs PySide
Lập trình Python GUI vs PySideChien Dang
 

Mais de Chien Dang (9)

Tính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tínhTính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tính
 
Tính toán khoa học - Chương 6: Bài toán giá trị ban đầu với phương trình vi p...
Tính toán khoa học - Chương 6: Bài toán giá trị ban đầu với phương trình vi p...Tính toán khoa học - Chương 6: Bài toán giá trị ban đầu với phương trình vi p...
Tính toán khoa học - Chương 6: Bài toán giá trị ban đầu với phương trình vi p...
 
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phân
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phânTính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phân
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phân
 
Vật lý Laser 2013 - Chương IV: Các loại laser và ứng dụng
Vật lý Laser 2013 - Chương IV: Các loại laser và ứng dụngVật lý Laser 2013 - Chương IV: Các loại laser và ứng dụng
Vật lý Laser 2013 - Chương IV: Các loại laser và ứng dụng
 
Vật lý Laser 2013 - Chương III: Phát xạ Laser
Vật lý Laser 2013 - Chương III: Phát xạ LaserVật lý Laser 2013 - Chương III: Phát xạ Laser
Vật lý Laser 2013 - Chương III: Phát xạ Laser
 
Vật lý Laser 2013- Chương II: Khuếch đại Laser
Vật lý Laser 2013- Chương II: Khuếch đại LaserVật lý Laser 2013- Chương II: Khuếch đại Laser
Vật lý Laser 2013- Chương II: Khuếch đại Laser
 
Vật lý Laser 2013 - Chương I: Photon và Nguyên tử
Vật lý Laser 2013 - Chương I: Photon và Nguyên tửVật lý Laser 2013 - Chương I: Photon và Nguyên tử
Vật lý Laser 2013 - Chương I: Photon và Nguyên tử
 
Projection
ProjectionProjection
Projection
 
Lập trình Python GUI vs PySide
Lập trình Python GUI vs PySideLập trình Python GUI vs PySide
Lập trình Python GUI vs PySide
 

Tính toán khoa học - Chương 1: Nhập môn Matlab

  • 1. Chương 1 NHẬP MÔN MATLAB Tính toán khoa học
  • 2. Nội dung • • • • • • Giới thiệu chung về MATLAB Làm việc với MATLAB Lập trình với MATLAB Các phép tính ma trận nâng cao Đồ thị nâng cao Vào ra dữ liệu Tính toán khoa học
  • 3. Giới thiệu chung về MATLAB • MATLAB (Matrix Laboratory) là phần mềm của hãng MathWorks Inc. • Đối tượng là các ma trận. • MATLAB tích hîp c¸c ph-¬ng ph¸p tÝnh to¸n, hiÓn thÞ vµ ng«n ngữ lËp trình m¹nh ®Ó cung cÊp cho ng-êi sö dông mét m«i tr-êng lµm viÖc thuËn tiÖn ®Ó gi¶i c¸c vÊn ®Ò tÝnh to¸n khoa häc. • CÊu tróc më cña MATLAB cho phÐp sö dông MATLAB vµ c¸c thµnh phÇn cña nã ®Ó kh¶o s¸t dữ liÖu, nghiªn cøu c¸c thuËt to¸n vµ t¹o c¸c c«ng cô tiÖn Ých cña ng-êi sö dông. Tính toán khoa học
  • 4. Giới thiệu chung về MATLAB (tiếp) • Ngoài ra Matlab cũng đã tạo sẵn rất nhiều công cụ tiện ích như: – – – – Khai ph¸ dữ liÖu (Data acquisition) Ph©n tÝch vµ kh¶o s¸t dữ liÖu (Data analysis and exploration) HiÓn thÞ vµ xö lý ¶nh (Visualization and image processing) Dùng mÉu vµ Ph¸t triÓn thuËt to¸n (Algorithm prototyping and development) – M« hình hãa vµ m« pháng (Modeling and simulation) – ... • MATLAB là công cụ được các nhà khoa học, kỹ sư sử dụng để phát triển các phần mềm giải các bài toán tính toán trong khoa học kỹ thuật. • Bản thân MATLAB cũng cung cấp công cụ để giải nhiều bài toán của khoa học kỹ thuật. • MATLAB được dùng trong nhiều trường đại học để hỗ trợ việc giảng dạy các giáo trình toán, đặc biệt là các giáo trình liên quan đến tính toán số như đại số tuyến tính ứng dụng, giải tích số, tính toán khoa học, … Tính toán khoa học
  • 5. Làm việc với MATLAB Tính toán khoa học
  • 6. Màn hình làm việc của Matlab Thư mục hiện thời Current Directory Cửa sổ lệnh Command Window Các lệnh quá khứ Command history Truy cập chức năng Tính toán khoa học
  • 7. Màn hình làm việc của Matlab (tiếp) Vùng nhớ làm việc Workspace Cửa sổ lệnh Command Window Các lệnh quá khứ Command History Tính toán khoa học
  • 8. Chương trình trên Matlab • Matlab có thể làm việc như là một siêu máy tính cầm tay nếu chúng ta chỉ cần Matlab thực hiện một số lệnh bằng cách đánh trực tiếp trên của sổ lệnh… • Chương trình được thực hiện bằng cách nào? • Chương trình trong Matlab có thể là: – Kịch bản (Scripts), hoặc – Các hàm (Functions) • Scripts: Dãy lệnh Matlab ghi trong một file được đưa vào cửa sổ lệnh và được thực hiện tức thì • Functions: Các môđun chương trình tiếp nhận dữ liệu vào và trả lại kết quả (ví dụ hàm sin nhận đầu vào x và trả lại giá trị sin(x)) • Chương trình có thể được soạn thảo bằng bất cứ bộ soạn thảo văn bản nào (tuy nhiên Matlab cũng cung cấp bộ soạn thảo chương trình của riêng mình) Tính toán khoa học
  • 9. Bộ soạn thảo của Matlab (Matlab Editor) Các chức năng Tự động gán màu chữ và dóng hàng Dãy các file được mở để soạn thảo Tính toán khoa học
  • 10. Cơ cấu làm việc của Matlab • Matlab là ngôn ngữ thông dịch (interpreted language) – Các câu lệnh được đánh trực tiếp trong cửa sổ lệnh và được thực hiện tức thì – Các biến được phân bố bộ nhớ ngay lần đầu tiên chúng được khởi tạo – Muốn thực hiện lại một lệnh chỉ việc gõ lại lệnh đó • Tất cả các biến được sử dụng trong cửa sổ lệnh được cất giữ vào Vùng nhớ làm việc Base Workspace – – – – – – Có thể gán giá trị mới cho các biến nếu cần thiết Có thể chọn để xoá bỏ một số biến khỏi vùng nhớ làm việc Vùng nhớ làm việc có thể cất giữ vào một file dữ liệu Phần mở rộng của file dữ liệu là .mat (ví dụ: mydata.mat) File là file nhị phân Các file dữ liệu (đuôi .mat ) có thể nạp trở lại vào Vùng nhớ làm việc Tính toán khoa học
  • 11. Câu lệnh, Chỉ thị & Biến • Tại dấu nhắc của cửa sổ lệnh, người sử dụng có thể gõ: – Lệnh (Command): • save mydata (cất giữ vùng nhớ làm việc vào mydata.mat) • whos (hiển thị danh mục các biến trong vùng nhớ làm việc) – Chỉ thị gán (Assignment Statement): • • • • A = width * length; B = 267; Câu lệnh gán chỉ có một tên biến ở vế trái của toán tử gán (=) Vế phải sẽ được tính dựa vào giá trị hiện thời của các biến và kết quả tính được sẽ gán cho biến ở vế trái. • Giá trị có thể có dạng số hoặc dạng ký tự • Kiểu của biến sẽ được cập nhật mỗi khi nó được gán giá trị (chú ý: rất thoải mái nhưng rất dễ mắc sai lầm…) – Biến • Phân biệt 31 ký tự đầu tiên (những ký tự tiếp theo bị bỏ qua); Phân biệt chữ hoa hay thường Tính toán khoa học
  • 12. Lµm viÖc trong chÕ ®é héi tho¹i • Khi sö dông chÕ ®é héi thäai, ng-êi sö dông ®¸nh trùc tiÕp c©u lÖnh vµo sau dÊu nh¾c cña MATLAB. Khi Ên nót “Enter”, dßng lÖnh sÏ ®-îc thùc hiÖn. • VÝ dô, >> x = 1; >> 4*atan(x) • KÕt qu¶ sÏ ®-îc ®-a ra mµn hình d-íi d¹ng ans = 3.1416 • DÊu chÊm ph¶y ";" ë cuèi dßng lÖnh ®-îc sö dông ®Ó ngăn MATLAB kh«ng ®-a kÕt qu¶ cña phÐp thao t¸c. Tính toán khoa học
  • 13. Chương trình trên MATLAB • Mét c¸ch lµm viÖc kh¸c víi MATLAB lµ ta cã thÓ viÕt ch-¬ng trình ®Ó thùc hiÖn c¸c tÝnh to¸n. • ĐÓ lµm ®iÒu nµy ta cÇn so¹n th¶o mét file văn b¶n b»ng bÊt kú bé so¹n th¶o văn b¶n nµo, trong ®ã cã bé so¹n th¶o cña MATLAB. • File văn b¶n chøa c¸c c©u lÖnh ph¶i ®-îc ®Æt tªn víi ®u«i lµ *.m, nÕu kh«ng MATLAB sÏ kh«ng chÊp nhËn ch-¬ng trình. • Ch-¬ng trình ®-îc so¹n th¶o cÇn cÊt giấu trong th- môc lµm viÖc hiÖn thêi cña MATLAB. Tính toán khoa học
  • 14. • VÝ dô, néi dung cña file Tinhpi.m % Program 1.1 (TÝnh sè ). % Ch-¬ng trình tÝnh gi¸ trÞ cña Pi = 3.14159265358979... % Mçi dßng b¾t ®Çu bëi % sÏ lµ dßng chó gi¶i vµ sÏ ®-îc % MATLAB bá qua khi nã thùc hiÖn ch-¬ng trình. x = 1; 4*atan(x) • ĐÓ thùc hiÖn ch-¬ng trình ta chØ cÇn gâ tªn cña file ch-¬ng trình sau dÊu nh¾c cña MATLAB >> Tinhpi ans = 3.1416 Tính toán khoa học
  • 15. Các từ khoá… • Matlab sử dụng một loạt các từ khoá (reserved words) mà để tránh xung đột, không nên sử dụng để đặt tên biến… for end if while function return elsif case otherwise switch continue else try catch global persistent break Tính toán khoa học
  • 16. C¸c tªn biÕn vµ tªn hµm chuÈn cña MATLAB Tên biến hằng ans Mô tả Biến ngầm định chứa kết quả beep Phát tiếng kêu pi Hằng số pi eps inf infinity NaN i Số 0 của Matlab not a number (hoÆc) j realmin, realmax bitmax nargin, nargout varargin varaout Đơn vị phức Số thực dương nhỏ nhất và lớn nhất Số nguyên lớn nhất Số lượng biến vào/ra của lệnh gọi hàm Số lượng biến trong lệnh gọi hàm Số lượng biến đầu ra trong lệnh gọi hàm Tính toán khoa học
  • 17. C¸c tªn biÕn vµ tªn hµm chuÈn cña MATLAB Tªn hµm abs (x) acos (x) asin (x) atan (x) conj (x) cos (x) exp (x) ý nghÜa Gi¸ trÞ tuyÖt ®èi cña sè thùc x (hoÆc biªn ®é cña sè phøc x). hµm ng-îc cña cosin. hµm ng-îc cña sin. hµm ng-îc cña tang. sè phøc liªn hîp hµm cosin. hµm mò. Tính toán khoa học
  • 18. C¸c tªn biÕn vµ tªn hµm chuÈn cña MATLAB Tªn hµm imag (x) ý nghÜa phần ảo của số phức log (x) Logarithm cơ số e log10 (x) Logarithm cơ số 10 real (x) phần thực của x sign (x) Hàm dấu, trả lại dấu của đối số sin (x) hàm sin. sqrt (x) Căn bậc hai tan (x) hàm tang Tính toán khoa học
  • 19. Khu«n d¹ng dữ liÖu • MÆc dï tÊt c¶ c¸c tÝnh to¸n sè trong Matlab ®Òu ®-îc thùc hiÖn víi ®é chÝnh x¸c kÐp (double precision), nh-ng khu«n d¹ng cña dữ liÖu ®-a ra cã thÓ ®Þnh d¹ng l¹i nhê c¸c lÖnh ®Þnh d¹ng cña Matlab. • C¸c biÕn ngÇm ®Þnh còng nh- c¸c biÕn cña ng-êi sö dông ®Þnh nghÜa ®Òu cã thÓ ®-a ra theo nhiÒu khu«n d¹ng kh¸c nhau. • Khu«n d¹ng ®-îc chän nhê sö dông lÖnh format: – – – – FORMAT SHORT FORMAT LONG FORMAT SHORTE FORMAT LONGE mũ – FORMAT RAT số dấu phảy động có 4 chữ số sau dấu. số dấu phảy động có 14 chữ số. số dấu phảy động có 4 chữ số với số mũ. số dấu phảy động có 15 chữ số với số biểu diễn đúng hoặc gần đúng dưới dạng phân số Tính toán khoa học
  • 20. Khu«n d¹ng dữ liÖu: VÝ dụ >> pi ans = 3.1416 >> format short e, pi ans = 3.1416e+000 >> format long, pi >> format rat, pi ans = 3.14159265358979 >> format long e, pi ans = 355/113 ans = 3.141592653589793e+000 Tính toán khoa học
  • 21. VÏ ®å thÞ ®¬n gi¶n • Ьn gi¶n nhÊt, ®å thÞ cã thÓ ®-îc vÏ nhê nèi c¸c ®iÓm ®-îc ®¸nh dÊu trªn mÆt ph¼ng täa ®é ®Ò c¸c. • VÝ dô: >> x = [1;2;3;4;5]; >> y = [0;.25;3;1.5;2]; >> plot(x,y) Tính toán khoa học
  • 22. VÏ ®å thÞ ®¬n gi¶n • Theo ngÇm ®Þnh, Matlab sÏ nèi c¸c ®iÓm ®¸nh dÊu bëi c¸c ®o¹n th¼ng. Mét c¸ch vÏ kh¸c ®-îc thùc hiÖn nh- sau >> plot(x,y,'o') Tính toán khoa học
  • 23. Khëi t¹o biÕn vect¬ vµ ma trËn • Mét trong những ®iÓm m¹nh cña MATLAB lµ nã cho phÐp lµm viÖc víi c¸c ma trËn vµ vect¬. ĐÓ sö dông mét biÕn ta cÇn khëi t¹o nã. Cã thÓ khëi t¹o biÕn vect¬ vµ ma trËn theo nhiÒu c¸ch. • Đèi víi vect¬ (hay ma trËn chØ cã mét dßng) ta cã thÓ sö dông c¸c c¸ch khëi t¹o sau >> a = [1 2 3 4 5 6 7 8 9 10]; >> b = [1:10]; >> c = [1:0.5:5.5]; >> d = sin(a); >> e = [5 d 6]; Tính toán khoa học
  • 24. Khëi t¹o biÕn vect¬ vµ ma trËn • Mét trong những c¸ch khëi t¹o vect¬ th-êng dïng lµ sö dông to¸n tö first : increment : last • C©u lÖnh a= first : increment : last khëi t¹o vect¬ dßng a b¾t ®Çu tõ phÇn tö first vµ kÕt thóc t¹i phÇn tö last víi ®é dµi b-íc lµ increment. NÕu kh«ng chØ ra increment, thì gi¸ trÞ ngÇm ®Þnh nã lµ b»ng 1. Tính toán khoa học
  • 25. Khëi t¹o biÕn vect¬ vµ ma trËn • VÝ dô: 1) ĐÓ khëi t¹o vect¬ a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) cã thÓ thùc hiÖn >> a=1:10 a= 1 2 3 4 5 6 7 8 9 10 2) Đé dµi b-íc cã thÓ lµ sè ©m >> a=[100:-10:20] a = 100 90 80 70 60 50 40 30 20 3) C¸c gi¸ trÞ cña th«ng sè cã thÓ x¸c ®Þnh bëi biÓu thøc to¸n häc >> c=0:pi/6:2*pi c = Columns 1 through 6 0 0.5236 1.0472 1.5708 2.0944 2.6180 Columns 7 through 12 3.1416 3.6652 4.1888 4.7124 5.2360 5.7596 Column 13 6.2832 Tính toán khoa học
  • 26. Khëi t¹o biÕn vect¬ vµ ma trËn • ĐÓ khëi t¹o ma trËn ta cã thÓ lµm nh- sau >> A = [1 2 3; 4 5 6; 7 8 9]; >> B = [x; y; z]; >> C = [A; 10 11 12]; • Chó ý lµ c¸c dßng cña ma trËn ®-îc ph©n t¸ch nhau bëi dÊu ";", trong khi ®ã c¸c phÇn tö trªn mét dßng ®-îc ph©n t¸ch bëi dÊu c¸ch (hoÆc dÊu ph¶y). Tính toán khoa học
  • 27. ĐÞa chØ cña m¶ng (Array addressing) • C¸c phÇn tö cña mét m¶ng tæng qu¸t (lµ vect¬ hay ma trËn) cã thÓ ®Þa chØ hãa theo nhiÒu c¸ch. • C¸ch ®¬n gi¶n nhÊt lµ chØ ra phÇn tö bëi vÞ trÝ dßng vµ cét cña nã trong m¶ng • C¸c dßng vµ cét ®-îc ®¸nh sè b¾t ®Çu tõ 1. Tính toán khoa học
  • 28. ĐÞa chØ cña m¶ng (Array addressing) • VÝ dô >> x = [10 5 3 7 -2 8]; >> x(5) ans = -2 >> A = [3 4 9; 2 5 1; 7 4 2] A = 3 4 9 2 5 1 7 4 1 >> A(1,3) ans = 9 Tính toán khoa học
  • 29. ĐÞa chØ cña m¶ng (Array addressing) • Trong tr-êng hîp ma trËn, cã thÓ x¸c ®Þnh ®Þa chØ dßng hay cét bëi lÖnh :. • VÝ dô: NÕu cÇn lÊy c¸c phÇn tö cña cét thø hai vµ c¸c phÇn tö cña dßng thø 3 trong ma trËn A cã thÓ dïng c¸c lÖnh >> A(:,2) >> A(3,:) Tính toán khoa học
  • 30. ĐÞa chØ cña m¶ng (Array addressing) • Thay vect¬ chØ sè vµo chç c¸c chØ sè ta cã thÓ sinh ra hoÆc lÊy ®-îc c¸c m¶ng con phøc t¹p h¬n. • VÝ dô >> Asub = A(i:j,k:l); x¸c ®Þnh Asub lµ ma trËn gåm c¸c phÇn tö n»m trªn giao cña c¸c dßng tõ i ®Õn j, c¸c cét tõ k ®Õn l. • NÕu chØ sè ®-îc chØ ra bëi ký tù : thì ®iÒu ®ã cã nghÜa lµ tÊt c¶ c¸c gi¸ trÞ cã thÓ cña chØ sè cña chiÒu ®ã cña m¶ng ®Òu ®-îc chän. • VÝ dô: >> B = A(:,[3 1 2]); Tính toán khoa học
  • 31. ĐÞa chØ cña m¶ng (Array addressing) • Ta còng cã thÓ nèi nhiÒu ma trËn ®Ó ®-îc ma trËn míi. • VÝ dô: – NÕu A vµ B lµ c¸c ma trËn cã cïng sè dßng thì >> C = [A B]; cho ma trËn C cã cïng sè dßng nh- A vµ B, nh-ng cã sè cét lµ tæng sè cét cña A vµ B. - NÕu A vµ B lµ c¸c ma trËn cã cïng sè cét thì >> C = [A; B] cho ma trËn C cã sè cét b»ng sè cét cña A hoÆc B nh-ng sè dßng cña C lµ b»ng tæng sè dßng cña A vµ B. Tính toán khoa học
  • 32. ĐÞa chØ cña m¶ng (Array addressing) • ĐÓ xo¸ mét dßng hay cét cña ma trËn ta sö dông cÆp ngoÆc vu«ng rçng []: • VÝ dô: Gi¶ sö A lµ ma trËn trong vÝ dô tr-íc. Khi ®ã, lÖnh >> A(:,2) = []; cho ta ma trËn thu được từ A bởi việc xoá đi cột thứ 2. • Kh«ng thÓ xo¸ bá mét phÇn tö cña ma trËn, bëi vì khi ®ã kÕt qu¶ kh«ng cßn lµ ma trËn nữa. • Tuy nhiªn, nhê m« t¶ chØ sè bëi to¸n tö : cã thÓ thùc hiÖn viÖc xo¸ bá mét phÇn tö hoÆc mét d·y phÇn tö vµ c¸c phÇn tö cßn l¹i ®-îc s¾p xÕp l¹i trong mét vect¬ dßng Tính toán khoa học
  • 33. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • Tr-íc xÐt mét sè hµm cña MATLAB cho th«ng tin vÒ ®Æc tr-ng cña m¶ng. • Hµm length cho phÐp x¸c ®Þnh sè phÇn tö cña vect¬. NÕu gäi hµm ®èi víi ma trËn thì nã sÏ tr¶ l¹i sè lín h¬n trong sè dßng vµ sè cét cña ma trËn. • Hµm size, nã tr¶ l¹i sè dßng vµ sè cét cña ma trËn hay vect¬. KÕt qu¶ cña hµm size lµ mét vect¬ 12 chøa sè dßng vµ sè cét cña ma trËn. C¸ch sö dông chuÈn cña hµm nµy lµ >> [rows cols] = size(A); Tính toán khoa học
  • 34. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • Cộng (và trừ) các ma trận cùng kích thước được thực hiện từng thành phần. • Ví dụ >> A=[5 -1 2; 3 4 7]; B=[2 2 1; 5 0 3]; >> A+B ans = 7 1 3 8 4 10 • Chú ý các ma trận phải có cùng kích thước: >> C=[3 1; 6 4]; >> A+C ??? Error using ==> + Matrix dimensions must agree. Tính toán khoa học
  • 35. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • Nhân với một số (chia cho một số khác không) cũng được thực hiện theo từng thành phần. Ví dụ: >> A=[5 -1 2; 3 4 7]; >> 2*A ans = 10 -2 4 6 8 14 • Phép toán * trong tích trên là bắt buộc phải có: >> 2A ??? 2 | Missing operator, comma, or semicolon. Tính toán khoa học
  • 36. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • Cộng vectơ và nhân vectơ với một số được thực hiện tương tự. >> v=[3; 5]; w=[-2; 7]; >> 10*v-5*w ans = 40 15 Tính toán khoa học
  • 37. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • Phép nhân hai ma trận cũng có thể thực hiện được trên Matlab. • Để nhân hai ma trận hay nhân ma trận với vector chỉ việc dùng toán tử * giống như phép nhân của các đại lượng vô hướng. • Matlab nhận dạng kích thước của đầu vào và thực hiện phép nhân. • Điều mà người sử dụng quan tâm là kích thước của các ma trận và vector phải phù hợp để có thể thực hiện được phép toán. Tính toán khoa học
  • 38. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • Ví dụ: >> x = [1 2 3]; >> A = [4 5 6; 5 4 3]; >> b = A*x ??? Error using ==> * Inner matrix dimensions must agree. >> y = [1; 2; 3]; >> b = A*y b = 32 22 Tính toán khoa học
  • 39. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • ĐÓ thùc hiÖn chuyÓn vÞ vect¬ hoÆc ma trËn cã thÓ dïng lÖnh chuyÓn vÞ ' viÕt ngay sau tªn biÕn. >> A = [ 4 5; 5 4; 6 3] >> A' ans = 4 5 6 5 4 3 Tính toán khoa học
  • 40. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • PhÐp to¸n chuyÓn vÞ thùc hiÖn ®èi víi ma trËn phøc sÏ thùc hiÖn chuyÓn vÞ liªn hîp: >> A = [1 2;3 4] A= 1 2 3 4 >> A' ans = 1 3 2 4 >> B = A + i*.5*A B= 1.0000 + 0.5000i 3.0000 + 1.5000i >> B' ans = 1.0000 - 0.5000i 2.0000 - 1.0000i 2.0000 + 1.0000i 4.0000 + 2.0000i 3.0000 - 1.5000i 4.0000 - 2.0000i Tính toán khoa học
  • 41. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • Mét phÐp chuyÓn vÞ kh¸c Ýt dïng ®èi víi ma trËn phøc ®-îc thùc hiÖn nhê phÐp to¸n ".'". VÝ dô: >> B.' ans = 1.0000 + 0.5000i 3.0000 + 1.5000i 2.0000 + 1.0000i 4.0000 + 2.0000i • (Chó ý lµ ' vµ .' cho kÕt qu¶ nh- nhau ®èi víi ma trËn thùc). Tính toán khoa học
  • 42. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • NÕu A lµ ma trËn vu«ng cßn m lµ sè nguyªn d-¬ng thì A^m sÏ cho ta tÝch cña m nh©n tö lµ A. • Ví dụ: >> A=[1 2; 3 4]; A^2 ans = 7 10 15 22 >> pi^2 ans = 10975/1112 >> mu2= 2^100; >> format long, mu2 mu2 = 1.267650600228229e+030 Tính toán khoa học
  • 43. Ví dụ: Tính số Fibonacci • Dãy số Fibonacci được định nghĩa bởi công thức đệ qui f0=0, f1=1, fn=fn-1 + fn-2, n ≥ 2. • Đưa vào ma trận: 1 1  F  , 1 0  0 f   1  • Dễ dàng kiểm tra được rằng  fn  F f   f n 1   n >> F=[1 1;1 0]; f=[0;1]; F^10*f Tính toán khoa học
  • 44. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • PhÐp to¸n luü thõa ¸p dông víi ma trËn kÝch th-íc 11 trë thµnh phÐp to¸n luü thõa cña ®¹i l-îng v« h-íng. • VÝ dô: >> c=3.1; >> c^3 ans = 29.7910 • Sè mò cã thÓ lµ sè thùc tuú ý • VÝ dô: >> 3^(-1/3) ans = 0.6934 Tính toán khoa học
  • 45. Gi¶i ph-¬ng trình ma trËn sö dông phÐp chia ma trËn • NÕu A lµ ma trËn vu«ng kh«ng suy biÕn thì nghiÖm cña ph-¬ng trình Ax = b lµ x = A-1b. Matlab cµi ®Æt phÐp to¸n nµy vµ ký hiÖu lµ to¸n tö "". • VÝ dô: >> A = rand(3,3); >> b = rand(3,1); >> x = Ab x= -159.3380 314.8625 -344.5078 >> A*x-b ans = 1.0e-13 * -0.2602 -0.1732 -0.0322 Tính toán khoa học
  • 46. Gi¶i ph-¬ng trình ma trËn sö dông phÐp chia ma trËn • Chó ý: hµm rand t¹o c¸c sè ngÉu nhiªn víi ph©n bè ®Òu trªn ®äan (0,1). H·y sö dông lÖnh help rand ®Ó xem gi¶i ®¸p chi tiÕt vÒ hµm nµy. • Nh- vËy Ab lµ t-¬ng ®-¬ng víi viÖc nh©n tr¸i b víi ma trËn A1 (tuy nhiªn, ®Ó ®-a ra kÕt qu¶, Matlab kh«ng tÝnh ma trËn nghÞch ®¶o mµ gi¶i trùc tiÕp hÖ ph-¬ng trình). • Khi sö dông to¸n tö "" ®èi víi ma trËn kh«ng vu«ng, Matlab sÏ gi¶i hÖ ph-¬ng trình t-¬ng øng trong nghÜa bình ph-¬ng bÐ nhÊt; • H·y sö dông lÖnh help slash ®Ó cã ®-îc gi¶i ®¸p chi tiÕt h¬n. • Gièng nh- ®èi víi c¸c phÐp to¸n sè häc kh¸c, c¸c ma trËn ph¶i cã kÝch th-íc phï hîp. Tính toán khoa học
  • 47. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • Tích theo từng thành phần của hai ma trận cùng kích thước A và B là ma trận A.*B với các phần tử là tích của các phần tử tương ứng của A và B. • Ví dụ: >> A=[ 1 2 3; 4 5 6]; B=[3 2 1;-1 2 2]; >> A.*B ans = 3 4 3 -4 10 12 Tính toán khoa học
  • 48. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • Phép chia và luỹ thừa theo từng thành phần: A./B và A.^B được định nghĩa tương tự. Lưu ý là các phép tính với các thành phần phải là có nghĩa, nếu không MATLAB sẽ báo lỗi. • Ví dụ: >> A./B ans = 1/3 1 3 -4 5/2 3 >> A.^B ans = 1 4 3 1/4 25 36 Tính toán khoa học
  • 49. C¸c phÐp to¸n ®èi víi vect¬ vµ ma trËn • Phép cộng ma trận với vô hướng: Giá trị của vô hướng được cộng vào từng thành phần của ma trận. • Ví dụ: >> A=[1 2 3; 2 3 4]; >> A+5 ans = 6 7 8 7 8 9 Tính toán khoa học
  • 50. C¸c hµm vµ phÐp to¸n vect¬ hãa • C¸c hµm cña Matlab ®Òu lµ hµm ®-îc vect¬ hãa, nghÜa lµ nÕu ¸p dông c¸c hµm cña Matlab ®èi víi m¶ng, nã sÏ t¹o ra m¶ng míi cã cïng kÝch th-íc víi c¸c thµnh phÇn lµ gi¸ trÞ hµm t¹i c¸c thµnh phÇn t-¬ng øng cña m¶ng ban ®Çu. • VÝ dô: Vẽ đồ thị hµm y=sin(x) trªn ®o¹n [0, 2*pi] >> x = (0:.1:2*pi); >> y = sin(x); >> plot(x,y) Tính toán khoa học
  • 51. C¸c hµm vµ phÐp to¸n vect¬ hãa • Matlab còng cung cÊp c¸c phÐp to¸n sè häc ®-îc vect¬ hãa, ®-îc ký hiÖu gièng nh- phÐp to¸n sè häc th«ng th-êng nh-ng cã thªm dÊu chÊm "." ë tr-íc. • VÝ dô: ĐÓ vÏ ®å thÞ hµm sè: y = x/(1+x2) trªn ®o¹n [5, 5] ta cã thÓ dïng c¸c lÖnh >> x = (-5:.1:5); >> y = x./(1+x.^2); >> plot(x,y) Tính toán khoa học
  • 52. C¸c hµm t¹o ma trËn ®Æc biÖt • • • • zeros(m,n) t¹o ma trËn mn gåm toµn sè 0; ones(m,n) t¹o ma trËn mn gåm toµn sè 1; eye(n) t¹o ma trËn ®¬n vÞ nn; diag(v) (gi¶ thiÕt v lµ vect¬ n chiÒu) t¹o ma trËn ®-êng chÐo kÝch th-íc nn víi v lµ ®-êng chÐo. Tính toán khoa học
  • 53. Biến xâu trong MATLAB • MATLAB cho phép sử dụng biến xâu ký tự: Sử dụng lệnh gán S = 'Any Characters' cho phép tạo mảng ký tự (xâu ký tự). • Ví dụ: >> msg = 'You''re right!' msg = You're right! • Lưu ý: Để tạo dấu ‘ trong xâu ký tự cần đánh hai dấu ‘ Tính toán khoa học
  • 54. Biến xâu trong MATLAB • Lệnh S = [S1 S2 ...] ghép các xâu S1, S2,... thành một xâu mới S. • Ví dụ: >> name = ['Michel' ' Paul ' ' Heath '] name = Michel Paul Heath >> name(1) ans = M >> name(1)+name(9) ans = 174 • Lưu ý đến cách truy cập đến các thành phần trong xâu. Tính toán khoa học
  • 55. Biến xâu trong MATLAB • S = char(X) tạo S là ký tự có mã ASCII là X. • X = double(S) chuyển ký tự thành số • Ví dụ: >> char([65 66 67]) ans = ABC >> X = double('ABC') X = 65 66 67 Tính toán khoa học
  • 56. Biến xâu trong MATLAB • Để khởi tạo biến mảng mà mỗi phần tử là một xâu, sử dụng: >> S = {'Hello' 'Yes' 'No' 'Goodbye'} S = 'Hello' 'Yes' 'No' 'Goodbye' >> S(4) ans = 'Goodbye' Tính toán khoa học
  • 57. LẬP TRÌNH TRÊN MATLAB Tính toán khoa học
  • 58. Câu lệnh trong Matlab • Câu lệnh hay gặp nhất trong Matlab có dạng variable = expression Câu lệnh này sẽ gán giá trị của biểu thức expression cho biến variable. Ví dụ: >> x=2^10*pi x= 3.216990877275948e+003 Tính toán khoa học
  • 59. Câu lệnh trong Matlab • Câu lệnh của Matlab cũng còn có thể có dạng đơn giản như sau: expression trong trường hợp này giá trị của biểu thức sẽ được gán cho biến ngầm định có tên là ans. Ví dụ: >> 2*pi*exp(-5) ans = 0.04233576958521 Tính toán khoa học
  • 60. Câu lệnh trong Matlab • Cuối cùng, một dạng nữa của câu lệnh trong Matlab là variable – Nếu như biến đã được gán giá trị trước đó thì nội dung của biến được đưa ra màn hình, – Nếu trái lại sẽ có thông báo rằng biến chưa được xác định. • Người sử dụng có thể tận dụng điều này để kiểm tra xem một tên biến đã được dùng hay chưa. Tính toán khoa học
  • 61. Câu lệnh trong Matlab • Câu lệnh của Matlab sẽ được thực hiện ngay sau khi nhấn phím Enter. Nếu câu lệnh Matlab kết thúc bởi Enter, theo ngầm định, Matlab sẽ đưa kết quả thực hiện lên thiết bị ra chuẩn (ngầm định là màn hình). • Muốn tránh việc đưa kết quả ra ngay trực tiếp sau câu lệnh, cần kết thúc câu lệnh bởi dấu ; sau đó mới đến Enter. • Khi câu lệnh của Matlab quá dài có thể ngắt thành hai hoặc nhiều dòng sử dụng dấu nối dòng … ở cuối mỗi dòng chứa câu lệnh. Tính toán khoa học
  • 62. Câu lệnh trong Matlab • Ví dụ: >> avariablewithlongname = 100 + (32-17.33)*5 ... + 2^3 - log(10)/log(2); • Để xóa tất cả biến trong Matlab, ta dùng lệnh >> clear • Để xóa một số biến cụ thể, ta dùng lệnh >> clear var1 var 2 ... trong đó var1, var2, .. Là các tên của cá biến cần xóa. Tính toán khoa học
  • 63. Các phép toán quan hệ và logic trong Matlab Phép toán quan hệ Ý nghĩa < Nhỏ hơn <= Nhỏ hơn hoặc bằng > Lớn hơn >= Lớn hơn hoặc bằng == Bằng ~= Không bằng Ý nghĩa Phép toán lôgic & AND (hội) | OR (tuyển) ~ NOT (phủ định) 0 FALSE Số khác không TRUE Tính toán khoa học
  • 64. Câu lệnh if • Dạng tổng quát của câu lệnh if là if expr1 statements1 elseif expr2 statements2 ... else statements end elseif và else là tuỳ chọn • Nhóm lệnh đi ngay sau biểu thức (expr) đầu tiên có giá trị khác 0 sẽ được thực hiện. • Nếu không có expr nào khác 0 thì nhóm lệnh sau else được thực hiện Tính toán khoa học
  • 65. Câu lệnh if • VÝ dô: >> t = rand(1); >> if t > 0.75 s = 0; elseif t < 0.25 s = 1; else s = 1-2*(t-0.25); end >> s s = 0 >> t t = 0.7622 Tính toán khoa học
  • 66. Câu lệnh if • C¸c phÐp to¸n quan hÖ trong Matlab lµ <, >, <=, >=, == (so s¸nh b»ng logic), vµ ~= (kh«ng b»ng). • C¸c phÐp to¸n hai ng«i nµy sÏ tr¶ l¹i gi¸ trÞ 0 hoÆc 1 (®èi víi c¸c biÕn v« h-íng): >> 5>3 ans = 1 >> 5<3 ans = 0 >> 5==3 ans = 0 Tính toán khoa học
  • 67. Câu lệnh vòng lặp for • Vòng lặp for lặp lại các câu lệnh trong thân của nó đối với các giá trị của biến chạy được lấy từ một vector dòng cho trước. • Ví dụ >> for i=[1,2,3,4] disp(i^2) end 1 4 9 16 Tính toán khoa học
  • 68. Câu lệnh vòng lặp for • Chú ý đến việc sử dụng hàm nội trú disp: hàm này đưa ra màn hình nội dung của biến. • Vòng lặp, cũng giống như câu lệnh if, phải kết thúc bởi end. Vòng lặp ở trên thường được viết dưới dạng như sau. >> for i=1:4 disp(i^2) end 1 4 9 16 • Nhớ lại cách khởi tạo 1:4 cũng chính là [1, 2, 3, 4]. Tính toán khoa học
  • 69. Câu lệnh vòng lặp for • Đoạn lệnh n=4; x = []; for i=1:n, x = [x, i^2], end hay x=[]; for i= 1:n x = [x, i^2]; end sẽ tạo ra vector x = [1, 4, 9, 16]. • Đoạn lệnh n=4;x=[]; for i=n:-1:1, x = [x, i^2],end sẽ tạo ra vector x = [16, 9, 4, 1]. Tính toán khoa học
  • 70. Câu lệnh vòng lặp for • Đoạn lệnh m = 4; n = 5; for i=1:m for j=1:n h(i,j) = i/(i+j-1); end end h sẽ tạo ra ma trận Hilbert kích thước 4 x 5. • Dấu ; ở cuối câu lệnh trong thân của vòng lặp dùng để ngăn Matlab không đưa cá kết quả trung gian, ma trận kết quả được đưa ra bởi lệnh h. Tính toán khoa học
  • 71. Câu lệnh while • Câu lệnh có dạng sau: while expr C¸c c©u lÖnh end • Các câu lệnh trong thân của vòng lặp while sẽ được lặp lại chứng nào biểu thức expr còn là true (có giá trị khác 0). Tính toán khoa học
  • 72. Câu lệnh while • Ví dụ: >> x=1; >> while 1+x > 1 x = x/2; end >> x x = 1.1102e-16 • Chú ý: Về mặt chính xác toán học thì 1 + x > 1 đối với mọi x > 0. Tính toán khoa học
  • 73. Câu lệnh while • Ví dụ: Đoạn chương trình sau đưa ra giá trị p nguyên dương nhỏ nhất để 1+1/(2^p)=1. x=1; p=0; y=1; z=x+y; while x~=z y=y/2; p=p+1; z=x+y; end p p = 53 Tính toán khoa học
  • 74. Hiện tượng tràn số nhỏ Ví dụ: Tìm q nguyên dương nhỏ nhất để 1/2q = 0. x=1; q=0; Tràn số nhỏ while x>0 underflow x=x/2; q=q+1; q end; q 1/ 2  0 q = 1075 Tính toán khoa học
  • 75. Hiện tượng tràn số lớn Ví dụ: Tìm r nguyên dương nhỏ nhất để 2r = inf. x=1; r=0; while x~=inf x=2*x; r=r+1; end r overflow 2  inf r r = 1024 Tính toán khoa học
  • 76. Cẩn thận với tràn số • Ví dụ (Kahan) h x y e f z = = = = = = 1./2.; 2./3. - h; 3./5. - h; (x+x+x) - h; (y+y+y+y+y)-h; f/e; • z=? • Nếu tính toán số học chính xác thì f/e = 0/0 Tính toán khoa học
  • 77. C©u lÖnh switch • Câu lệnh switch cho phép thực hiện rẽ nhánh dựa trên giá trị biểu thức. • Dạng tổng quát của câu lệnh switch là: switch bieuthuc case giatri cac cau lenh case {giatri1, giatri2, giatri3,...} cac cau lenh ... otherwise cac cau lenh end Tính toán khoa học
  • 78. Ví dụ: >> date= ‘Sunday’; >> switch lower(date) case {‘sunday',‘saturday’} disp(‘the weekend.') otherwise disp(‘the workday.') end Kết quả: the weekend. Tính toán khoa học
  • 79. C©u lÖnh break • LÖnh break dïng ®Ó ng¾t viÖc thùc hiÖn vßng lÆp WHILE hay lµ FOR. Trong vßng lÆp lång nhau, BREAK sÏ chØ tho¸t khái vßng lÆp trong. • NÕu sö dông lÖnh break ngoµi vßng lÆp FOR hay WHILE trong kÞch b¶n hoÆc hµm cña MATLAB, lÖnh nµy sÏ chÊm døt viÖc thùc hiÖn kÞch b¶n hay hµm t¹i chÝnh ®iÓm ®ã. LÖnh break sö dông trong c©u lÖnh IF, SWITCH-CASE, sÏ ng¾t c©u lÖnh t¹i ®iÓm ®ã. Tính toán khoa học
  • 80. Kịch bản (Script) • Kịch bản là dãy các câu lệnh của Matlab được ghi lại trong một m – file, file đuôi .m. • Khi đánh tên của file (không cần .m), dãy các lệnh này sẽ được thực hiện. • Lưu ý: m – file phải được đặt tại một trong các thư mục mà Matlab sẽ tự động tìm kiếm m – file trong đó; danh mục các thư mục như thế có thể xem nhờ lệnh path. • Một trong những thư mục mà Matlab luôn khảo sát chính là thư mục hiện thời. Thư mục này được hiển thị trong cửa sổ Current Directory. • Người sử dụng có thể thay đổi thư mục hiện thời nhờ dùng các tiện ích trong cửa sổ này. • Câu hỏi: thay đổi thư mục hiện thời như thế nào? Tính toán khoa học
  • 81. Kịch bản: Ví dụ • VÝ dô: Gi¶ sö file plotsin.m chøa c¸c dßng x = 0:2*pi/N:2*pi; y = sin(w*x); plot(x,y) • Khi ®ã d·y lÖnh >> N=100;w=5; >> plotsin sÏ ®-a ra ®å thÞ Tính toán khoa học
  • 82. Kịch bản (Script) • VÝ dô nµy cho thÊy c¸c lÖnh trong mét kÞch b¶n cã thÓ truy nhËp c¸c biÕn ®-îc x¸c ®Þnh trong Matlab ®-îc coi lµ biÕn tæng thÓ (l-u ý truy nhËp biÕn N vµ w trong plotsin.m). • C¸c c©u lÖnh trong kÞch b¶n ®-îc thùc hiÖn gièng nh- lµ chóng ®-îc ®¸nh trùc tiÕp tõ bµn phÝm. Tính toán khoa học
  • 83. Hàm (function) • ViÖc sö dông hµm cã những -u ®iÓm h¬n h¼n kÞch b¶n: – Dïng hµm, ng-êi sö dông cã thÓ t¹o những lÖnh míi trong Matlab. • Mét hµm ®-îc ®Þnh nghÜa trong m-file b¾t ®Çu bëi dßng cã cÊu tróc sau: function [out1,out2,...] = funcname(inp1, inp2,...) • PhÇn cßn l¹i cña m-file sÏ chøa c¸c c©u lÖnh cña Matlab tÝnh gi¸ trÞ cña c¸c ®Çu ra (outputi) vµ hoµn thµnh c¸c c«ng viÖc ®ßi hái kh¸c. Tính toán khoa học
  • 84. Hàm (function) • ĐiÓm quan träng cÇn l-u ý lµ: khi hµm ®-îc gäi ®Ó thùc hiÖn Matlab sÏ t¹o mét kh«ng gian nhí ®Þa ph-¬ng. • C¸c lÖnh trong hµm kh«ng ®-îc truy nhËp c¸c biÕn tõ kh«ng gian nhí toµn côc (trong phÇn héi tho¹i), ngo¹i trõ c¸c biÕn ®-îc liÖt kª trong danh s¸ch ®Çu vµo. • Còng chÝnh vì lÏ ®ã, c¸c biÕn ®-îc t¹o ra khi thùc hiÖn hµm sÏ bÞ xãa bá khi viÖc thùc hiÖn hµm kÕt thóc, ngäai trõ c¸c biÕn ®-îc liÖt kª trong danh s¸ch ®Çu ra Tính toán khoa học
  • 85. Hàm: Ví dụ 1 • VÝ dô 1. Tr-íc hÕt xÐt viÖc t¹o hµm randint sinh ngÉu nhiªn ma trËn nguyªn víi c¸c phÇn tö lµ sè ngÉu nhiªn trong kho¶ng tõ a ®Õn b. function A = randint(m,n,a,b) % RANDINT tạo ma trận nguyên ngẫu nhiên. % randint(m,n) cho mxn ma trận với các thành phần trong khoảng từ 0 đến 9. % rand(m,n,a,b) cho các phần tử từ a đến b. if nargin < 3, a = 0, b = 9; end A = floor((b-a-1)*rand(m,n)) + a+1; Tính toán khoa học
  • 86. Hàm: Ví dụ 1 • D·y lÖnh nµy cÇn ®-îc ghi vµo tÖp văn b¶n cã tªn randint.m (cã cïng tªn víi tªn hµm). Dßng ®Çu tiªn m« t¶ tªn hµm, c¸c biÕn vµo vµ c¸c biÕn ra; nÕu kh«ng cã dßng m« t¶ nµy thì tÖp sÏ chØ lµ tÖp kÞch b¶n. • Khi ®ã lÖnh Matlab z = randint(4,5), sÏ truyÒn gi¸ trÞ 4 vµ 5 cho c¸c biÕn m vµ n trong hµm vµ gi¸ trÞ cña hµm sÏ ®-îc g¸n cho biÕn z. Do c¸c biÕn trong hµm lµ biÕn ®Þa ph-¬ng, nªn tªn cña chóng lµ ®éc lËp víi c¸c biÕn ®ang sö dông trong m«i tr-êng Matlab. • Chó ý: viÖc sö dông hµm nargin (sè l-îng biÕn vµo - "number of input arguments") cho phÐp ta ®Æt gi¸ trÞ ngÇm ®Þnh cho c¸c biÕn vµo v¾ng mÆt, ë vÝ dô ®ang xÐt lµ hai biÕn a vµ b. • floor(X) rounds the elements of X to the nearest integers towards minus infinity. Tính toán khoa học
  • 87. Hàm: Ví dụ 2 • Mét hµm còng cã thÓ cã nhiÒu biÕn ®Çu ra. Ta xÐt vÝ dô minh ho¹ sau: • VÝ dô 2. VÝ dô, hµm sau ®©y tr¶ l¹i gi¸ trÞ trung bình (mean) vµ ®é lÖch chuÈn cña vect¬ x, nÕu x lµ vect¬; tr¶ l¹i hai vect¬ chøa gi¸ trÞ trung bình vµ ®é lÖch chuÈn cña tõng vect¬ cét trong ma trËn x: function [mean, stdev] = stat(x) % STAT Mean and standard deviation % For a vector x, stat(x) returns the % mean and standard deviation of x. % For a matrix x, stat(x) returns two row vectors containing, % respectively, the mean and standard deviation of each column. [m n] = size(x); if m == 1 m = n; % handle case of a row vector end mean = sum(x)/m; stdev = sqrt(sum(x.^2)/m - mean.^2); Tính toán khoa học
  • 88. Ví dụ 2 • Gi¶ sö ®o¹n ch-¬ng trình trªn ®-îc lưu víi tªn stat.m, khi ®ã lÖnh [xm, xd] = stat(x) sÏ g¸n gi¸ trÞ trung bình vµ ®é lÖch chuÈn cña ma trËn x cho c¸c biÕn xm vµ xd t-¬ng øng. • Ta còng cã thÓ lÊy mét sè ®Çu ra ®èi víi những hµm cã nhiÒu ®Çu ra. VÝ dô, lÖnh xm = stat(x) (kh«ng cã dÊu ngoÆc bäc biÕn xm) sÏ g¸n gi¸ trÞ trung bình cña x cho biÕn xm. Tính toán khoa học
  • 89. Ví dụ 3 • Hµm tÝnh -íc chung lín nhÊt cña hai sè nguyªn b»ng thuËt to¸n ¥c¬lit. VÝ dô nµy minh ho¹ viÖc sö dông th«ng b¸o lçi trong thùc hiÖn hµm. • Hµm néi tró cña Matlab rem(a, b) tr¶ l¹i phÇn d- (remainder) cña phÐp chia a cho b. function a = gcd(a,b) a = round(abs(a)); b = round(abs(b)); if a == 0 & b == 0 error('The gcd is not defined when both numbers are zero') else while b ~= 0 r = rem(a,b) a = b; b = r; end end Tính toán khoa học
  • 90. Ví dụ 4 • VÝ dô sau ®©y minh ho¹ kh¶ năng t¹o hµm vect¬ ho¸. • VÝ dô 4. Hµm tÝnh gi¸ trÞ f(x) = sin(x2). • C¸c lÖnh sau cÇn ®-îc cÊt giữ trong file văn b¶n fcn.m (Tªn hµm trong Matlab ph¶i trïng víi tªn cña m-file kh«ng cã phÇn më réng): function y = fcn(x) y = sin(x.^2); • L-u ý lµ nhê sö dông phÐp to¸n vect¬ hãa .^ nªn hµm fcn còng ®-îc vect¬ hãa. Tính toán khoa học
  • 91. Ví dụ 4 • Víi hµm fcn võa x¸c ®Þnh, ta cã thÓ sö dông hµm fcn t-¬ng tù nh- lµ hµm néi tró sin: >> x = (-pi:2*pi/100:pi)'; >> y = sin(x); >> z = fcn(x); >> plot(x,y,x,z) >> grid • Đå thÞ thu ®-îc như sau Tính toán khoa học
  • 92. Đồ thị hàm sin(x) và sin(x2) Chó ý: • C¸ch sö dông plot ®Ó vÏ ®ång thêi ®å thÞ cña hai (hoÆc nhiÒu h¬n) hµm sè. •LÖnh grid ®· hiÓn thÞ l-íi täa ®é trªn ®å thÞ. Tính toán khoa học
  • 93. Ví dụ 5 • Chó ý lµ f(x)=sin(x2) cã nghiÖm trong kho¶ng giữa 1 vµ 2 (chÝnh x¸c nghiÖm nµy lµ ). x  • ThuËt to¸n tæng qu¸t ®Ó tìm nghiÖm cña ph-¬ng trình phi tuyÕn lµ ph-¬ng ph¸p chia ®«i: Ta kh¶o s¸t hµm sè trªn ®o¹n mµ hµm sè thay ®æi dÊu (®o¹n nµy ch¾c ch¾n chøa nghiÖm) vµ chia ®«i liªn tôc ®o¹n chøa nghiÖm cho ®Õn khi ®o¹n nµy lµ rÊt nhá. Tính toán khoa học
  • 94. Ví dụ 5 • Hµm bisect cµi ®Æt ph-¬ng ph¸p chia ®«i m« t¶ mét sè kü thuËt lËp trình quan träng trªn Matlab. • Kü thuËt quan träng ®Çu tiªn, mµ thiÕu nã kh«ng thÓ cµi ®Æt thñ tôc chia ®«i, ®ã lµ kh¶ năng truyÒn tªn cña mét hµm nµy cho mét hµm kh¸c. ë ®©y, bisect cÇn biÕt tªn hµm mµ ®èi víi nã ta cÇn tìm nghiÖm. – Tªn hµm ®-îc truyÒn d-íi d¹ng x©u. – Hoặc lµ mçi khi ta cÇn sö dông bisect ®Ó tìm nghiÖm cña mét hµm nµo ®ã thì ta cÇn söa l¹i file bisect.m. Tính toán khoa học
  • 95. Ví dụ 5 • Hµm néi tró feval cÇn thiÕt cho viÖc tÝnh gi¸ trÞ hµm mµ tªn cña nã ®-îc chØ ra trong x©u. Nh- vËy, ®o¹n héi tho¹i >> fcn(2) vµ >> feval('fcn',2) lµ t-¬ng ®-¬ng (chó ý lµ dÊu nh¸y ®¬n ' ®-îc dïng ®Ó x¸c ®Þnh x©u). Mét biÕn cã thÓ g¸n cho gi¸ trÞ cña mét x©u: >> str = 'fcn'; >> feval(str,2) Tính toán khoa học
  • 96. Ví dụ 5 • Ch-¬ng trình Matlab sau ®©y sö dông c¸c ph-¬ng tiÖn x©u ®Ó truyÒn tªn cña hµm cho bisect. function c = bisect(fn,a,b,tol) % c = bisect('fn',a,b,tol) % Hµm nµy x¸c ®Þnh nghiÖm cña hµm sè trªn ®o¹n % [a,b] víi sai sè tol. Gi¶ thiÕt r»ng t¹i a vµ b hµm cã gi¸ trÞ ®èi dÊu. % TÝnh gi¸ trÞ cña hµm t¹i hai ®Çu mót vµ kiÓm tra xem cã sù thay ®æi cña dÊu hay kh«ng fa = feval(fn,a); fb = feval(fn,b); if fa*fb >= 0 error('Hµm sè ph¶i cã dÊu tr¸i ng-îc t¹i a vµ b') end Tính toán khoa học
  • 97. Ví dụ 5 % BiÕn done ®-îc sö dông ®Ó b¸o hiÖu lµ ta tìm ®-îc nghiÖm chÝnh x¸c % kh«ng cÇn chê ®Õn khi ®o¹n chøa nghiÖm ®ñ nhá. done = 0; % Bisect the interval c = (a+b)/2; % Main loop while abs(a-b) > 2*tol & ~done % TÝnh gi¸ trÞ hµm t¹i ®Çu mót fc = feval(fn,c); if fa*fc < 0 % NghiÖm ë bªn tr¸i c b = c; fb = fc; c = (a+b)/2; elseif fc*fb < 0 % NghiÖm ë bªn ph¶i c a = c; fa = fc; c = (a+b)/2; else % Tãm ®-îc nghiÖm done = 1; end end Tính toán khoa học
  • 98. Ví dụ 5 • Gi¶ sö r»ng ®o¹n ch-¬ng trình trªn ®-îc cÊt giữ trong file cã tªn bisect.m, ta cã thÓ thùc hiÖn nã nh- sau: >> x = bisect('fcn',1,2,1e-6) x= 1.7725 >> sqrt(pi)-x ans = -4.1087e-07 Tính toán khoa học
  • 99. Ví dụ 5 • m - file không chỉ tạo ra mét lÖnh míi trong Matlab mµ cïng víi nã trî gióp hÖ thèng còng tù ®éng më réng. LÖnh help sÏ ®-a ra ®äan chó gi¶i ®Çu tiªn trong m-file: >> help bisect % c = bisect('fn',a,b,tol) % Hµm nµy x¸c ®Þnh nghiÖm cña hµm sè trªn ®o¹n % [a,b] víi sai sè tol. Gi¶ thiÕt r»ng t¹i a vµ b hµm cã gi¸ trÞ ®èi dÊu. % TÝnh gi¸ trÞ cña hµm t¹i hai ®Çu mót vµ kiÓm tra xem cã sù thay ®æi cña dÊu hay kh«ng • NÕu muèn xem néi dung cña c¶ file chøa hµm h·y sö dông lÖnh: type filename trong ®ã filename lµ tªn file cÇn xem néi dung (phÇn më réng ngÇm ®Þnh lµ .m). Tính toán khoa học
  • 100. C¸c phÐp tÝnh ma trËn n©ng cao Tính toán khoa học
  • 101. TrÞ riªng vµ vect¬ riªng • Mét trong những phÐp tÝnh rÊt hay ph¶i thùc hiÖn víi ma trËn ®ã lµ tìm gi¸ trÞ riªng vµ vect¬ riªng víi lÖnh eig. NÕu A lµ ma trËn vu«ng, thì ev = eig(A) sÏ cho ta gi¸ trÞ riªng cña A trong mét vect¬, cßn [V,D] = eig(A) cho ta ph©n tÝch phæ cña A: – V lµ ma trËn mµ c¸c cét cña nã lµ c¸c vect¬ riªng cña A, – D lµ ma trËn ®-êng chÐo víi c¸c phÇn tö trªn ®-êng chÐo lµ c¸c trÞ riªng cña A. – Đ¼ng thøc AV = VD ®-îc thùc hiÖn. – NÕu A lµ chÐo ho¸, thì V lµ chÐo ho¸, cßn nÕu A lµ ®èi xøng thì V lµ trùc giao (nghÜa lµ VTV = I). Tính toán khoa học
  • 102. Ví dụ A = [1 3 2;4 5 6;7 8 >> eig(A) ans = 15.9743 -0.4871 + 0.5711i -0.4871 - 0.5711i >> [V,D] = eig(A) V = -0.2155 -0.5277 -0.8216 D = 15.9743 0 0 >> A*V-V*D ans = 1.0e-14 * -0.0888 0 0 9]; 0.0683 + 0.7215i -0.3613 - 0.0027i 0.2851 - 0.5129i 0.0683 - 0.7215i -0.3613 + 0.0027i 0.2851 + 0.5129i 0 -0.4871 + 0.5711i 0 0 0 -0.4871 - 0.5711i 0.0777 - 0.1998i -0.0583 + 0.0666i -0.0555 + 0.2387i 0.0777 + 0.1998i -0.0583 - 0.0666i -0.0555 - 0.2387i Tính toán khoa học
  • 103. Ví dụ: A là ma trận đường chéo >> A=[1 2 3; 0 3 4; 0 0 5] A = 1 2 3 0 3 4 0 0 5 >> [V, D]= V = 1.0000 0 0 D = 1 0 0 eig(A) 0.7071 0.7071 0 0 3 0 0.6163 0.7044 0.3522 0 0 5 Tính toán khoa học
  • 104. Ví dụ: A là ma trận đối xứng >> A=[5 6 7; 6 7 8; 7 8 9] A = 5 6 7 6 7 8 7 8 9 >> [V, D]= eig(A); V V = 0.7685 0.4082 0.4927 0.0660 -0.8165 0.5736 -0.6365 0.4082 0.6544 >> V*V' ans = 1.0000 -0.0000 0.0000 -0.0000 1.0000 0.0000 0.0000 0.0000 1.0000 Tính toán khoa học
  • 105. Các phép toán nâng cao • Matlab cßn cung cÊp rÊt nhiÒu hµm liªn quan ®Õn xö lý ma trËn. PhÇn lín c¸c hµm nh- vËy liªn quan ®Õn ph©n tÝch ma trËn d-íi d¹ng tÝch. Mét sè phÐp ph©n tÝch hay dïng trong sè c¸c ph©n tÝch nh- vËy lµ: – lu tÝnh ph©n tÝch LU cña ma trËn; – chol tÝnh ph©n tÝch Cholesky cña ma trËn ®èi xøng x¸c ®Þnh d-¬ng; – qr tÝnh ph©n tÝch QR cña ma trËn; – svd tÝnh trÞ chÝnh qui (singular values) hay trÞ chÝnh qui ph©n r· (singular value decomposition) cña ma trËn; – cond, condest, rcond tÝnh hoÆc ®¸nh gi¸ c¸c sè ®iÒu kiÖn cña ma trËn (condition numbers); – norm tÝnh c¸c lo¹i chuÈn (norms) cña ma trËn hay vect¬; Tính toán khoa học
  • 106. TÝnh to¸n víi ma trËn th-a (Sparse matrix computations) • Matlab cã kh¶ năng cÊt giữ vµ lµm viÖc víi c¸c ma trËn th-a. ĐiÒu nµy gióp phÇn n©ng cao kh¶ năng øng dông cña Matlab vµo viÖc gi¶i quyÕt c¸c vÊn ®Ò cña thùc tÕ. • T¹o ma trËn th-a cã thÓ cã ®«i chót phøc t¹p h¬n, trong khi lµm viÖc víi chóng l¹i ®¬n gi¶n h¬n, bëi vì c¸c phÐp to¸n cã thÓ ¸p dông ®èi víi c¶ ma trËn th-a lÉn ma trËn dµy. Ch¼ng h¹n, to¸n tö chia cã lµm viÖc víi c¶ ma trËn th-a, vì thÕ hÖ th-a cã thÓ gi¶i ®-îc gièng nh- lµ hÖ dµy. • Mét sè hµm néi tró cña Matlab cã thÓ lµm viÖc víi ma trËn th-a nh-ng kh«ng ¸p dông cho ma trËn dµy Tính toán khoa học
  • 107. T¹o ma trËn th-a • NÕu ma trËn A ®-îc cÊt giữ trong d¹ng th«ng th-êng (dµy), thì lÖnh S = sparse(A) t¹o b¶n sao cña A ®-îc cÊt giữ trong d¹ng th-a. VÝ dô: >> A = [0 0 1;1 0 2;0 -3 0] A= 0 0 1 1 0 2 0 -3 0 >> S = sparse(A) S= (2,1) 1 (3,2) -3 (1,3) 1 (2,3) 2 Tính toán khoa học
  • 108. T¹o ma trËn th-a >> whos Name Size Bytes Class A 3x3 72 double array S 3x3 64 sparse array Grand total is 13 elements using 136 bytes • RÊt tiÕc lµ d¹ng nµy cña lÖnh sparse lµ kh«ng cã Ých nhiÒu l¾m, bëi vì ma trËn A th-êng lµ rÊt lín vµ viÖc t¹o tr-íc nã trong d¹ng dµy ®ßi hái rÊt nhiÒu thêi gian. Tính toán khoa học
  • 109. T¹o ma trËn th-a • Matlab cung cÊp mét sè c¸ch nhËp ma trËn th-a tiÖn lîi h¬n. LÖnh S = sparse(m,n) t¹o mn ma trËn toµn sè 0 d-ới d¹ng th-a. Sau ®ã c¸c thµnh phÇn kh¸c kh«ng cña nã sÏ ®-îc bæ sung dÇn dÇn: >> A = sparse(3,2) A= All zero sparse: 3-by-2 Tính toán khoa học
  • 110. T¹o ma trËn th-a • Tiếp theo ta đánh vào các phần tử khác không >> A(1,2)=1; >> A(3,1)=4; >> A(3,2)=-1; >> A A = (3,1) (1,2) (3,2) 4 1 -1 • (Râ rµng c¸ch lµm nµy lµ tiÖn lîi h¬n, do ta kh«ng ph¶i nhËp c¸c phÇn tö 0 cña ma trËn) Tính toán khoa học
  • 111. T¹o ma trËn th-a • Cßn cã nhiÒu kh¶ năng sö dông kh¸c cña lÖnh sparse. H·y sö dông help sparse ®Ó xem chi tiÕt thªm vÒ lÖnh nµy. Tính toán khoa học
  • 112. T¹o ma trËn th-a >> Mét trong những d¹ng ma trËn th-a rÊt phæ biÕn lµ ma trËn d¹ng băng, tøc lµ ma trËn víi c¸c phÇn tö kh¸c 0 chØ n»m trªn mét sè ®-êng chÐo nµo ®ã. C¸c ma trËn nh- vËy cã thÓ t¹o bëi lÖnh spdiags. XÐt ma trËn sau: A=[ 64 -16 0 -16 0 0 0 0 0 -16 0 -16 0 0 0 0 0; 64 -16 0 -16 0 0 0 0; -16 64 0 0 -16 0 0 0; 0 0 64 -16 0 -16 0 0; -16 0 -16 64 -16 0 -16 0; 0 -16 0 -16 64 0 0 -16; 0 0 -16 0 0 64 -16 0; 0 0 0 -16 0 -16 64 -16; 0 0 0 0 -16 0 -16 64] Tính toán khoa học
  • 113. T¹o ma trËn th-a • Đ©y lµ ma trËn kÝch th-íc 99 víi 5 ®-êng chÐo kh¸c kh«ng. Trong c¸ch chØ sè ho¸ cña Matlab, chØ sè cña c¸c ®-êng chÐo kh¸c kh«ng cña A lµ -3, -1, 0, 1, and 3 (®-êng chÐo chÝnh cã chØ sè lµ 0, c¸c ®-êng chÐo trªn nã ®-îc tiÕp tôc ®¸nh sè tăng dÇn b¾t ®Çu tõ 1, c¸c ®-êng chÐo d-íi nã ®-îc tiÕp tôc ®¸nh sè gi¶m dÇn b¾t ®Çu tõ -1). ĐÓ t¹o ma trËn nµy d-íi d¹ng th-a, tr-íc hÕt cÇn t¹o ma trËn kÝch th-íc 95 chøa c¸c phÇn tö kh¸c 0 cña c¸c ®-êng chÐo. TÊt nhiªn, mçi ®-êng chÐo lµ mét vect¬ cét cã kÝch th-íc kh¸c nhau, chØ cã ®-êng chÐo chÝnh cã ®é dµi 9. Tính toán khoa học
  • 114. T¹o ma trËn th-a • ĐÓ tËp hîp tÊt c¶ c¸c ®-êng chÐo trong mét ma trËn, c¸c ®-êng chÐo cã ®é dµi ng¾n h¬n cÇn ®-îc bæ sung thªm c¸c sè 0 ®Ó ®-îc vect¬ cét cã cïng kÝch th-íc víi ®-êng chÐo chÝnh. Qui t¾c bæ sung lµ: Nèi ®u«i ®èi víi c¸c ®-êng chÐo n»m d-íi ®-êng chÐo chÝnh, vµ nèi ®Çu ®èi víi c¸c ®-êng chÐo n»m trªn ®-êng chÐo chÝnh. Nh- vËy ta cÇn t¹o ma trËn: >> B = [ -16 -16 -16 -16 -16 0 -16 -16 -16 -16 -16 0 0 -16 0 -16 0 0 64 0 0 64 -16 0 64 -16 0 64 0 -16 64 -16 -16 64 -16 -16 64 0 -16 64 -16 -16 64 -16 -16]; Tính toán khoa học
  • 115. T¹o ma trËn th-a • Trong ví dụ trên: CÇn l-u ý ®Õn kü thuËt t¹o c¸c dßng cña ma trËn kÝch th-íc lín trªn d·y c¸c dßng. • LÖnh spdiags còng ®ßi hái vect¬ chØ sè cña c¸c ®-êng chÐo: >> d = [-3,-1,0,1,3]; • B©y giê ma trËn cã thÓ t¹o nh- sau: S = spdiags(B,d,9,9); • Hai ®èi sè cuèi cïng cho kÝch th-íc cña ma trËn S. Tính toán khoa học
  • 116. T¹o ma trËn th-a • Cã lÏ ma trËn th-a hay dïng nhÊt lµ ma trËn ®¬n vÞ. Nhí l¹i lµ ma trËn ®¬n vÞ cã thÓ t¹o d-íi d¹ng dµy bëi lÖnh eye. ĐÓ t¹o ma trËn ®¬n vÞ th-a, cã thÓ dïng lÖnh I = speye(n) • Mét lÖnh tiÖn Ých kh¸c lµ spy – LÖnh nµy hiÓn thÞ ®å thÞ cÊu tróc th-a cña ma trËn. VÝ dô, cÊu tróc th-a cña ma trËn S ë trªn cã thÓ hiÓn thÞ nhê ®¸nh lÖnh: >> spy(S) Tính toán khoa học
  • 117. Đå ho¹ n©ng cao Matlab cã thÓ ®-a ra nhiều d¹ng ®å thÞ kh¸c nhau: – – – – – ®-êng cong hai chiÒu (2D curves), mÆt 3 chiÒu (3D surfaces), ®-êng khung cña mÆt 3 chiÒu (contour plots of 3D surfaces), ®-êng cong tham sè 2D vµ 3D (parametric curves in 2D and 3D). ..... Tính toán khoa học
  • 118. Đ-a nhiÒu ®å thÞ lªn cïng mét cöa sæ • LÖnh subplot t¹o nhiÒu b¶n vÏ trªn cïng mét cöa sæ. ChÝnh x¸c h¬n, subplot(m,n,i) t¹o mn b¶n vÏ, ®-îc xÕp trong m¶ng víi m dßng vµ n cét. LÖnh nµy còng b¾t buéc lÖnh plot tiÕp theo ph¶i chuyÓn ®Õn hÖ to¹ ®é thø i (®Õm theo sè dßng). VÝ dô >> t = (0:.1:2*pi)'; >> subplot(2,2,1) >> plot(t,sin(t)) >> subplot(2,2,2) >> plot(t,cos(t)) >> subplot(2,2,3) >> plot(t,exp(t)) >> subplot(2,2,4) >> plot(t,1./(1+t.^2)) Tính toán khoa học
  • 119. Đưa ra nhiều đồ thị Tính toán khoa học
  • 120. Vẽ đường • Hµm plot ®-îc sö dông ®Ó vÏ dữ liÖu trªn mÆt ph¼ng. Cho vect¬ x gåm c¸c hoµnh ®é x1, ..., xn vµ vect¬ y gåm c¸c tung ®é y1,..., yn, lÖnh plot(x,y) sÏ vÏ c¸c ®iÓm tõ (x1, y1) ®Õn (xn, yn). Theo ngÇm ®Þnh c¸c ®iÓm nµy sÏ ®-îc nèi theo thø tù bëi c¸c ®o¹n th¼ng. • Tæng qu¸t c©u lÖnh cã d¹ng sau plot(x1, y1,linestyle1,...,xn,yn,linestylen) trong ®ã linestylei (i=1,2,..., n) lµ x©u hoÆc biÕn x©u chøa kiÓu ®-êng vÏ. Tính toán khoa học
  • 121. Vẽ đường • C©u lÖnh nµy cho phÐp vÏ c¸c bé dữ liÖu: (x1,y1) víi kiÓu ®-êng vÏ linestyle1, (x2,y2) víi kiÓu ®-êng vÏ linestyle2, ..., (xn,yn) víi kiÓu ®-êng vÏ linestylen trªn cïng mét hệ trục toạ độ. • KiÓu ®-êng vÏ x¸c ®Þnh mµu vÏ, ký tù dïng ®Ó hiÓn thÞ ®iÓm dữ liÖu vµ d¹ng cña ®-êng nèi. KiÓu ®-êng vÏ lµ x©u ®-îc t¹o b»ng c¸ch ghÐp c¸c ký tù tõ c¸c cét sau, mçi cét lÊy kh«ng qu¸ mét ký tù: Tính toán khoa học
  • 122. Vẽ đường MÇu cña ®-êng vÏ y yellow m magenta c cyan r red g green b blue w white k black Ký tù hiÓn thÞ . o x + * s d v ^ < > p dÊu chÊm (point) vßng trßn (circle) dÊu x (x-mark) dÊu céng (plus) dÊu sao (star) h×nh vu«ng (square) kim c-¬ng (diamond) tam gi¸c chØ xuèng tam gi¸c chØ lªn tam gi¸c chØ sang tr¸i tam gi¸c chØ sang phải «ng sao 5 c¸nh (pentagram) h «ng sao 6 c¸nh (hexagram) Tính toán khoa học NÐt vÏ : -. -- solid dotted dashdot dashed
  • 123. Vẽ đường • VÝ dô. – LÖnh plot(x,y,'ro:') vÏ ®-êng nèi bëi c¸c chÊm mµu ®á víi ®iÓm dữ liÖu lµ vßng trßn nhá. – LÖnh plot(x,y,'gd') vÏ c¸c ®iÓm dữ liÖu hình d¹ng kim c-¬ng mµu xanh l¸ c©y mµ kh«ng nèi c¸c ®iÓm nµy. – LÖnh plot(x,y,'y-',x,y,'go') vÏ dữ liÖu hai lÇn víi ®-êng nèi liÒn nÐt mµu vµng vµ c¸c ®iÓm dữ liÖu lµ c¸c vßng trßn xanh l¸ c©y. Tính toán khoa học
  • 124. Vẽ đường • ĐÓ vÏ tø gi¸c víi c¸c ®Ønh (0,0), (1,1), (4,2) vµ (5,-1) ta cã thÓ sö dông c¸c lÖnh sau >> x=[0 1 4 5 0]; >> y=[0 1 2 -1 0]; >> plot(x,y) Tính toán khoa học
  • 125. Vẽ đường • Ta cã thÓ vÏ gÇn ®óng ®å thÞ cña hµm sè nhê vÏ nhiÒu ®iÓm trªn ®å thÞ cña nã. • VÝ dô: VÏ ®å thÞ cña hµm y=x3 trªn ®o¹n [-2,2], – Tr-íc hÕt x¸c ®Þnh vect¬ lưới chia đoạn [-2, 2] với ®é dµi b-íc chia lµ 0.05 >> x=-2:.05:2; – TiÕp ®Õn tÝnh vect¬ y cã kÝch th-íc gièng x víi c¸c thµnh phÇn lµ luü thõa bËc ba cña c¸c thµnh phÇn cña vect¬ x >> y=x.^3; – Sö dông lÖnh plot(x, y) ®Ó vÏ ®å thÞ cña hµm sè: >> plot(x,y) – ĐÆt tªn cho hình vÏ nhê ®¸nh lÖnh >> title('Graph of f(x)=x^3') Tính toán khoa học
  • 126. Đå thÞ hµm sè y = x3 Tính toán khoa học
  • 127. Vẽ đường cong tham số • ViÖc vÏ c¸c ®-êng cong tham sè cã thÓ thùc hiÖn mét c¸ch t-¬ng tù. VÝ dụ: ĐÓ vÏ ®-êng r(t) = (2tcost/(t+1), 2tsint/(t+1)) víi t  [0,4], tr-íc hÕt ta x¸c ®Þnh vect¬ lưới chia t: >> t=0:.1:4*pi; TiÕp ®Õn tÝnh c¸c to¹ ®é x, y vµ vÏ ®-êng cong: >> x=2*t.*cos(t)./(t+1); >> y=2*t.*sin(t)./(t+1); >> plot(x,y); >> title('(2tcost/(t+1),2tsint/(t+1))') Tính toán khoa học
  • 128. Vẽ đường cong tham số • MATLAB tù ®éng phãng c¸c trôc ®Ó ®å thÞ lÊp ®Çy mµn hình. ĐÓ cã ®-îc tû lÖ chÝnh x¸c h·y ®¸nh lÖnh axis equal. >> axis equal Tính toán khoa học
  • 129. Vẽ đường • ĐÓ vÏ nhiÒu ®-êng trªn cïng mét hình vÏ, h·y sö dông lÖnh hold on. • VÝ dô: VÏ hai vßng trßn x2 + y2 = 4 vµ (x-1)2 + (y-1)2 = 1. • Ph-¬ng trình tham sè cña chóng lµ r1(t)=(2cost,2sint) vµ r2(t)=(1+cost,1+sint) víi t  [0,2]. Tính toán khoa học
  • 130. Vẽ đường >> t=0:pi/20:2*pi; >> plot(2*cos(t),2*sin(t)) >> hold on >> plot(1+cos(t),1+sin(t)) >> axis equal >> title('The circles x^2+y^2=4 and (x-1)^2 +(y-1)^2=1') Tính toán khoa học
  • 131. Vẽ đường cong 3D • Trong kh«ng gian 3 chiÒu lÖnh t-¬ng tù nhplot lµ plot3. • VÝ dô. ĐÓ vÏ ®-êng tham sè r(t)=(cos(t),sin(t),t) víi t  [0,8] ta thùc hiÖn c¸c lÖnh sau. >> t=0:.1:8*pi; >> plot3(cos(t),sin(t),t) >> title('(cos t,sin t,t)') Tính toán khoa học
  • 132. Vẽ đường cong 3D Tính toán khoa học
  • 133. Vẽ đường cong trong toạ độ cực • VÝ dô. ĐÓ vÏ ®-êng trong to¹ ®é cùc =2, víi 05 ta cã thÓ ®¸nh c¸c lÖnh sau >>theta = 0:0.2:5*pi; >>rho=theta.^2; >>polar(theta,rho,'hb') Tính toán khoa học
  • 134. Vẽ đường cong trong toạ độ cực Tính toán khoa học
  • 135. Vẽ mặt • ĐÓ vÏ ®å thÞ cña hµm sè f(x,y) trªn miÒn hình chữ nhËt R = [a,b]×[c,d] = {(x,y) | a x  b; c  y  d}, tr-íc hÕt ta cÇn t¹o l-íi ®iÓm trong miÒn kh¶o s¸t nhê hµm meshgrid: [X,Y] = meshgrid(x,y) • tạo lưới chia hình chữ nhật được mô tả bởi vectơ x, y trong hai mảng X, Y. Các dòng trong X là các bản sao của vectơ x, các cột trong Y là các bản sao của vectơ y Tính toán khoa học
  • 136. Vẽ mặt • VÝ dô, ®Ó chia l-íi miÒn chữ nhËt [0,4]  [0,3] thµnh c¸c l-íi chữ nhËt con kÝch th-íc réng 1 cao 0.5, tr-íc hÕt ta t¹o vect¬ x vµ y x¸c ®Þnh phÐp chia l-íi. >> x=0:4; >> y=0:.5:3; • TiÕp ®Õn dïng meshgrid ®Ó x¸c ®Þnh c¸c ®iÓm trªn l-íi. >> [X,Y]=meshgrid(x,y) Tính toán khoa học
  • 137. Vẽ mặt • Gi¶ sö ta cÇn vÏ ®å thÞ cña hµm sè f(x,y)=3x - 2y. • Khi ®ã ta cÇn tÝnh ma trËn Z gåm c¸c to¹ ®é theo trôc z. >> Z=3*X-2*Y • Cuèi cïng sö dông lÖnh surf ®Ó vÏ mÆt. >> surf(X,Y,Z) >> title('Graph of f(x,y)=3x-2y') Tính toán khoa học
  • 138. Vẽ mặt Tính toán khoa học
  • 139. Vẽ mặt • TiÕp theo ta xÐt viÖc vÏ ®å thÞ cña hµm: f(x,y)=x2y - 2y trªn miÒn [-2,2]  [-1,1]. • Ta sö dông l-íi vu«ng víi ®é dµi b-íc chia 0.1: >> [X,Y]=meshgrid(-2:.1:2,-1:.1:1); • Sö dông phÐp to¸n vect¬ ho¸ ®Ó x¸c ®Þnh Z. >> Z=(X.^2).*Y-2*Y; • Cuèi cïng ta vÏ mÆt nhê lÖnh. >> surf(X,Y,Z) >> title('Graph of f(x,y)=x^2y-2y') Tính toán khoa học
  • 140. Vẽ mặt Tính toán khoa học
  • 141. Vẽ mặt • Mét trong những khã khăn khi vÏ mÆt lµ ph¶i ®èi mÆt víi phÐp chia cho 0. Ch¼ng h¹n, ta muèn vÏ ®å thÞ cña hµm sè f ( x, y )  xy x y 2 2 • trªn l-íi vu«ng [-1, 1]  [-1, 1]. Tính toán khoa học
  • 142. Vẽ mặt • Sử dụng các lệnh >> [X,Y]=meshgrid(-1:.1:1); >> Z=X.*Y./sqrt(X.^2+Y.^2); Warning: Divide by zero. • Lỗi do (0,0) là điểm thuộc lưới chia. • NÕu ta cø vÏ mÆt thì ®iÓm cña l-íi t¹i (0,0) sÏ khuyÕt Tính toán khoa học
  • 143. Vẽ mặt • ĐÓ tho¸t khái tình huèng nµy mét c¸ch lµm ®¬n gi¶n lµ h·y x¸c ®Þnh l-íi sao cho ®iÓm (0,0) kh«ng thuéc l-íi ®iÓm chia. • Ch¼ng h¹n, ta cã thÓ tiÕn hµnh nh- sau >> [X,Y]=meshgrid(-.99:.1:1); >> Z=X.*Y./sqrt(X.^2+Y.^2); >> surf(X,Y,Z) >> title('Graph of f(x,y)=xy/surd(x^2+y^2)') >> axis equal Tính toán khoa học
  • 144. Vẽ mặt Tính toán khoa học
  • 145. Vẽ mặt • VÝ dô. VÏ z = sin(r)/r • víi r  x  y , 8  x  8;  8  y  8. 2 2 x = -8:0.5:8; y = -8:0.5:8; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; mesh(X,Y,Z) Tính toán khoa học
  • 146. Vẽ mặt Tính toán khoa học
  • 147. Vẽ mặt • ĐiÓm kh¸c nhau giữa hai lÖnh vÏ surf vµ mesh lµ: surf t« mµu bÒ mÆt, cßn mesh thì kh«ng. • ViÖc vÏ mÆt tham sè ®-îc tiÕn hµnh mét c¸ch t-¬ng tù. Cho ph-¬ng trình tham sè r(u,v)=(x(u,v),y(u,v),z(u,v)) cña mÆt, trong ®ã miÒn biÕn thiªn cña (u,v) lµ hình chữ nhËt, tr-íc hÕt ta t¹o l-íi theo c¸c tham sè u vµ v, sau ®ã x¸c ®Þnh c¸c to¹ ®é x, y vµ z theo l-íi nµy sö dông ph-¬ng trình tham sè. Tính toán khoa học
  • 148. Vẽ mặt  • VÝ dô. XÐt mÆt cÇu b¸n kÝnh t©m t¹i gèc to¹ ®é cña kh«ng gian R3 cã ph-¬ng trình tham sè r ( , )  (  sin  cos  , sin  sin  ,  cos  ); 0     ; 0    2 • Gi¶ sö ta cÇn vÏ mÆt cÇu ®¬n vÞ. • Tr-íc hÕt ta t¹o l-íi theo c¸c tham sè  vµ . >> phi=0:pi/20:pi; >> theta=0:pi/10:2*pi; >> [Phi,Theta]=meshgrid(phi,theta); Tính toán khoa học
  • 149. Vẽ mặt • TiÕp theo ta sö dông ph-¬ng trình tham sè víi r = 1 ®Ó tÝnh c¸c to¹ ®é x, y vµ z >> X=sin(Phi).*cos(Theta); >> Y=sin(Phi).*sin(Theta); >> Z=cos(Phi); • Cuèi cïng ta vÏ mÆt vµ phãng trôc sao cho thu ®-îc hình ¶nh tr«ng gièng mÆt cÇu h¬n. >> surf(X,Y,Z) >> axis equal >> title('Unit sphere in {bf R}^3') Tính toán khoa học
  • 150. Vẽ mặt Tính toán khoa học
  • 151. Đa thức trong Matlab • Đa thức bậc n P= anxn +an-1xn-1+…+a1x+a0 • Biểu diễn bằng vector hàng n+1 phần tử – Sắp xếp hệ số từ bậc cao nhất đến bậc 0 – Ví dụ p=3x4 + x2 -3x+5 • >>p=[3 0 1 -3 5] • p= 3 0 1 -3 5 Tính toán khoa học
  • 152. Các phép tính với đa thức Tính toán khoa học
  • 153. Các phép tính với đa thức • Ví dụ 1: >> r=[1 3]; >> p=poly(r) p=1–4 3 >>polyval(p,[1 3 5]) ans = 0 0 8 • Ví dụ 2: x 4  3x  14 ( x 4  16  3x  2)  2 x 4 x2  4 1 2  x2  4   x2 x2 k(x)=x2 +4 r=[1 2] p=[-2 2] >> printsys(r,p,’x’) num/den = x+3 ------------x^2 - 4 x + 3 Tính toán khoa học
  • 154. Các phép tính với đa thức Ví dụ 3: Tính toán khoa học
  • 155. Biểu thức chữ Tính toán khoa học
  • 156. Tính toán trên biểu thức chữ • Tính toán biểu thức chữ gồm 3 bước – Khai báo biến chữ – Nhập hàm chữ – Dùng các hàm chuẩn để tính toán hàm chữ • Khai báo biến chữ: có 2 cách – Khai báo 1 hoặc nhiều biến cùng lúc syms bien_1 bien_2 … bien_n – Khai báo từng biến • tenbien= sym(‘tenbien’) Tính toán khoa học
  • 157. Tính toán trên biểu thức chữ • Nhập hàm chữ – Nhập sau khai báo syms hoặc sym – Nhập đồng thời với khai báo sym • Tenham=sym(‘bieu thuc chu’); • Ví dụ: nhập hàm x2  12x  4 Tính toán khoa học
  • 158. Tính toán trên biểu thức chữ • Các hàm xử lý hàm chữ chứa trong thư mục ToolboxesSymbolic Math Tính toán khoa học
  • 159. Tính toán trên biểu thức chữ Tính toán khoa học
  • 160. Tính toán trên biểu thức chữ • Ví dụ: – – – – – cho hàm y = x2 + 2x +3 Tìm đạo hàm bậc 1 và bậc 2 của y Tìm giới hạn y/x khi x tiến tới  Tính tích phân hàm y trong đoạn [1, 3] Tìm nghiệm của phương trình y = 0 Tính toán khoa học
  • 161. Tính toán trên biểu thức chữ – – – – syms x; y = x^2+2*x+3; % y=sym(‘x^2+2*x+3’); Dy=diff(y) % đạo hàm bậc nhất • Dy =2 *x +2 – D2y=diff(y,2) % đạo hàm bậc 2 • D2y = 2 – B=limit(y/x,x,inf,’left’) % tìm giới hạn trái • B = inf Tính toán khoa học
  • 162. Tính toán trên biểu thức chữ – c = int(y,1,3) % tích phân xác định • C =68/3 – r= solve(y) % tìm nghiệm r= -1+i*2^(1/2) -1-i*2^(1/2) – Ngoài ra có thể tìm nghiệm của PT trên bằng nhiều cách • r = solve (‘x^2+2*x+3’) • r = roots([1 2 3]) Tính toán khoa học
  • 163. Vào-Ra dữ liệu • Vào dữ liệu từ bàn phím – Các lệnh liên quan đến nhập dữ liệu từ bàn phím: input, keyboard, menu và pause. • Lệnh input: Lệnh này đưa ra thông báo nhắc người sử dụng nhập dữ liệu và nhận dữ liệu đánh từ bàn phím. Lệnh có dạng R = input(string) trong đó R là tên biến, string là xâu ký tự chứa thông báo nhắc người sử dụng biết về dữ liệu cần nạp. Dữ liệu có thể là biểu thức bất kỳ. Nếu người sử dụng ấn Enter ngay thì R sẽ là ma trận rỗng. Tính toán khoa học
  • 164. Vào dữ liệu từ bàn phím • Ví dụ: >> m=input('Nhap so dong cua ma tran: ') Nhap so dong cua ma tran: 3 m = 3 >> n = input('Hay nhap so cot cua ma tran n =') Hay nhap so cot cua ma tran n =5 n = 5 Tính toán khoa học
  • 165. Vào dữ liệu từ bàn phím • Ví dụ >> a =input('Hay nhap cac phan tu cua ma tran a theo khuon dang:n [Cacphan tu dong 1 ;n ... n Cac phan tu dong m] : nn') Hay nhap cac phan tu cua ma tran a theo khuon dang: [Cacphan tu dong 1 ; ... Cac phan tu dong m] : [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15] Tính toán khoa học
  • 166. Vào-Ra dữ liệu • Lệnh keyboard – Khi lệnh này được đặt trong m – file thì nó ngắt việc thực hiện chương trình. – Màn hình xuất hiện dấu nhắc >>K. – Người sử dụng có thể xem hoặc biến đổi giá trị các biến bằng các lệnh của Matlab. – Chấm dứt chế độ dùng Enter. – Tiện lợi cho việc gỡ rối (debug) chương trình. Tính toán khoa học
  • 167. Vào-Ra dữ liệu • Lệnh menu: Cho phép tạo bảng lựa chọn. Lệnh có dạng sau. CHOICE = menu(HEADER,ITEM1,..., ITEMn) – Lệnh sẽ hiển thị tiêu đề của bảng chọn chứa trong xâu HEADER, tiếp đến là dãy các lựa chọn trong các xâu: ITEM1, …, ITEMn. – Chỉ số của lựa chọn sẽ được trả lại cho biến CHOICE. • Trong màn hình đồ họa Matlab sẽ hiển thị bảng lựa chọn trong một cửa sổ MENU với các phím ấn chọn. Tính toán khoa học
  • 168. Vào-Ra dữ liệu • Ví dụ: >> CHOICE = menu('Hay chon cach vao du lieu: ','Keyboard', 'File ','Random ' ) • Trên màn hình đồ họa hiển thị bảng lựa chọn: • Người sử dụng chọn bằng việc click chuột vào lựa chọn cần thiết. Tính toán khoa học
  • 169. Vào-Ra dữ liệu • Cách sử dụng khác của menu CHOICE = menu(HEADER, ITEMLIST) trong đó ITEMLIST là mảng xâu. • Ví dụ: >> ItemList={'Input','Run','Output'}; >> HEADER='Select:'; >> CHOICE = MENU(HEADER, ItemList) CHOICE = 1 Tính toán khoa học
  • 170. Vào-Ra dữ liệu • LÖnh pause: Sö dông ®Ó chê tr¶ lêi cña ng-êi sö dông. pause(n) trong ®ã n cã thÓ lµ sè kh«ng nguyªn. PAUSE(n) sÏ dõng n seconds råi míi tiÕp tôc. • LÖnh pause kh«ng cã tham sè sÏ dõng cho ®Õn khi ng-êi sö dông gâ mét phÝm. • LÖnh pause off chØ thÞ r»ng tÊt c¶ c¸c lÖnh PAUSE or PAUSE(n) ®i sau nã sÏ kh«ng cã t¸c dông. • LÖnh pause on chØ thÞ r»ng c¸c lÖnh PAUSE sau nã sÏ cã t¸c dông ng¾t. Tính toán khoa học
  • 171. Đưa ra màn hình • Đưa ra màn hình nội dung mảng – Gõ tên biến không có ; cuối lệnh • Ví dụ: >> x = [1 2 3]; >> y=[2; 3; 4]; >> x*y ans = 20 Tính toán khoa học
  • 172. Đưa ra màn hình • Lệnh disp: – Dùng để hiển thị nội dung của biến ra màn hìnhvà không hiển thị tên biến – Làm việc dù có ; hay không – Lệnh có dạng disp(X) với X là biến hoặc biểu thức cần hiển thị. • Ví dụ: >> B = [1 2 3; 4 5 6; 7 8 9] >> disp(B^2); 30 36 42 66 81 96 102 126 150 >> disp(B.^2); 1 4 9 16 25 36 49 64 81 Tính toán khoa học
  • 173. Đưa ra màn hình • Ví dụ: Lập bảng tính giá trị hàm sin clc n = input('Give number of point n = '); x = linspace(0,1,n); y = sin(2*pi*x); disp(' ') disp('! k ! x(k) ! sin(x(k)) !') disp('---------------------------------') for k=1:n degrees = (k-1)*360/(n-1); disp(sprintf('! %2.0f ! %3.0f ! %6.3f !',k,degrees,y(k))); end disp( ' '); disp('x(k) is given in degrees.') disp(sprintf('One Degree = %5.3e Radians',pi/180)) Tính toán khoa học
  • 174. Đưa ra màn hình • Kết quả thực hiện có thể có dạng: Give number of point n = 10 ! k ! x(k) ! sin(x(k)) ! --------------------------------! 1 ! 0 ! 0.000 ! ! 2 ! 40 ! 0.643 ! ! 3 ! 80 ! 0.985 ! ! 4 ! 120 ! 0.866 ! ! 5 ! 160 ! 0.342 ! ! 6 ! 200 ! -0.342 ! ! 7 ! 240 ! -0.866 ! ! 8 ! 280 ! -0.985 ! ! 9 ! 320 ! -0.643 ! ! 10 ! 360 ! -0.000 ! x(k) is given in degrees. One Degree = 1.745e-002 Radians Tính toán khoa học
  • 175. Đưa ra màn hình • Lệnh fprintf • Lệnh có dạng fprintf(dialog_format, danh_sach_bien) trong đó dialog_format là biến (hằng) xâu ký tự thông báo và các ký tự định khuôn dạng dữ liệu ra. Tính toán khoa học
  • 176. Đưa ra màn hình • Ví dụ: >> A = rand(3,3) A = 0.1389 0.6038 0.0153 0.2028 0.2722 0.7468 0.1987 0.1988 0.4451 >> fprintf('Length of matrix A: %i%i',length(A)) Length of matrix A: 3 >> fprintf('Square of A:n %i%i%in%i%i%in%i%i%in',A^2) Square of A: 1.447541e-0012.317550e-0011.563636e-001 2.512430e-0013.449860e-0012.625931e-001 4.598234e-0015.387547e-0013.496177e-001 Tính toán khoa học
  • 177. Vào ra với file văn bản • Matlab cung cấp các lệnh cho phép làm việc với các file • Ở đây chỉ hạn chế trình bày các thao tác với file văn bản • Các lệnh chính liên quan đến làm việc với file văn bản của Matlab là: – fopen, fclose – frewind, fread, fwrite – fscanf, fprintf.. Tính toán khoa học
  • 178. Vào ra với file văn bản • Lệnh fopen. Dùng để mở file fileID = fopen(FILENAME, PERMISSION) – Lệnh này mở file văn bản có tên cho bởi FILENAME (hằng xâu ký tự hoặc biến xâu) – Chế độ làm việc được chỉ ra bởi PERMISSION. – PERMISSION có thể là: • ‘rt’ mở file để đọc • ‘wt’ mở file để ghi (nếu chưa có file sẽ tạo ra file mới có tên FILENAME) • ‘at’ mở file nối đuôi (tạo file mới có tên FILENAME nếu chưa có) • ‘rt+’ mở file để đọc và ghi (không tạo file mới) – Biến nhận dạng fileID nhận giá trị nguyên và ta sẽ sử dụng nó để thâm nhập vào file. Tính toán khoa học
  • 179. Vào ra với file văn bản • Trong trường hợp muốn kiểm tra lỗi mở file có thể sử dụng lệnh [FID, MESSAGE] = fopen(FILENAME,PERMISSION) nếu gặp lỗi mở file biến MESSAGE sẽ chứa thông báo lỗi. Tính toán khoa học
  • 180. Vào ra với file văn bản • Ví dụ: >> [fileID, MESSAGE] = fopen('ETU.txt','rt'); >> fileID fileID = -1 >> MESSAGE MESSAGE = No such file or directory Tính toán khoa học
  • 181. Vào ra với file văn bản • Lệnh đóng file fclose: Đóng file làm việc. ST = fclose(FID) – Lệnh này sẽ đóng file ứng với biến nhận dạng FID – fclose trả lại biến ST giá trị 0 nếu nó hoàn thành việc đóng file và -1 nếu gặp lỗi. – Lệnh ST=fclose(‘all’) đóng tất cả các file đang mở ngoại trừ 0, 1, 2. • Lệnh frewind. frewind(FID) đặt con trỏ file cua FID vào đầu file. Tính toán khoa học
  • 182. Vào ra với file văn bản • Lệnh fscanf: Đọc dữ liệu vào từ file [A, COUNT] = fscanf(FID, FORMAT, SIZE) ě Lệnh này đọc dữ liệu từ file tương ứng với FID ě Chuyển đổi dữ liệu về khuôn dạng được xác định bởi biến xâu FORMAT ě Gán giá trị cho mảng A ě COUNT là biến ra tùy chọn dùng để chứa số lượng phần tử đọc được. ě SIZE là biến tùy chọn chỉ giới hạn số phần tử được đọc vào từ file, nếu vắng mặt thì toàn bộ file được xét. Các giá trị có thể có của biến là: ě N : đọc không quá N phần tử từ file vào vector cột ě Inf : đọc không quá kết thúc file ě [M, N] : đọc không quá M*N phần tử và đưa vào ma trận kích thước không quá MxN theo từng cột, N có thể là inf nhưng M thì phải là hữu hạn. Tính toán khoa học
  • 183. Vào ra với file văn bản • Nếu ma trận A là kết quả của việc chuyển khuôn dạng ký tự và biến SIZE không có dạng [M, N] thì vector dòng sẽ được trả lại. • FORMAT là biến chứa các ký tự chuyển đổi khuôn dạng của ngôn ngữ C. • Các ký tự định khuôn dạng bao gồm: %, các ký hiệu thay thế, độ dài trường, các ký tự chuyển đổi khuôn dạng: d, i, o, u, x, e, f, g, s, c và […] (liệt kê tập hợp). • Nếu %s được sử dụng thì khi đọc một phần tử có thể dẫn đến phải sử dụng một loạt các thành phần của ma trận, mỗi thành phần giữ một ký tự. • Hãy sử dụng %c để đọc ký tự trắng (space) và khuôn dạng %s bỏ qua các ký tự trắng. Tính toán khoa học
  • 184. Vào ra với file văn bản • Nếu chỉ thị định dạng gồm cả số lẫn ký tự thì ma trận kết quả sẽ là ma trận số và mỗi ký tự sẽ được chuyển thành số bằng giá trị mã ASCII của nó. • fscanf khác với lệnh này trong C ở chỗ nó là lệnh vector hóa trả lại đối số là ma trận. • Biến xâu định dạng sẽ được sử dụng lặp lại cho đến khi gặp kết thúc file hoặc đọc đủ số lượng phần tử chỉ ra bởi SIZE. Tính toán khoa học
  • 185. Vào ra với file văn bản • Ví dụ: • Lệnh S = fscanf(fid,'%s') đọc (và trả lại) một xâu. • Lệnh A = fscanf(fid,'%5d') đọc các số nguyên có 5 chữ số thập phân. Tính toán khoa học
  • 186. Vào ra với file văn bản • Ví dụ: Giả sử có file văn bản với tên “kq” chứa xâu “Day la ket qua dua ra”. Khi đó ta có thể đọc dữ liệu vào như sau: >> fid=fopen('kq','rt') fid = 3 >> x = fscanf(fid,'%s') x = Daylaketquaduara >> frewind(fid) >> x = fscanf(fid,'%s%c') x = Day la ket qua dua ra Tính toán khoa học
  • 187. Vào ra với file văn bản • Ví dụ: Giả sử file văn bản Matrix.txt chứa hai dòng 1 2 3 4 5 6 7 8 9 10 • Hãy theo dõi kết quả làm việc của các lệnh sau để thấy tác động của lệnh fscanf >> fopen('matrix.txt','rt') ans = 4 >> A=fscanf(4,'%i',[2,5]) A = 1 3 5 7 9 2 4 6 8 10 Tính toán khoa học
  • 188. Vào ra với file văn bản >> frewind(4); >> B = fscanf(4,'%i',[5,2]) B = 1 6 2 7 3 8 4 9 5 10 >> frewind(4); >> C = fscanf(4,'%i',6) C = 1 2 3 4 5 6 Tính toán khoa học
  • 189. Vào ra với file văn bản • Lệnh fprint : ghi dữ liệu theo khuôn dạng ra file. COUNT = FPRINTF(FID,FORMAT,A,...) • Lệnh này sẽ định dạng các thành phần của ma trận A (và các biến tiếp theo trong danh sách) theo khuôn dạng được xác định bởi biến xâu format, và ghi ra file tương ứng với biến nhận dạng FID. • Biến: – COUNT đếm số byte dữ liệu được ghi ra. – FID là số nguyên nhận dạng tên file thu được từ lệnh fopen. Có thể dùng số 1 nếu sử dụng thiết bị ra chuẩn (màn hình). Nếu lệnh này không có FID thì mặc định đưa kết quả ra màn hình. – FORMAT là biến xâu chứa các ký tự mô tả định dạng dữ liệu giống như trong ngôn ngữ C – Các ký tự n, r, t, b, f có thể dùng để tạo linefeed, carriage return, tab, backspace, và formfeed character tương ứng. – Sử dụng để tạo dấu và %% để tạo ký tự %. Tính toán khoa học
  • 190. Vào ra với file văn bản • Ví dụ: x = 0:.1:1; y = [x; exp(x)]; fid = fopen('exp.txt','w'); fprintf(fid,'%6.2f %12.8fr',y); fclose(fid); Tạo ra file văn bản có tên ‘exp.txt’ chứa bảng giá trị của hàm mũ. 0.00 1.00000000 0.10 0.20 0.30 0.40 0.50 . . . 1.10517092 1.22140276 1.34985881 1.49182470 1.64872127 Tính toán khoa học
  • 191. MỘT SỐ VẤN ĐỀ KHÁC • Giải các bài toán phi tuyến trong Matlab – Ngoài các hàm cho phép thực hiện các phép tính đại số tuyến tính, Matlab còn cung cấp rất nhiều hàm cho phép giải quyết nhiều vấn đề tính toán khác như Tính tích phân số, Bài toán điều kiện đầu của phương trình vi phân, Tìm nghiệm, Tối ưu hóa… – Trong “Toolboxes” còn cung cấp hàng loạt hàm cho các mục đích sử dụng khác nhau như để xấp xỉ spline, xư lý tín hiệu số (signal processing), tối ưu hóa… • Có thể xem chi tiết về các lệnh sau đây nhờ sử dụng lệnh help. – quad, quad8 TÝnh tÝch ph©n sè; – ode23, ode45 ph-¬ng ph¸p thÝch nghi gi¶i bµi to¸n ®iÒu kiÖn ®Çu trong ph-¬ng trình vi ph©n th-êng; – fzero T×m nghiÖm cña ph-¬ng trình phi tuyÕn f(x) = 0 (mét biÕn); – fmin Cùc tiÓu ho¸ hµm mét biÕn; – fmins Cùc tiÓu ho¸ hµm nhiÒu biÕn; – spline t¹o c¸c spline néi suy bËc ba cho d÷ liÖu cho tr-íc. Tính toán khoa học
  • 192. MỘT SỐ VẤN ĐỀ KHÁC • Tính thời gian thực hiện – Có thể tính thời gin thực hiện chương trình trên Matlab sử dụng lệnh tic bắt đầu đồng hồ đếm thời gian và toc dừng đồng hồ đếm thời gian và hiển thị thời gian đếm được tính bằng giây. • Ví dụ >> A = rand(900,900); >> tic; B = inv(A); toc; elapsed_time = 4.4260 Tính toán khoa học
  • 193. MỘT SỐ VẤN ĐỀ KHÁC • Mét lÖnh t-¬ng tù còng cã thÓ sö dông ®Ó tÝnh thêi gian, ®ã lµ lÖnh cputime. LÖnh nµy tr¶ l¹i thêi gian tÝnh b»ng gi©y kÓ tõ lóc Matlab ®-îc kÝch ho¹t vµo sö dông. • VÝ dô: >> B=rand(900,900); >> t = cputime; C=inv(B); fprintf('Thoi gian tinh: %d seconds',cputime-t) Thoi gian tinh: 4.497000e+000 seconds Tính toán khoa học
  • 194. MỘT SỐ VẤN ĐỀ KHÁC • Hiệu quả của chương trình viết trên Matlab – Các hàm người sử dụng tạo ra trong Matlab chỉ được thông dịch chứ không biên dịch. Tức là khi m – file được thực hiện, mỗi lệnh trong nó sẽ được đọc vào và được thực hiện chứ không phải là một chương trình được dịch ra ngôn ngữ máy. Chính vì điều đó các chương trình Matlab sẽ chạy chậm hơn nhiều so với các chương trình viết trên các ngôn ngữ lập trình cấp cao khác, chẳng hạn C hay Fortran. – Để tận dụng được Matlab tốt hơn, hãy cố gắng sử dụng các hàm nội trú cũng như các phép toán của Matlab mỗi khi có thể (bởi vì, lúc đó đoạn mã biên dịch được thực hiện thay cho thông dịch). Tính toán khoa học
  • 195. MỘT SỐ VẤN ĐỀ KHÁC • Ví dụ hai dãy lệnh sau đây cho cùng một kết quả >> tic; >> t = (0:.0000001:1)'; >> y=sin(t); >> toc elapsed_time = 0.0400 vµ >> tic >> t = (0:.0000001:1)'; >> for i=1:length(t) y(i) = sin(t(i)); end >> toc elapsed_time = 0.8010 • Tuy nhiên đoạn lệnh dưới đòi hỏi thời gian nhiều gấp bội đoạn lệnh trên. Tính toán khoa học