195
Tính toán khoa học Chương 1 NHẬP MÔN MATLAB

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

Embed Size (px)

Citation preview

Tính toán khoa học

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

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), 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 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, 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¬ 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 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 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

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

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Ó (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µ ).

• 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)

>> 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 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 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 mn 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) 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 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 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 th­a

• Đ©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 th­a, 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 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 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 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Ï 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

Đå 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)

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 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

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ẽ đườ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è

• 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

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

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')

Tính toán khoa học

Vẽ mặt

Đ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

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]

Các phép tính với đa thức

Tính toán khoa học

Ví dụ 3:

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

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ữ

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

>> 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.