tính toán khoa học - chương 1: nhập môn matlab
TRANSCRIPT
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
Màn hình làm việc của Matlab
Cửa sổ lệnh
Command Window
Các lệnh quá khứ
Command history
Truy cập
chức năng
Thư mục hiện thời
Current Directory
Tính toán khoa học
Cửa sổ lệnh Command Window
Vùng nhớ làm việc
Workspace
Các lệnh quá khứ
Command History
Màn hình làm việc của Matlab (tiếp)
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)
Tự động gán
màu chữ và
dóng hàng
Dãy các
file được
mở để
soạn thảo
Các chức
năng
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 Mô tả
ans Biến ngầm định chứa kết quả
beep Phát tiếng kêu
pi Hằng số pi
eps Số 0 của Matlab
inf infinity
NaN not a number
i (hoÆc) j Đơn vị phức
realmin, realmax Số thực dương nhỏ nhất và lớn nhất
bitmax Số nguyên lớn nhất
nargin, nargout Số lượng biến vào/ra của lệnh gọi hàm
varargin Số lượng biến trong lệnh gọi hàm
varaout 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 ý nghÜa
abs (x)
acos (x)
asin (x)
atan (x)
conj (x)
cos (x)
exp (x)
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 ý nghÜa
imag (x)
log (x)
log10 (x)
real (x)
sign (x)
sin (x)
sqrt (x)
tan (x)
phần ảo của số phức
Logarithm cơ số e
Logarithm cơ số 10
phần thực của x
Hàm dấu, trả lại dấu của đối số
hàm sin.
Căn bậc hai
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), nhng 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 số dấu phảy động có 4 chữ số sau dấu.
– FORMAT LONG số dấu phảy động có 14 chữ số.
– FORMAT SHORTE số dấu phảy động có 4 chữ số với số mũ.
– FORMAT LONGE số dấu phảy động có 15 chữ số với số mũ
– FORMAT RAT 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 long, pi
ans =
3.14159265358979
>> format long e, pi
ans =
3.141592653589793e+000
>> format short e, pi
ans =
3.1416e+000
>> format rat, pi
ans =
355/113
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, nhng 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 nhng 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 trng 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¬ 12 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 semi-colon.
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 2.0000 + 1.0000i
3.0000 + 1.5000i 4.0000 + 2.0000i
>> B'
ans =
1.0000 - 0.5000i 3.0000 - 1.5000i
2.0000 - 1.0000i 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
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:
• Dễ dàng kiểm tra được rằng
>> F=[1 1;1 0]; f=[0;1]; F^10*f
Tính toán khoa học
1 1 0,
1 0 1F f
1
nn
n
fF f
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 11 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 = A\b
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 A\b lµ t¬ng ®¬ng víi viÖc nh©n tr¸i b víi ma trËn A-
1 (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 nhng 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 mn gåm toµn sè 0;
• ones(m,n) t¹o ma trËn mn gåm toµn sè 1;
• eye(n) t¹o ma trËn ®¬n vÞ nn;
• diag(v) (gi¶ thiÕt v lµ vect¬ n chiÒu) t¹o ma
trËn ®êng chÐo kÝch thíc nn 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
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
Phép toán lôgic Ý nghĩa
& 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
• 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
elseif và else là tuỳ chọ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
Ví dụ: Tìm q nguyên dương nhỏ nhất để
1/2q = 0.
x=1; q=0;
while x>0
x=x/2;
q=q+1;
end;
q
02/1 q
q = 1075
Tràn số nhỏ
underflow
Hiện tượng tràn số nhỏ
Tính toán khoa học
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
inf2 r
r = 1024
overflow
Hiện tượng tràn số lớn
Tính toán khoa học
Cẩn thận với tràn số
• Ví dụ (Kahan) h = 1./2.;
x = 2./3. - h;
y = 3./5. - h;
e = (x+x+x) - h;
f = (y+y+y+y+y)-h;
z = 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
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Ó (lu ý
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 lu ý 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);
• Lu ý 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µ ).
• 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á.
x
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
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 9];
>> eig(A)
ans =
15.9743
-0.4871 + 0.5711i
-0.4871 - 0.5711i
>> [V,D] = eig(A)
V =
-0.2155 0.0683 + 0.7215i 0.0683 - 0.7215i
-0.5277 -0.3613 - 0.0027i -0.3613 + 0.0027i
-0.8216 0.2851 - 0.5129i 0.2851 + 0.5129i
D =
15.9743 0 0
0 -0.4871 + 0.5711i 0
0 0 -0.4871 - 0.5711i
>> A*V-V*D
ans = 1.0e-14 *
-0.0888 0.0777 - 0.1998i 0.0777 + 0.1998i
0 -0.0583 + 0.0666i -0.0583 - 0.0666i
0 -0.0555 + 0.2387i -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]= eig(A)
V =
1.0000 0.7071 0.6163
0 0.7071 0.7044
0 0 0.3522
D =
1 0 0
0 3 0
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 tha
(Sparse matrix computations)
• Matlab cã kh¶ năng cÊt giữ vµ lµm viÖc víi c¸c ma trËn tha. Đ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 tha 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 tha 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 tha, vì thÕ hÖ tha 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 tha nhng kh«ng ¸p dông cho ma trËn dµy
Tính toán khoa học
T¹o ma trËn tha
• 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 tha. 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 tha
>> 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 tha
• Matlab cung cÊp mét sè c¸ch nhËp ma trËn
tha tiÖn lîi h¬n. LÖnh
S = sparse(m,n)
t¹o mn ma trËn toµn sè 0 dới d¹ng tha. 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 tha
• 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) 4
(1,2) 1
(3,2) -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 tha
• 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 tha
>> Mét trong những d¹ng ma trËn tha 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 64 -16 0 -16 0 0 0 0;
0 -16 64 0 0 -16 0 0 0;
-16 0 0 64 -16 0 -16 0 0;
0 -16 0 -16 64 -16 0 -16 0;
0 0 -16 0 -16 64 0 0 -16;
0 0 0 -16 0 0 64 -16 0;
0 0 0 0 -16 0 -16 64 -16;
0 0 0 0 0 -16 0 -16 64]
Tính toán khoa học
T¹o ma trËn tha
• Đ©y lµ ma trËn kÝch thíc 99 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 tha, tríc hÕt cÇn t¹o ma trËn kÝch thíc 95 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 tha
• ĐÓ 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 64 0 0
-16 -16 64 -16 0
-16 0 64 -16 0
-16 -16 64 0 -16
-16 -16 64 -16 -16
-16 0 64 -16 -16
0 -16 64 0 -16
0 -16 64 -16 -16
0 0 64 -16 -16];
Tính toán khoa học
T¹o ma trËn tha
• Trong ví dụ trên: CÇn lu ý ®Õ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 tha
• Cã lÏ ma trËn tha 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Þ tha, 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 tha cña ma trËn. VÝ dô, cÊu tróc tha 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
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Ï Ký tù hiÓn thÞ NÐt vÏ
y yellow
m magenta
c cyan
r red
g green
b blue
w white
k black
. dÊu chÊm (point)
o vßng trßn (circle)
x dÊu x (x-mark)
+ dÊu céng (plus)
* dÊu sao (star)
s h×nh vu«ng (square)
d kim c¬ng (diamond)
v 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
p «ng sao 5 c¸nh
(pentagram)
h «ng sao 6 c¸nh (hexagram)
- solid
: dotted
-. dashdot
-- dashed
Tính toán khoa học
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
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ù nh
plot 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 trong toạ độ cực
• VÝ dô. ĐÓ vÏ ®êng trong to¹ ®é cùc =2, víi
05 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ẽ 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
• 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
• 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è
• trªn líi vu«ng [-1, 1] [-1, 1].
2 2( , )
xyf x y
x y
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
• VÝ dô. VÏ
z = sin(r)/r
• víi
2 2 , 8 8; 8 8.r x y x y
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
• Đ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è
• 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);
( , ) ( sin cos , sin sin , cos );
0 ; 0 2
r
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')
Đa thức trong Matlab
• Đa thức bậc n
P= anxn +an-1x
n-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
• Ví dụ 1:
>> r=[1 3];
>> p=poly(r)
p = 1 – 4 3
>>polyval(p,[1 3 5])
ans =
0 0 8
>> printsys(r,p,’x’)
num/den =
x + 3
-------------
x^2 - 4 x + 3
Tính toán khoa học
• Ví dụ 2:
4 4
2 2
2
3 14 ( 16 3 2)
4 4
1 24
2 2
x x x x
x x
xx x
k(x)=x2 +4
r=[1 2]
p=[-2 2]
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
2 12 4x x
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 Toolboxes\Symbolic Math
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
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] : \n\n')
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%i\n%i%i%i\n%i%i%i\n',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.8f\r',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 1.10517092
0.20 1.22140276
0.30 1.34985881
0.40 1.49182470
0.50 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.