Phần 1
Câu1
Đáp án câu hỏi thi
Giống nh các ngôn ngữ lập trình khác, Matlab có những quy định
riêng về tên biến. Trơc tiên tên biến phải là một từ, không chứa dấu cách và
tên biến phải tuân thủ các quy tắc sau.
- Tên biến có phân biệt chữ hoa và chữ thờng.
- Tên biến có thể chứa nhiều nhất 31 ký tự, còn các ký tự sau ký tự
thứ 31 bị bỏ đi.
- Tên biến bắt đầu phải là chữ cái, tiếp theo có thể là chữ số hoặc số
gạch dới.
- Kí tự chấm câu không đợc phép dùng vì nó có những ý nghĩa đặc
biệt.
Matlab có các biến đặc biệt sau.
Các biến đặc biệt
ans
pi
inf
nan hoặc nan
i (và) j
realmin
realmax
Giá trị
Tên biến mặc định dùng để trả về kết quả
=3.1415
Để chỉ số vô cùng cũng nh kết quả của 1/0
Dùng để chỉ số không xác đinh nh 0/0
i=j= 1
Số nhỏ nhất có thể đợc của số thực
Số lớn nhất có thể đợc của số thực
Khi gán một biến a cho một giá trị m náo đấy ta viết nh sau
a=m
a=
m
Các biến trong không gian Matlab có thể xoá đi không điều kiện bằng
lệnh clear. Ví dụ:
>> Clear a
Chỉ xoá một biến a
>> Clear a b
Xoá cả hai biến a,b
>> Clear c*
Dấu * để chỉ rằng xoá tất cả các biến bắt đầu bằng ký tự c
>> Clear
Xoá tất cả các biến trong không gian làm việc. Bạn sẽ khộng đợc hỏi
để xác nhận câu lệnh này và tất cả các biến đã bị xoá không thể khôi phục
lại.
Câu 2
M-file đợc sử dụng dới 2 dạng Script M-file và hàm
(*) Script M-file
Trong Matlab, yêu cầu của chúng ta đợc thực hiện tại dấu nhắc của
Matlab trong cửa sổ lệnh là nhanh và hiệu quả. Tuy nhiên vì số lệnh tăng lên,
hoặc khi bạn muốn thay đổi giá trị của một hoặc nhiều biến và thực hiện lại
một số lệnh với giá trị mới, nếu cứ đánh lặp lại tại dấu nhắc của Matlab thì sẽ
trở lên buồn tẻ, do vậy Matlab cung cấp một giải pháp cho vấn đề này là: nó
cho phép bạn thay thế các lệnh của Matlab bằng một file văn bản đơn giản và
lúc này ta chi việc gõ tên file ở dấu nhắc và Matlab sẽ thực hiện chính xác
các lệnh đợc sử dụng trong file này, những file này gọi là script file, hoặc
đơn giản là M_file. Danh từ script để chỉ rằng thực tế Matlab đọc từ file
kịch bản tìm thấy trong file. Danh từ M_ file để chỉ rằng tên script file đó
phải kết thúc bằng phần mở rộng là .m nh ví dụ example1.m.
Để tạo một scrip M_file, chọn New trong bảng chọn file và chọn
M_file. Thủ tục này sẽ tạo ra màn hình soạn thảo, và ta có thể đánh đợc các
lệnh của Matlab vào trong đó.
Ví dụ sau cho ta biết đợc diện tích hình chữ nhật
function example1
dai=4;
rong=5;
dientich = dai*rong
Ta có thể ghi và lu trữ file này bằng cách chọn Save từ bảng chọn file.
Khi ghi tên file phải chú ý đánh tên file trùng với tên hàm (example1) không
cần đánh vào phần mở rộng, Matlab tự gán cho nó. Khi đó từ dấu nhắc ta có
thể đánh:
>> example1
dientich =
20
Dới đây là một số lệnh hệ thống tơng tác với *.mfile thờng gặp.
Tên lệnh
disp(ans)
echo on
Chức năng
Hiển thị các kết quả mà không hiện tên biến.
Lệnh cho phép xem các lệnh có trong *.mfile khi chúng
đợc thực hiện.
echo off
Lệnh không cho phép xem các lệnh có trong *.m file khi
chúng đợc thực hiện.
type
Lệnh cho xem nội dung file, ngầm định file ở dạng Mfile.
what
Lệnh này cho biết tất cả các files M-files và MAT-file có
trong vùng làm việc hiện hành hay không.
input
Sử dụng dấu nhắc để đa dữ liệu vào.
pause
Dừng lại cho đến khi ngời dùng nhấn một phím bất ký.
pause(n)
Dừng lại n giây.
waitforbuttonpress Dừng lại cho đến khi ngời dùng nhấn chuột hoặc phím.
(*) Hàm và tạo hàm trong Matlab
Các hàm do ngời sử dụng viết cũng đợc lu trong M-file. Chúng đợc sử
dụng giống nh các hàm của Matlab. Các file hàm đợc viết theo một quy tắc
chặt chẽ.
*Các quy tắc viết hàm M-file.
FUNCTION
1.
Hàm phải đợc bắt đầu từ function, sau đó lần lợt là tham số
đầu ra, dấu bằng, tên hàm. Tham số đầu vào viết trong tên
hàm và đợc bao trong ngoặc đơn. Dòng này định nghĩa tham
số đầu vào và tham số đầu ra; phân biệt sự khác nhau giữa
file hàm và các file script.
Một số dòng đầu tiên nên viết chú thích cho hàm. Khi sử
dụng lệnh help với tên hàm, chú thích của hàm sẽ đợc hiển
thị.
Các thông tin trả lại của hàm đợc lu vào tham số (ma trận)
đầu ra. Vì vậy luôn kiểm tra chắc chắn rằng trong hàm có
chứa cấu lệnh ấn định giá trị của tham số đầu ra.
Các biến (ma trận) cùng tên có thể đợc sử dụng bởi cả hàm
và chơng trình cần đến nó. Không có sự lộn xộn nào xảy ra vì
các hàm và các chơng trình đều đợc thực hiện một cách tách
biệt. Các giá trị tính toán trong hàm, tham số đầu ra không
chịu tác động của chơng trình.
Nếu một hàm cho nhiều hơn một giá trị đầu ra phải viết tất cả
các giá trị trả lại của hàm thành một vector trong dòng khai
báo hàm.
Một hàm có nhiều tham số đầu vào cần thiết phải liệt kê
chúng khi khai báo hàm.
Các biến đặc biệt nargin và nargout xác định tham số đầu vào
và tham số đầu ra đợc sử dụng trong hàm. Các tham số này
chỉ là biến cục bộ.
2.
3.
4.
5.
6.
7.
Câu 3
(*) Tạo mảng theo cách thông thờng
Trong Matlab để tạo ra mảng đơn 1,2,4,5,6,7 ta chỉ việc gõ dòng lệnh
sau vào dấu nhắc của Matlab
>>x=[1,2,4,5,6,7]
x=
1 2 4 5 6 7
(*) Tạo mảng dựa trên quy luật của mảng
Ví dụ để tạo mảng x ở ví dụ trớc ta tạo một mảng bắt đầu là phần tử 1,
sau bằng phần tử truớc cộng một, phần tử cuối là 7
>> x=(1:1:7)
x=
1 2 3 4 5 6 7
Cách thứ nhất giúp ta tạo mảng mà chỉ cần vào khoảng cách giá trị
giữa các phần tử mà không cần biết số phần tử
(*) Tạo mảng gồm các phần tử của x bằng hàm linspace. Cú pháp của hàm
này nh sau:
linspace (giá trị phần tử đầu, giá trị phần tử cuối, số các phần tử)
Cách thứ hai ta chỉ cần vào số phần tử của mảng (không cần biết
khoảng cách giá trị giữa các phần tử)
Ví dụ:
>>x=linspace (1,7,7)
x=
1
2
3
4
5
6
7
(*)Các mảng trên là các mảng mà các phần tử của nó đợc tạo lên theo một
quy luật nhất định. Nhng đôi khi mảng đợc yêu cầu mà không thể tạo các
phần tử bằng phơng pháp trên, không có một chuẩn nào để tạo các mảng này.
Trờng hợp đó ta có thể tạo mảng bằng cách vào nhiều phần tử cùng một lúc.
Ví dụ:
>> a=1:1:5,b=1:2:9
a=
1
2
3
4
5
1 3 5
>> c=[a,b]
c=
7
9
b=
1 2 3 4 5 1 3 5 7 9
ở ví dụ này ta đã tạo hai mảng thành phần là a,b sau đó tạo mảng c
bằng cách ghép hai mảng a và b.
Ta cũng có thể tạo mảng nh sau:
>> d=[a(1:2:5) 1 0 1]
d=
1 3 5 1 0 1
a là mảng gồm các phần tử [1 3 5], mảng d là mảng gồm các phần tử
của a và ghép thêm các phần tử [1 0 1]
(*)Ngoài các mảng trên, Matlap còn cung cấp mảng không gian theo
logảithm bằng hàm losgpace. Cú pháp của hàm logspace nh sau :
Logspace(số mũ đầu, số mũ cuối, số phần tử)
Ví dụ
>>logspace(1,4,2)
ans =
10
Câu 4
10000
Có tất cả 5 cách
(*) Để truy nhập đến các phần tử của mảng ta dùng chỉ số thứ tự của
phần tử đó trong mảng
Ví dụ cho mảng x=1,2,3,4,5,6,7 hay cho biết giá trị của phần tử thứ 2
trong mảng ta có các câu lệnh sau
>> x=[1,2,3,4,5,6,7]
x=
1
2
3
4
5
6
7
>> x(2)
ans =
2
(*) Để truy nhập nhiều phần tử của mảng
Ví dụ để truy nhập từ phần tử thứ 1 đến phần tử thứ 4 của mảng
>> x(1:4)
ans =
1
2
3
4
(*)Để truy nhập từ phần tử thứ 3 đến phần tử cuối của mảng x
>> x(3:end)
ans =
3 4 5 6 7
(*) Để truy nhập từ phần tử thứ ba đến phần tử thứ nhất của mảng x
>>x(3:-1:1)
ans =
3 2 1
(*) Để truy nhập từ phần tử thứ 2 đến phần tử thứ 7 của mảng x biết vị
trí của phần tử sau bằng vị trí của phần tử trớc cộng 2
>>x(2:2:7)
ans =
Câu 5
2
4
6
Đối với mảng là vector cột, tức là mảng có một cột và nhiều hàng,
trong trờng hợp này một thao tác tính toán đối với mảng nh ở trên là không
thay đổi. Nhng khác với trớc là ta dùng dấu cách hay dấu phẩy để phân cách
giữa hai cột còn trong tròng hợp này ta dùng dấu chấm phẩy để phân cách
giữa hai hàng.
Ví dụ để tạo vector x :
>>x=[1;3;5;7]
x=
1
3
5
7
Một cách khác để tạo các vector
cột là dùng các hàm linspace,
logspace, hay từ các vector hàng, sau đó dùng phơng pháp chuyển vị, Matlap
dùng toán tử chuyển vi là () để chuyển từ vector hàng thành vector cột và
ngợc lại.
Ví dụ tạo vector x gồm 7 hàng 1 cột từ 1 đến 7:
>>x=[1:1:7]
x=
1
2
3
4
5
6
7
Ngoài ra Matlab còn sử dụng toán tử chuyển dấu chấm đằng trớc (.)
(toán tử chuyển vị chấm). Toán tử này chỉ khác với toán tử chuyển vị () khi
các phần tử của mảng là số phức, tức là từ một vector nguồn với các phần tử
là số phức, toán tử () tạo ra số phức liên hợp chuyển vị, còn toán tử (.) chỉ
tạo ra vector chuyển vị.
Ví dụ sau đây sẽ làm rõ điều trên:
>> a=[1:1:7]; % tao vector a gồm 1 hàng 7 cột
>>d=a+i*a %tạo vector số phức d từ vector a
d=
Columns 1 through 4
1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i
Columns 5 through 7
5.0000 + 5.0000i 6.0000 + 6.0000i 7.0000 + 7.0000i
>> e=d. % Tạo vector từ vector d bằng toán tử chuyển vị chấm (.)
e=
1.0000 + 1.0000i
2.0000 + 2.0000i
3.0000 + 3.0000i
4.0000 + 4.0000i
5.0000 + 5.0000i
6.0000 + 6.0000i
7.0000 + 7.0000i
>>f=d% Tạo vector từ vector d bằng toán tử chuyển vị chấm ()
f=
1.0000 - 1.0000i
2.0000 - 2.0000i
3.0000 - 3.0000i
4.0000 - 4.0000i
5.0000 - 5.0000i
6.0000 - 6.0000i
7.0000 - 7.0000i
Câu 6:
(*) Phép toán giữa mảng với số đơn.
Các phép toán đơn giản giữa mảng với số đơn là phép cộng, phép trừ,
phép nhân và phép chia cua mảng cho số đó bằng cách thực hiện phép toán
đối với từng phần tử của mảng.
(*) Phép toán gia mảng với mảng
Đối với hai mảng có cùng kích cỡ ta có các phép toán sau: phép cộng, trừ,
nhân, chia tơng ứng giữa các phần tử của hai mảng.
Ví dụ:
>>g=[1 2 3 4; 5 6 7 8; 9 10 11 12]
g=
1 2 3 4
5 6 7 8
9 10 11 12
>>h=[1 1 1 1; 2 2 2 2;3 3 3 3]
h=
1 1 1 1
2 2 2 2
3 3 3 3
>>h+g
ans =
2 3 4 5
7 8 9 10
12 13 14 15
>> ans h % Lấy kết quả trớc trừ đi mảng h ta đợc lại mảng g
ans =
1 2 3 4
5 6 7 8
9 10 11 12
Chú ý
Trong phép nhân phép nhân ta dùng toán tử chấm nhân (.*), còn trong
phép chia ta dùng toán tử chấm chia (./) hoặc (.\) để chia tơng ứng các phần
tử mà không dùng phép nhân (*) hoặc phép chia (/) hoặc (\) vì đối hai phép
này Matlab yêu cầu ma trận phải có số hàng và số cột tơng ứng.
Ví dụ
>> g.*h
ans =
1 2 3 4
10 12 14 16
27 30 33 36
>>g*h
??? Error using ==> *
Inner matrix dimensions must agree.
(*) Mảng với luỹ thừa
Matlap dùng toán tử (.^) để định nghĩa luỹ thừa của mảng.
Ví dụ
>>g.^2 % Các phần tử của g đợc luỹ thừa với số 2
ans =
1 4 9 16
25 36 49 64
81 100 121 144
>> 2.^g %Các phần tử của g là số mũ của 2
ans =
2
4
8
16
32
64
128
256
512
1024
2048
4096
>> g.^ (h-1) % Các phần tử của g đợc luỹ thừa với số mũ tuơng ứng là
các phần tử của h trừ đi 1
ans =
Câu 7
1 1 1 1
5 6 7 8
81 100 121 144
Có hai cách tất cả
Ví dụ sau đây là ma trận g có hai hàng và bốn cột
>>g=[1 2 3 4; 5 6 7 8]
g=
1 2 3 4
5 6 7 8
Trong ví dụ này ta dùng dấu cách để vào các phần tử trong hàng và dấu chấm
phẩy để tạo hai hàng, ngoài ra ta cũng có thể tạo ma trận nh sau:
>> g=[1 2 3 4
5678
9 10 11 12]
g=
1 2 3 4
5 6 7 8
9 10 11 12
Chú ý: Khi nhập vào ma trận thì giữa các hàng số phần tử phải bằng nhau
nếu không chơng trình sẽ bị báo lỗi.
(*) Thao tác với mảng
Ta có các bảng sau
Địa chỉ của mảng
A(r,c) Địa chỉ một mảng con trong mảng A, trong đó r là hàng, c là cột.
A(r,:) Địa chỉ một mảng con trong mảng A, trong đó r là hàng và tất cả các
cột của A.
A(:,c) Địa chỉ một mảng con trong mảng A, trong đó c là cột và tất cả các
hàng của A.
A(:) Địa chỉ tất cả các phần tử của A nh một vector cột, bằng cách ghép thứ
tự các cột của vector A.
A(i) Địa chỉ một mảng con trong mảng A, định nghĩa bằng các chỉ số vector
đơn đợc thiết kế trong i, với giả sử A là vector cột
A(x) Địa chỉ một mảng con trong A, định nghĩa bởi mảng logic x, x phải
cùng kích cỡ với A.
Tìm kiếm mảng
i=find(x) Trả lại các chỉ số của mảng nơi mà các phần tử của nó khác không
[r,c]=find(x) Trả lại chỉ số hàng và chỉ số cột của mảng x nơi mà các phân tử
của nó khác không
So sánh mảng
isequal(A,B)
Đúng nếu A và B giống nhau
ismember(A,B) Đúng khi phần tử của A cũng là phần tử của B
intersect(A,B) Các phần tử chung giữa A và B
setdiff(A,B)
Các phần tử có trong A mà không có trong B
setxor(A,B)
Các phần tử không thuộc phần chung giữa A và B
union(A,B)
Tất cả các phần tử có trong A và B
whos
S=size(A)
[r,c]=size(A)
r=size(A,1)
c=size(A,2)
n=length(A)
Kích cỡ của mảng
Hiển thị các biến, hàm tôn tại trong không gian làm việc và
kích cỡ của chúng.
Trả lại vector hàng s, mà phần tử thứ nhất là số hàng của A,
phần tử thứ hai là số cột của A.
Trả lại hai số vô hớng r,c chứa số hàng và số cột của A.
Trả lại số hàng của A trong biến r.
Trả lại số cột của A trong biến c.
Trả lại max(size(A)) trong biến n khi A không rỗng.
Câu 8
Vòng lặp For
Vòng lặp for cho phép một nhóm câu lệnh thực hiện lặp lại một số lần
cố định. Cú pháp của vòng lệnh for nh sau.
for x=array
Command %Khối các lệnh
end
Các câu lệnh giữa hai trạng thái for và end đợc thực hiện một lần cho
tất cả các cột của mảng (array). Tại mỗi lần lặp lại, x đợc gán cho phần tử cột
tiếp theo nh trong suốt n lần của vòng lặp, x=array(:,n)
>> for n=1:10
x(n)=5*n;
end
>> x
x=
5
10
15
20
25
30 35 40
45
50
Nói cách khác, trạng thái thứ nhất yêu cầu: Cho n bằng từ 1 đến 10,
tính giá trị của tất cả các trạng thái cho đến trạng thái kế tiếp trạng thái end.
Đầu tiên trong vòng lặp for n=1, tiếp theo n=2, và cứ nh vậy cho đến trờng
hợp n=10. Sau trờng hợp n=10, vòng lặp for kết thúc và tất cả các lệnh sau
trạng end của vòng lặp đợc thực hiện.
Vòng lặp for không thể kết thúc bằng cách gán lại biến điều khiển n
trong vòng lặp
Trạng thái 1:10 là một trạng thái tạo lên mảng Matlab tiêu chuẩn. Bất
cứ kiểu mảng nào của Matlab đều đợc chấp nhận trong vòng lặp for
>>data =[1 2 3 ; 4 5 6]
data =
1 2 3
4 5 6
>>for n=data
x=n*2
end
x=
2
8
x=
4
10
x=
6
12
Hai vòng lặp for có thể lồng vào nhau:
>> for i=1:5
a(i)=0;
for m=1:6
a(i)=a(i)+2*m;
end;
end;
<< a
a=
42 42 42 42 42
Không nên dùng lặp for khi mà tơng đơng với việc ta dùng mảng để
tính toán, vì việc dùng mảng nhanh hơn và thao tác cũng ít hơn.
Vòng lặp while
Vòng lặp while thực hiện lặp lại một nhóm lệnh một số lần cố định,
nhng không biết trớc đợc số lần lặp lại. Cú pháp của lệnh while nh sau.
while biểu thức điều kiện
Khối các lệnh
end
khối các lệnh giữa hai trạng thái while và end đợc thực hiện lặp đi lặp lại
khi tất cả các biểu thức điều kiện là đúng. Thông thờng giá trị của điều
kiện đa ra kết quả là một số, nhng nếu kết qủa là mảng thì vẫn hợp lệ. Trong
trờng hợp mảng, tất cả các phần tử trong mảng kết quả đa ra phải là True
(đúng).
Câu 9
Cấu trúc if-else-end.
Nhiều khi ta cần các câu lệnh đợc thực hiện theo một điều kiện nào
đó. Trong ngôn ngữ lập trình, logic này đợc cung cấp bởi cấu trúc if-elseend. Cú pháp của cấu trúc này nh sau:
if biểu thức điều kiện
khối các lệnh đợc thực hiện nếu điều kiện là đúng
else
khối các lệnh đợc thực hiện nếu điều kiện là sai.
end.
Khi có ba hoặc nhiều điều kiện thay đổi, cấu trúc của nó sẽ là
if biểu thức điều kiện 1
khối các lệnh đợc thực hiện nếu điều kiện 1 là đúng.
elseif biểu thức điều kiện 2
khối các lệnh đợc thực hiện nếu điều kiện 2 là đúng.
elseif biểu thức điều kiện 3
khối các lệnh đợc thực hiện nếu điều kiện 3 là đúng.
else
khối các lệnh đợc thực hiện nếu không có điều kiện nào là
đúng.
end
Trong mẫu dạng này thì biểu thức điều kiện đầu tiên đúng thì các câu
lệnh sau không đợc kiểm tra nữa, các cấu trúc if-else-end còn lại đợc bỏ qua.
Hơn nữa câu lệnh else ở cuối có thể không cần cho vào.
4.6 Cấu trúc switch-case
Khi một chuỗi các lệnh đợc thực hiện dựa trên một biểu thức thử (hoặc
biểu thức điều kiện) với nhiều giá trị thử khác nhau, ngời ta thờng dùng cấu
trúc switch-case. Cấu trúc switch-case có dạnh nh sau:
switch biểu thức điều kiện.
case giá trị thử 1
khối lệnh 1
case { giá trị thử 2, giá trị thử 3, giá trị thử 4}
khối lệnh 2
otherwise
khối lệnh 3
end
Tại đây biểu thức điều kiện phải là dạng số hoặc dạng chuỗi, nếu biểu
thức điều kiện là dạng số thì lệnh case sẽ thử xem giá trị của biểu thức có
bằng giá trị thử i không. Nếu biểu thức điều kiện là một chuỗi thì lệnh case
sẽ so sánh chuỗi đó với giá trị thử i. Trong trờng hợp trên, biểu thức điều kiện
đợc đem so sánh với giá trị thử 1, nếu chúng bằng nhau thì khối lệnh đầu tiên
đợc thực hiện, mà các khối lệnh tiếp theo cho đến trớc trạng thái end đợc bỏ
qua. Nếu chúng không bằng nhau thì điều kiện tiếp tục đợc so sánh với giá
trị thử 2, giá trị thử 3, giá trị thử 4 , nếu một trong các giá trị này bằng biểu
thức điều kiện thì khối lệnh 2 đợc thực hiện.
Chú ý rằng là trong switch-case phải có ít nhất một nhóm lệnh phải đợc thực hiện.
Câu 10
Tuơng tự câu 8
Câu 11
Xâu kí tự trong Matlab là mảng của các giá trị ASCII mà quy ớc của
nó là các kí tự.
Ví dụ:
>> t= Matlap la mot mon hoc
t=
Matlab la mot mon hoc
Một xâu kí tự, đơn giản là dạng văn bản, đợc đặt giữa hai dấu nháy
đơn. Mỗi kí tự trong xâu là một phần tử của mảng, với mỗi phần tử chiếm 2
bytes.
Các hàm chuyển đổi xâu
Chuyển xâu s từ hệ b sang hệ 10.
Từ xâu nhị phân sang hệ mời.
Tạo một chuỗi kí tự.
Chuyển số x từ hệ mời sang dang xâu ở hệ b.
Chuyển số x từ hệ mời sang xâu nhị phân.
Chuyển số x từ hệ mời sang xâu của các số hệ muời sáu.
Chuyển từ xâu sang mã ASCII .
Chuyển từ xâu gồm các số hệ 16 sang các hệ số mời.
Chuyển từ số nguyên sang xâu.
Chuyển từ xâu sang số.
Chuyển từ số sang xâu.
Các hàm về xâu
findstr(s1,s2)
Tìm kiếm một xâu trong một xâu khác.
isspace(s)
True tại những vị trí là kí tự trống.
lower(s)
Xâu của những chữ cái thờng.
strcat(s1,s2,..)
Nối các xâu thành hàng.
strcmp(s1,s2)
True nếu các xâu giống nhau.
strmatch(s1,s2) Tìm kiếm khả năng giống nhau của xâu.
strncmp(s1,s2,n) True nếu n kí tự đầu giống nhau.
strrep(s1,s2)
Thay thế một xâu bằng một xâu khác.
strvcat(s1,s2,) Nối các xâu thành cột.
size(s)
Cho kích cỡ của xâu
base2dec(s,b)
bin2dec(s)
char(s)
dec2base(x,b)
dec2bin(x)
dec2hex(x)
double(s)
hex2dec(s)
int2str(x)
str2num(s)
num2str(x)
upper(s)
Chuyển thành chữ in.
Câu 12 Ma trận tế bào là một kiểu dữ liệu cho phép bạn gọi tên và
thao tác với một nhóm dữ liệu có nhiều kích cỡ và nhiều kiểu.
>>C={Matlab;la;mot;mon;hoc}
C=
'Matlab'
'la'
'mot'
'mon'
'hoc'
>>size(C)
ans =
5 1
Ma trận trên có 5 hàng và một cột nhng mỗi cột lại có đọ dài khác
nhau. tát cả các phần tử đợc đặt trong dấu ngoặc nhọn ({}), mỗi phần tử đợc
đặt trong dấu nháy đơn, giữa hai hàng là dấu chấm phẩy. Màng tế bào đợc
đánh địa chỉ cũng giống nh mảng thông thờng.
Ví dụ
>>s=C(2)
s=
'la'
Đây vẫn là mảng tế bào. Để that đổi dấu nhay của tế bào, ta dùng dấu
ngoặc nhọn.
>> s=C{2}
s=
la
Để truy cập vào nhiều tế bào ta dùng hàm deal
>>[a,b,c,d,e]=deal (C{:})
a=
Matlap
b=
la
c=
mot
d=
mon
e=
hoc
Hàm Char có thể dùng chuyển từ mảng tế bào về xâu
Để chuyển ngợc lại mảng tế bào, ta dùng hàm cellstr
Câu 13 Matlab sử dụng lệnh plot để vẽ đồ thị
Một số lệnh vẽ đồ thị thông dụng
Vẽ đồ thị theo tạo độ x-y
Đa các tiêu đề a vào trong hình vẽ
Đa các nhãn b theo chiều x của đồ thị
Đa các nhãn c theo chiều y của đồ thị
Vẽ các đờng lới trên đồ thị
Bỏ các dờng lới trên đồ thị
Vẽ đồ thị theo y bỏ qua chỉ số theo x
plot(y)
Nếu y là số phức thì đồ thị đợc vẽ sẽ là phần thực và phần
ảo của y
Vẽ đồ thị theo x bỏ qua chỉ số theo y
plot(x)
Nếu x là số phức thì đồ thị đợc vẽ sẽ là phần thực và phần
ảo của x
plot(x,y,s)
Vẽ đồ thị theo tạo độ x-y với tham số s
s: là kiểu đờng, màu, dấu vẽ khác nhau
box on
Khôi phụ hộp chứa trục
box off
Tắt hộp chứa trục
chuỗi kí tự vào đồ thị, trong đó x,y là toạ độ tâm
text(x,y,string) Thêm
bên trái của chuỗi kí tự
plot(x,y)
title(a)
xlabel(b)
ylabel(c)
grid on
grid of
Biểu
tợng
b
g
r
c
m
y
k
w
Sau đây là bảng sử dụng các kiểu đờng, màu và dấu vẽ khác nhau
Biểu
Biểu
Màu
Dấu
Kiểu nét vẽ
tợng
tợng
Xanh da trời
.
Điểm
Nét liền
Xanh là cây
0
Tròn
:
Đờng chấm
Đỏ
x
Dấu x
Đờng gạch-.
chấm
Xanh xám
+
Dấu +
Đỏ tím
*
Sao
Đờng gạch-gạch
-Vàng
s
Vuông
Đen
d
Diamond
Trắng
v
Triangle(down)
^
Triangle(up)
<
Triangle(left)
>
Triangle(right)
p
Pentagram
h
hexagram
Câu 14
Kiến tạo hệ trục toạ độ
Các lệnh kiến tạo hệ trục toạ độ
axis([xmin xmax ymin Thiết lập các giá trị min, max của trục hoành và
ymax])
trục tung
V=axis
V là một vector cột có chứa thanh chia cho đồ thị
hiện tại [xmin xmax ymin ymax]
axis auto
Trả lại giá trị mặc định thang chia
axis(auto)
xmin=min(x), xmax=max(x),..
axis manual
Giới hạn thang chia nh thang chia hiện tại
axis xy
Sử dụng (mặc định) hệ toạ độ decac trong đó gốc
toạ độ ở góc thấp nhất bên trái, trục ngang tăng từ
trái qua phải, trục đứng tăng từ dới lên trên.
axis ij
Sử dụng hệ toạ độ ma trận, trong đó gốc toạ độ ở
đỉnh góc trái, trục đứng tăng từ đỉnh xuống, trục
ngang tăng từ trái qua phải
axis square
Thiết lập đồ thị hiện tại là hình vuông, so với mặc
định hình chữ nhật
axis equal
Thiết lập thang chia giống nhau cho cả hai trục toạ
độ
axis tight equal
Tơng tự nh axis equal nhng hộp đồ thị vừa đủ đối
với dữ liệu
axis normal
Tắt chế độ axis equal, tight và vis3d
axis off
Tắt bỏ chế độ nền trục, nhãn lới và hộp dấu. tHoát
khỏi chế độ title và bất cứ lệnh label nào và thay bởi
lệnh text và gtext
axis on
Ngợc lại với axis off nếu chúng có thể
(*) Vẽ đồ thị
>> x=(1:1:7);
>> y=x.^2+2*x+5;
>> plot (x,y,b d :)
Câu 15
Trong Matlab có tất cả 14 phép toán mỗi phép toán
Các phép toán thông thờng
Phép toán
+
*
/
^
ý nghĩa
Cộng
Trừ
Nhân
Chia
Luỹ thừa
Các phép toán quan hệ
Toán tử 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
Các phép toán logic
Toán tử logic
and
or
not
Ký hiệu
&
/
~
(*) ý nghĩa của biểu thức
Nếu a bằng b hoặc c khác d cùng với
Nếu e nhỏ hơn hoặc bằng f cùng với
Nếu g bằng h hoặc i nhỏ hơn hoặc bằng h cùng với
Nếu l bằng m hoặc là
n nhỏ hơn hoặc bằng o và p bằng q thì
u sẽ đợc gán bằng 2
Câu 16
Không gian làm việc của MATLAb.
Matlab sử dụng hai cửa sổ: của sổ thứ nhất đợc dùng để đa các lệnh và
dữ liệu vào đồng thời để in kết quả; cửa sổ thứ hai trợ giúp cho việc truy
xuất đồ hoạ dùng để thể hiện những lệnh hay kết quả đầu ra dới dạng đồ hoạ.
Để nhớ chơng trình vừa thực hiện song ta dùng lệnh save
(program) trong đó program là tên chơng trình. Hoặc kích chuột vào
saveworkspace as.. trong menu file.
Để gọi chơng trình ta dùng lệnh load(program), trong đó program là
tên chơng trình cần gọi, hoặc kích chuột vào load trong menu file.
Để thoát khỏi môi trờng Matlab ta có thể dùng lệnh quit hoặc exit.
hoặc kích chuột vào exit matlab trong menu file.
Việc ngắt chơng trình dâng thực hiện hoặc đang thực hiện không theo
đúng yêu cầu đều thông qua phím nóng Ctrl+C.
Làm việc với cửa sổ lệnh.
Cũng nh làm việc với cửa số lệnh. Matlab nhớ các lệnh gõ vào cũng
nh các giá trị gán cho nó hoặc nó đợc tạo lên. Những lệnh và biến này đợc
gọi là lu giữ trong không gian làm việc của Matlab và có thể đợc gọi lại khi
muốn.
Ví dụ, để kiểm tra giá trị của biến tape. Ví dụ để kiểm tra giá trị của
biến tape, tất cả những gì phải làm là yêu cầu Matlab cho biết giá trị của biến
tape bằng cách đánh vào tên biến tại dấu nhắc.
>> tape
tape =
2
Nếu không nhớ tên biến, ta có thể yêu cầu Matlab cho danh sách các
biến bằng cách đánh lệnh who từ dấu nhắc lệnh.
>> who
Your variables are:
tape
Chú ý rằng Matlab không đa ra giá trị của tất cả các biến, nếu muốn
biết giá trị, thì đánh tên biến vào dấu nhắc lệnh của Matlab.
Để gọi các lệnh đã dùng, Matlab dùng các phím mũi tên ()
trên bàn phím . Ví dụ để gọi lệnh bạn gõ vào lúc gần hiện tạo nhất, ta ấn
phím mũi tên . Tiếp tục nhấn phím này, nó sẽ lại gọi tiếp lệnh trớc đó. Nếu
dùng phím mũi tên nó sẽ gọi lại lệnh từ lệnh đầu tiên cho đến lệnh gần
hiện tại nhất. Các mũi tên và có thể dùng để thay đổi vị trí con trỏ
trong dòng lệnh tại dấu nhắc của Matlab, nh vậy chúng ta có thể sửa chữa
dòng lệnh , thêm nữa chúng ta có thể dùng chuột cùng với bộ nhớ đệm để cắt
dán , copy và sửa chữa văn bản tại dấu nhắc của dòng lệnh.
Câu 17
a) Hàm hold
Có thể thêm nét vẽ vào đồ thị đã có sẵn bằng cách dùng lệnh hold. Khi
thiết lập hold on, Matlab không bỏ đi hệ trục đã tồn tại trong khi lệnh plot
mới đang thực hiện, thay vào đó, nó thêm đờng cong mới vào hệ trục hiện
tại. tuy nhiên nếu nh dữ liệu không phù hợp với hệ trục toạ độ cũ, thì trục đợc chia lại. Thiết lập hold off sẽ bỏ đi cửa sổ figure hiện tại và thay vào
bằng một đồ thị mới. Lệnh hold mà không có đối số sẽ bật tắt chức năng của
chế độ thiết lập hold trớc đó.
Để kiểm tra trạng thái của hold ta dùng hàm ishold. Trong đó giá trị là
1 nếu hold ở trạng thái on và 0 nếu hold ở trạng thái off
b)Hàm ginput
Lệnh ginput đợc sử dụng để lấy dữ liệu tù man hình đồ hoạ. Lệnh này
sẽ dùng để thay thế con trỏ trên cửa sổ. Con trỏ sẽ đợc dịch chuyển thông
qua con chuột hay bàn phím bởi ngời sử dụng. Khi ấn chute hay phím enter
thì giá trị sẽ đợc chuyển vào Matlab. Nếu giá trị toạ độ điểm không xác định
thì Matlab sẽ giữ lại cho đến khi có lần dữ liệu khác
Câu lệnh
[x,y]=ginput
[x,y]=ginput(n)
[x,y,t]=ginput(n)
Chức năng
Đọc toạ độ điểm từ màn hình đồ hoạ(đợc xác định bởi
bàn phím hay con chuột) và trao kết quả cho x,y
Đọc n toạ độ điểm từ màn hình đồ hoạ
Trả giá trị tọa độ cho x và y; t sẽ có giá trị là mảng ký
tự tơng ứng với 1 là phím trái chuột, 2 là phím phải
chuột, 3 là phím giữa. Nếu bàn phím đợc sử dụng thì t
sẽ nhận giá trị cho bởi mã ASCII của phím
Câu 18
a) Đồ thị hình múi tiêu chuẩn
Để tạo đồ thị dạng này ta dùng hàm pie(a,b). Trong đó a là vector giá
trị và b là một vector logic tuỳ trọn
Phần i của đồ thị đợc tính bằng a[i]/sum(a)
b đợc sử dụng để kéo phần đặc biệt trong đồ thị ra khỏi miêng bánh
Ví dụ
>> a=[ 1 2 3];
>> pie(a, a=min(a))
b) Biểu đồ pareto
Trong biểu đồ này các giá trị trong các vector đợc vẽ thành một khối
hình chữ nhật.
Ví dụ
>>pareto (a)
c) Vẽ đồ thị với thang chia khác nhau
Đôi khi ta muốn vẽ hai hàm khác nhau trên cùng một hệ trục mà lại sử
dụng thang chia khác nhau, plotyy có thể làm điều đó.
Ví dụ
>> x=[1 2 3 4];
>> y= x.^2+2*x-7;
>> z= x./2 -2*x;
>> plotyy(x,y,x,z)
Câu19
(*) Tạo mảng số phức
>> a=[1:1:7]; % tao vector a gồm 1 hàng 7 cột
>>d=a+i*a %tạo vector số phức d từ vector a
d=
Columns 1 through 4
1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i
Columns 5 through 7
5.0000 + 5.0000i 6.0000 + 6.0000i 7.0000 + 7.0000i
(*) Tạo mảng luỹ thừa
Matlap dùng toán tử (.^) để định nghĩa luỹ thừa của mảng.
Ví dụ
>>g.^2 % Các phần tử của g đợc luỹ thừa với số 2
ans =
1 4 9 16
25 36 49 64
81 100 121 144
>> 2.^g %Các phần tử của g là số mũ của 2
ans =
2
4
8
16
32
64
128
256
512
1024
2048
4096
>> g.^ (h-1) % Các phần tử của g đợc luỹ thừa với số mũ tuơng ứng là
các phần tử của h trừ đi 1
ans =
1 1 1 1
5 6 7 8
81 100 121 144
(*) Mảng có các phần tử là 0 hoặc 1
Matlap cung cấp những hàm để tạo những mảng mà các phần tử của
chúng là 0 và 1:
Ví dụ
>> ones(3) % Tạo mảng 3 hàng, 3 cột với các phần tử là 1.
ans =
1 1 1
1 1 1
1 1 1
>> zeros(2,5) % tạo mảng 2 hàng, 5cột với các phần tử là 0.
ans =
0
0
Câu 20
Tên lệnh
disp(ans)
echo on
0
0
0
0
0
0
0
0
Chức năng
Hiển thị các kết quả mà không hiện tên biến.
Lệnh cho phép xem các lệnh có trong *.mfile khi chúng
đợc thực hiện.
echo off
Lệnh không cho phép xem các lệnh có trong *.m file khi
chúng đợc thực hiện.
type
Lệnh cho xem nội dung file, ngầm định file ở dạng Mfile.
what
Lệnh này cho biết tất cả các files M-files và MAT-file có
trong vùng làm việc hiện hành hay không.
input
Sử dụng dấu nhắc để đa dữ liệu vào.
pause
Dừng lại cho đến khi ngời dùng nhấn một phím bất ký.
pause(n)
Dừng lại n giây.
waitforbuttonpress Dừng lại cho đến khi ngời dùng nhấn chuột hoặc phím.
Câu 21
Sai số tuyệt đối
Định nghĩa 1.2 Hiệu a= A-a ( hoặc a= a-A) gọi là sai số của số xấp
xỉ a. Trị tuyệt đối:
= a = A-a
gọi là sai số tuyệt đối của số xấp xỉ a.
Thông thờng, không biết đúng số A, do đó không xác định đợc sao số
tuyệt đối của số xấp xỉ a. Vì vậy, cùng với khái niệm sai số tuyệt đối ngời ta
đa thêm khái niệm sai số tuyệt đối giới hạn.
Định nghĩa 1.3 Sai số tuyệt đối giới hạn của số xấp xỉ a là số không
nhỏ hơn sai số tuyệt đối của số xấp xỉ a.
Vậy nếu a1 là sai số tuyệt đối giới hạn của số xấp xỉ a thì;
a = A-a a1
(1.2)
Từ đó, suy ra:
a- a1 A a+ a1
(1.3)
Vậy a- a1 là số xấp xỉ thiếu của A, còn a+ a1 là xấp xỉ thừa của A. Để
đơn giản, thờng quy ớc viết nh sau
A= aa1
(1.4)
Ví dụ
Xác định Sai số tuyệt đối giới hạn của số xấp xỉ a= 3,14 thay cho
Vì 3,14 < < 3,15 nên:
a- <0,01
Vì vậy có thể chọn a1 là 0,01
Mà 3,14 < < 3,142 thì
a- <0,002
Do đó chọn a1 là 0,002;..
Qua thí dụ trên ta they định nghĩa sai số tuyệt đối giới hạn không đơn trị; Sai
số tuyệt đối giới hạn của số xấp xỉ a là số bất kỳ trong tập vô hạn các số
không âm a1 thỏa mãn (1.2). vì vậy , trong thực tế ngời ta phải chọn a1
là số nhỏ nhất có thể đợc, thỏa mãn (1.2).
Sai số tơng đối
Sai số tuyệt đối hoặc sai số tuyệt đối giới hạn không thể hiện một các
đầy đủ mức độ chính xác của phép đo hoặc tính toán. Chẳng hạn, đo chiều
dài của hai các trục nhận đợc kết quả sau:
l1 =100 6 0,1 (cm)
l2 = 50 6 0,1 (cm)
tuy sai số tuyệt đối giới hạn của hai phép đo trên bằng nhau nhng rõ ràng
phép đo l1 chính xác hơn phép đo l2. Để thực hiện điều đó, ngời ta đa ra khái
niệm sau:
Định nghĩa 1.4 Sai số tơng đối của số xấp xỉ a, ký hiệu , là:
a
= A =
Aa
A
vói giả thiết A# 0. từ đó a = A*
Định nghĩa 1.5 Sai số tơng đối giới hạn của số xấp xỉ a, ký hiệu a, là
số không nhỏ hơn sai số tơng đối của số xấp xỉ a. Do đó
a
(1.6)
nghĩa là
a
A
a
từ đó có thể chọn a1= A *a
(1.7)
Vì thông thờng không biết đúng A và vì a là số xấp xỉ của A cho nên trong
thực hành, thay cho (1.7), ngời ta có thể dùng công thức:
a1= a *a
(1.8)
Thay (1.8) vào (1.4) ta có
A= a a *a= a(1a)
(1.9)
VD: Tính a của 2 công thức
l1 =100 6 0,1 (cm)
l2 = 50 6 0,1 (cm)
Với công thức 1 A=l1, a=100, a =0,1/100
Với công thức 2 A=l2, a=50, a =0,1/50
Vậy phép đo của công thức 1 chính xác hơn công thức 2 vì sai số tơng
đối giới hạn của công thức 1 nhỏ hơn sai số tơng đối giới hạn của công thức
2.
Câu 22
Chữ số có nghĩa
Một số viết ở dạng thập phân có thể gồm nhiều chữ số. Chẳng hạn
20,25 có 4 chữ số; 0,0304 có 5 chữ số.
Định nghĩa 1.6
Những chữ số có nghĩa của một số là những số của số đó kể từ chữ số khác
không đầu tiên tính từ trái sang phải.
Ví dụ:
Số 20,25 có 4 chữ số có nghĩa, số 0,0304 có 3 chữ số có nghĩa.
Chữ số đáng tin cậy
Ta biết mọi số thực a đều có thể biểu diễn dới dạng thập phân hữu hạn
hoặc vô hạn:
a=6(m10m + m-110m-1 + m-210m-2 + .+ m-(n-1)10m (n-1) +)
(1.10)
trong đó m,n là số nguyên, 0 i 9 (i=m-1, m-2)
Ví dụ
251,45= 2.102+5.101+1.100+4.10-1+5.10-2
Bây giờ, giả sử số a biểu diễn dới dạng (1.10) là số xấp xỉ của số đúng A với
sai số tuyệt đối giới hạn là a1.
Định nghĩa 1.7 Trong (1.10), chữ số m-(n-1)10m (n-1) gọi là chữ số đáng
tin cậy nếu
1
2
a1 . 10 m-(n-1)
(1.11)
và gọi là chữ số nghi ngờ nếu:
1
2
a1 > . 10 m-(n-1)
(1.12)
Ví dụ:
Số xấp xỉ a=3,14159 của số đúng A= với a1=0,01 có 2 chữ số đáng tin là
3, 1 có 4 chữ số nghi ngờ là 4,1,5,9.
Rõ ràng nếu m-(n-1) là chữ số đáng tin thì các chữ số ở bên trái nó cũng
là các chữ số đáng tin, ngợc lại m-(n-1) là chữ số nghi ngờ thì các chữ số bên
phaỉ của nó cũng là các chữ số nghi ngờ.
Cách viết số xấp xỉ.
Cho số xấp xỉ a của số đúng A với sai số tuyệt đối giới hạn là a1. Có
2 cách viết số xấp xỉ.
Cách viết thứ nhất: là viết số xấp xỉ a kèm heo sai số tuyệt đối giới
hạn: a6 a1, chẳng hạn 17,4560,004. Cách này thờng đợc ding để biểu diễn
các kết quả tính toán hoặc phép đo.
Cách viết thứ hai: là viết số xấp xỉ a theo quy ớc: mọi chữ số có nghĩa
đồng thời là những chữ số đáng tin. Điều đó có nghĩa là sai số tuyệt đối giới
hạn a1 không lớn hơn một nửa đơn vị của chữ số ở hàng cuối cung bên
phải. Trong các bảng số thờng thờng dùng nh bảng lôgảit, bảng các hàm số lợng giác,. ngời ta viết các số xấp xỉ theo cách thứ hai.
Câu 23
Cho hàm số khả vi:
u= f(x1,x2,.,xn)
và giả sử sai số tuyệt đối giới hạn x1i (i =1,n) của các đối số xi (i=1,n), hãy
xác định sai số tuyệt đối giới hạn u1 và sai số tơng đối giới hạn a của hàm
số u.
Gọi U là giá trị đúng của số xấp xỉ u, Xi là giá trị đúng cảu số xấp xỉ
xi(i=1,n), ta có:
U-u= u = f(X1,X2,.,Xn)- f(x1,x2,..,xn)
y du =
n
i =1
f
(Xi- xi)=
xi
n
f
f
=
xi
xi
xi
xi
i =1
i =1
n
f
xi1
xi
i =1
n
Vậy có thể lấy:
n
u1=
i =1
f
xi1 =
xi
n
i =1
u
xi1
xi
Chia 2 vế của (1.13) cho u nhận đuợc đánh giá sau đối với sai số tơng đối
của hàm số u:
u
= u
n
i =1
f
xi
xi1=
u
n
i =1
lnf (x1,x2,,xn) xi1
xi
Do đó:
u=
n
i =1
lnu xi1
xi
Sai số của tích
Xét hàm số:
u =x1.x2.xn
áp dụng công thức (1.15), nhận đợc
Từ đó
u= x1+ x2+ ..xn
u1=uu
Đặc biệt, nếu u=xm (m nguyên dơng) thì :
u=mx
Câu 24
Thuật toán tìm kiếm tuyến tính
Thuật toán đàu tiên trình bày trong phần này là thuật toán tìm kiếm
tuyến tính hay tìm kiếm tuần tự. Nó bắt đầu bằng việc so sánh x với a1. Khi
x=a1, nghiệm là vị rí của a1, tức là i. Khi x a1, thì so sánh x với a2. Nếu
x=a2, nghiệm là vị trí của a2, tức là 2. Khi x a2, thì so sánh x với a3. Tiếp
tục quá trình này bằng cách tuần tự so sánh x với mỗi một số hạng của bảng
liệt kê cho tơi khi tìm đợc số hạng bằng x, khi đó nghiệm là vị rí của số hạng
đó. Nếu toàn bảng liệt kê đã đợc kiểm tra mà không xác định đợc vị trí của x,
thí nghiệm là 0.
Sau đây là phần thuật toán tìm kiếm:
Procedure Tìm kiếm tuyến tính (x,i,location:integer; a1,a2,.,an: các
số nguyên phân biệt)
i:=1
While (i
{ Lệnh có nghĩa là vòng lặp chỉ kết thúc khi i > n hoặc x bằng giá trị
ai)
i:=i+1
if i [ n then location:=i
else location:=0
{ location là chỉ số dới của số hạng bằng x có giá trị bằng x hoặc là 0
nếu không tìm đợc x}
Thuật toán tìm kiếm nhị phân
Bây giờ ta xét một thuật toán tìm kiếm khác. Thuật toán này có thể đợc dùng khi bảng liệt kê có các số hạng đợc sắp theo thứ tự tăng dần (ví dụ:
Nếu các số hạng là các số, thì chúng đợc sắp xếp từ số nhỏ nhất đến số lớn
nhất; hoặc nếu chúng là các từ thì chúng đợc sắp theo thứ tự bảng chữ cái)
Thuật toán thứ hai này đợc gọi là thuật toán tìm kiếm nhị phân. Nó đợc tiến
hành bằng cách so sánh phần tử cần xác định vị trí với số hạng ở giữa bảng
liệt kê. Sau đó bảng này đợc tách ra làm hai bảng liêt kê con nhỏ hơn có kích
thớc nh nhau hoặc một trong hai bảng con ít hơn bảng con kia một số hạng.
Việc so sánh phần tử cần xác định vị trí với số hạng ở giữa bảng liệt kê sẽ
cho ta biết phần tử xác định vị trí có khả năng nằm ở bảng liệt kê con nào
trong 2 bảng liệt kê con trên và sự tìm kiếm tiếp tục bằng cách hạn chế tìm
kiếm ở một bảng con thích hợp. Quá trình cứ tiếp tục nh vậy khi nào tìm ra
vị trí chính xác của phần tử cần xác định hoặc đến lúc không thể phân chia
đợc bảng liệt kê con nữa.
Bây giờ ta có thể chỉ rõ các bớc trong thuật toán tìm kiếm nhị phân.
Để tìm số nguyên x trong bảng liệt kê a1, a2, a3,., an với a1< a2 <
.< an ta bắt đầu bằng việc so sánh x với số hạng am ở giữa của dãy, với
m=[ n + 1 ]. (Cần nhớ rằng [x] là số nguyên lớn nhất không quá x).
2
Nếu x > am, việc tìm kiếm x giới hạn ở nửa thứ hai của dãy, gồm a m+1,
am+2,.,an. Nếu x không lớn hơn am, thì sự tìm kiếm giới hạn ở nửa dãy đầu
của dãy gồm a1, a2, ..am.
Bây giờ sự tìm kiếm chỉ giới hạn trong bảng liệt kê có số phần tử nhỏ
hơn [ n + 1 ]. Dùng chính thủ tục này so sánh x với số hạng ở giữa của bảng
2
liệt kê đợc hạn chế. Sau đó lại hạn chế việc tìm kiếm ở nửa thứ nhất hoặc nửa
thứ hai của bảng liệt kê. lặp lại quá trình này cho tơi khi nhận đợc một bảng
liệt kê chỉ có một số hạng. Sau đó, chí còn xác định số hạng này có phải là x
hay không.
Sau đây là giả mã cho thuật toán tìm kiếm nhị phân.
Procedure Tìm kiếm nhị phân ( x: integer, a1,a2,.an: integer tăng dần)
i:=1
{ i là điểm mút trái của khoảng tìm kiếm}
j:=n
{j là điểm mút phải của khoảng tìm kiếm}
While i