You are on page 1of 30

MẢNG

• Tạo mảng
• Một số mảng đặc biệt
• Mảng chuyển vị
• Truy cập phần tử của mảng
• Thêm phần tử vào mảng
• Xóa phần tử trong mảng
• Tạo mảng trống
• Một số hàm có sẵn với mảng
• Chuỗi ký tự
• Ví dụ
TẠO MẢNG

Mảng một chiều (Véc tơ): véc tơ hàng, véc tơ cột

>> a = [1 2 3] >> c= [1;2;3] >> d = [1


a= 1 2 3 c= 2
1 3]
>> b = [1,2,3] 2
b= 1 2 3 3 d=
1
2
3

Các phần tử của hàng ngăn cách bởi dấu cách hoặc dấu phẩy (,)
Các phần tử của cột ngăn cách bởi dấu chấm phẩy (;) hoặc enter xuống dòng
TẠO MẢNG
Dùng dấu hai chấm (:) để tạo véc tơ hàng cách đều
x = [m:q:n] hoặc x = m:q:n
Bước nhảy q có thể nguyên hoặc không nguyên, có thể dương
hoặc âm, nếu không chỉ định q thì bước nhảy mặc định bằng 1

>> a = [1:2:5] >> e = [1:2:7]'


a= 1 3 5 e=
1
>> b = [1:2:6] 3
b= 1 3 5 5
7
>> c = [1:0.1:1.3]
Tạo véc tơ cột cách
c = 1.0000 1.1000 1.2000 1.3000 đều: kết hợp phép
toán chuyển vị, dấu
>> d = [8:-2:3] (’)
d= 8 6 4

>> e = [1:4]
e= 1 2 3 4
TẠO MẢNG
Dùng lệnh linspace để tạo véc tơ hàng cách đều
x = linspace(a,b,n)
Nếu không chỉ định n thì số lượng mặc định bằng 100

>> a = linspace(1,5,3) >> d = linspace(1,5,3)'


a= 1 3 5 d=
1
>> b = linspace(5,1,5) 3
b= 5 4 3 2 1 5

>> c = linspace(1,2) Tạo véc tơ cột cách


c= đều: kết hợp phép
Columns 1 through 6 toán chuyển vị, dấu
1.0000 1.0101 1.0202 1.0303 1.0404 1.0505 (’)
....
Columns 99 through 100
1.9899 2.0000
TẠO MẢNG

Mảng hai chiều (ma trận): các phần tử trong hàng ngăn cách bởi dấu
cách hoặc dấu phẩy (,). Dùng dấu chấm phẩy (;) hoặc enter để tạo
hàng mới.
>> a = [1 2; 3 4] >> d = [1 2 3; 3:2:7; linspace(2,3,3)]
a= d=
1 2 1.0000 2.0000 3.0000
3 4 3.0000 5.0000 7.0000
2.0000 2.5000 3.0000
>> b = [1 2
3 4] >> e = [1 2; 3 4 5]
??? Error using ==> vertcat
b= CAT arguments dimensions are not consistent.
1 2
3 4

>> x = 1; y = 2;
>> c = [x/y, x^y; sin(x), cos(pi/y)]
c=
0.5000 1.0000
0.8415 0.0000
MỘT SỐ MẢNG ĐẶC BIỆT

zeros(m,n) Tạo ma trận kích thước m,n gồm toàn phần tử 0

ones(m,n) Tạo ma trận kích thước m,n gồm toàn phần tử 1

eye(n) Tạo ma trận đơn vị kích thước n,n

>> a = zeros(2,3) >> d = zeros(2)


a= d=
0 0 0 0 0
0 0 0 0 0

>> b = ones(2,2) zeros(n) hoặc


b= ones(n) sẽ tạo
1 1 ma trận vuông
1 1 kích thước n x n

>> c = eye(2)
c=
1 0
0 1
MẢNG CHUYỂN VỊ
Sử dụng dấu phẩy trên (’) để tạo mảng chuyển vị

>> a = [1 2 3] >> c = [1 2 3; 4 5 6]
a= c=
1 2 3 1 2 3
4 5 6
>> b = a'
b= >> d = c'
1 d=
2 1 4
3 2 5
3 6

>> e = [1:2:7]' >> f = linspace(1,5,3)'


e= f=
1 1
3 3
5 5
7
TRUY CẬP PHẦN TỬ CỦA MẢNG
Truy cập một phần tử của véc tơ: dùng dấu ngoặc đơn () để chỉ định
thứ tự phần tử cần truy cập

>> a = [1 3 2 4]
a= 1 3 2 4

>> b = a(3)
b= 2

>> c = [a(1), a(4)]


c= 1 4

>> a(2) + a(3)


ans = 5

>> a(3)=5
a= 1 3 5 4
TRUY CẬP PHẦN TỬ CỦA MẢNG
Truy cập một phần tử của ma trận: dùng dấu ngoặc đơn () để chỉ định
thứ tự hàng, cột của phần tử cần truy cập

>> a = [1 2 3; 7 6 5]
a=
1 2 3
7 6 5

>> b = a(2,2)
b= 6

>> a(2,3) = 8
a=
1 2 3
7 6 8

>> c = a(4) Có thể dùng một chỉ số để


c= 6 chỉ thứ tự phần tử, khi đó
các phần tử được đếm lần
lượt từ trên xuống dưới theo
>> a(1,2) + a(5)
các cột từ trái qua phải
ans = 5
TRUY CẬP PHẦN TỬ CỦA MẢNG

Truy cập nhiều phần tử liên tiếp của véc tơ hoặc mảng: dùng dấu hai
chấm (:) để truy cập một dải phần tử trong mảng

Với véc tơ:

v(:) truy cập mọi phần tử của véc tơ v


v(m:n) truy cập các phần tử từ vị trí m đến vị trí n

Với ma trận:

A(:,n) truy cập toàn bộ cột thứ n


A(n,:) truy cập toàn bộ hàng thứ n
A(:,m:n) truy cập các cột từ vị trí m đến vị trí n
A(m:n,:) truy cập các hàng từ vị trí m đến vị trí n
A(m:n,p:q) truy cập các phần tử là giao của các hàng từ m
đến n với các cột từ p đến q
TRUY CẬP PHẦN TỬ CỦA MẢNG

>> a = 1:2:9 >> d = [1 2 3; 7 6 5]


a= 1 3 5 7 9 d=
1 2 3
>> b = a(2:4) 7 6 5
b= 3 5 7
>> e = c(:,2)
>> c = a(3:5)' e=
c= 2
5 6
7
9 >> f = c(1,:)
f= 1 2 3

>> g = c(1:2,1:2)
g=
1 2
7 6
TRUY CẬP PHẦN TỬ CỦA MẢNG
Truy cập đến các phần tử ở nhiều vị trí rải rác bằng cách liệt kê
các vị trí đó trong dấu ngoặc vuông []

Câu lệnh: A([các hàng],[các cột]), các vị trí hàng, cột ngăn cách
nhau bởi dấu phẩy (,)

>> a = 4:3:20 >> c = [1:2:11; ones(1,6); zeros(1,6)]


a = 4 7 10 13 16 19 c=
1 3 5 7 9 11
>> b = a([2, 4, 3:5]) 1 1 1 1 1 1
b = 7 13 10 13 16 0 0 0 0 0 0

>> d = c([1,2],[1,5,2:6])
d=
1 9 3 5 7 9 11
1 1 1 1 1 1 1

c([1,2],[1,5,2:6]): truy cập


đến các phần tử lần lượt nằm
trên các hàng 1 và 2, nằm trên
các cột 1,5,2,3,4,5,6 của ma
trận A
THÊM PHẦN TỬ VÀO MẢNG

Gán giá trị cho vị trí hàng, cột cần thêm tương ứng. Nếu như có
những phần tử không được gán giá trị thì MATLAB sẽ tự động gán
giá trị 0 cho phần tử đó

>> a = 1:3 >> b = ones(2,2)


a= 1 2 3 b=
1 1
>> a(4) = 7 1 1
a= 1 2 3 7
>> b(3,5) = 2
>> a(8) = 5 b=
a= 1 2 3 7 0 0 0 5 1 1 0 0 0
1 1 0 0 0
>> k(5) = 2 0 0 0 0 2
k= 0 0 0 0 2
>> c(2,3) = 5
c=
0 0 0
0 0 5
THÊM PHẦN TỬ VÀO MẢNG
Có thể ghép nối các mảng với nhau: sử dụng dấu ngoặc vuông []

>> a = [1 2 3] >> c = [a;b]


a= c=
1 2 3 1 2 3
1 1 1
>> b = ones(2,3) 1 1 1
b=
1 1 1 >> d = eye(3)
1 1 1 d=
1 0 0
Các mảng được ghép được đặt trong dấu 0 1 0
ngoặc vuông [] 0 0 1
Các mảng được ghép ngang phải có cùng >> e = [c,d]
số hàng, phân cách bởi dấu cách hoặc e=
dấu phẩy (,) 1 2 3 1 0 0
Các mảng được ghép dọc phải có cùng số 1 1 1 0 1 0
cột, phân cách bởi dấu chấm phẩy (;) 1 1 1 0 0 1
hoặc enter xuống dòng.
THÊM PHẦN TỬ VÀO MẢNG

Ghép nối các mảng với nhau:


XÓA PHẦN TỬ TRONG MẢNG

Sử dụng dấu ngoặc vuông []: truy cập các phần tử cần xóa và gán cho
chúng dấu []

>> a = 1:2:9 >> b = eye(5)


a= 1 3 5 7 9 b=
1 0 0 0 0
>> a(4) = [] 0 1 0 0 0
a= 1 3 5 9 0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

>> b([1:3],:) = []
b=
0 0 0 1 0
0 0 0 0 1

Lưu ý: nếu sau khi xóa, mảng bị biến dạng, không còn giữ được dạng
vuông vức chữ nhật, thì lệnh xóa sẽ báo lỗi và không thực hiện được
TẠO MẢNG TRỐNG

Sử dụng dấu ngoặc vuông []: dấu [] có thể dùng để tạo sẵn một mảng
chưa có phần tử nào, chờ đợi được lấp đầy bởi các bước tiếp theo
của thuật toán

a = []
for k = 1:5
a = [a, k]
end
MỘT SỐ HÀM CÓ SẴN VỚI MẢNG

Lệnh Mô tả Ví dụ
Trả lại số phần tử của
length(A) véc tơ A, hoặc số cột
của ma trận A

Trả lại véc tơ hàng


[m,n], trong đó m là
size(A) số hàng, n là số cột
của ma trận A

Tạo ra một ma trận


kích thước m,n từ các
phần tử của ma trận
reshape(A A. Các phần tử được
,m,n) lấy lần lượt trong các
cột của A, và A phải có
m x n phần tử
MỘT SỐ HÀM CÓ SẴN VỚI MẢNG

Lệnh Mô tả Ví dụ

Khi v là một véc tơ thì


diag(v) lệnh diag(v) tạo ra ma
trận vuông nhận véc tơ
v làm đường chéo

Khi A là một ma trận thì


lệnh diag(A) tạo ra một
diag(A) véc tơ gồm các phần tử
trên đường chéo của A
MỘT SỐ HÀM CÓ SẴN VỚI MẢNG
Lệnh Mô tả Ví dụ
Sắp xếp các phần tử của véc >> sort(a) a=
ans =
sort(x) tơ hoặc các phần tử trong các 1 1 2 1 3 2
cột của ma trận theo thứ tự 2 3 5
tăng dần 4 5 7
4 1 7
Sắp xếp lại các hàng của ma >> sortrows(a)
ans = 2 5 5
sortrows(x) trận theo thứ tự tăng dần của 1 3 2
các phần tử trong cột đầu 2 5 5
4 1 7

>> fliplr(a)
ans =
fliplr(x) Lật ma trận, véc tơ theo chiều 2 3 1
flipud(x) trái phải, hoặc trên dưới 7 1 4
5 5 2

>> rot90(a,2)
ans =
rot90(x,k) Xoay ma trận theo góc k*900 5 5 2
7 1 4
2 3 1

>> b = [1 3 2 1]
b= 1 3 2 1
x(end) Trả lại phần tử cuối cùng của >> b(end)
véc tơ a ans = 1
MỘT SỐ HÀM CÓ SẴN VỚI MẢNG

Lệnh Mô tả
find(x) Tìm kiếm các phần tử của mảng

>> X = [1 0 4 -3 0 0 0 8 6]; >> x = [11 0 33 0 55]'; >> M = magic(3)


>> khac_khong = find(X) find(x) M=
khac_khong = ans = 8 1 6
1 3 4 8 9 1
>> X(find(X)) 3 3 5 7
ans = 5
1 4 -3 8 6 >> find(x == 0) 4 9 2
ans =
>> find(X > 2) 2 >> find(M > 3, 4)
ans = 4 ans =
3 8 9 >> find(0 < x & x < 10*pi) 1
>> X(find(X > 2)) ans = 3
ans = 1 5
4 8 6 6
MỘT SỐ HÀM CÓ SẴN VỚI MẢNG

>> a = [1 2 3;4 5 6] >> size(a)


a= ans =
1 2 3 2 3
4 5 6
>> length(a)
ans = 3

>> hang = size(a) * [1;0]


hang = 2

>> cot = size(a) * [0;1]


cot = 3

>> diag(a)
ans =
1
5
VÍ DỤ 1

Dùng lệnh ones và zeros, tạo ma trận 4x5 với hai hàng đầu toàn 0 và hai
hàng cuối toàn 1

>> a = zeros(2,5) >> d = [zeros(2,5); ones(2,5)]


a= d=
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 1 1 1 1
>> b = ones(2,5) 1 1 1 1 1
b=
1 1 1 1 1
1 1 1 1 1

>> c = [a;b]
c=
0 0 0 0 0
0 0 0 0 0
1 1 1 1 1
1 1 1 1 1
VÍ DỤ 2

Tạo ma trận 6x6 trong đó hai hàng giữa và hai cột giữa toàn 1, còn lại toàn 0

>> a = zeros(6)
a=
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

>> a (3:4,:) = ones(2,6) >> a (:,3:4) = ones(6,2)


a= a=
0 0 0 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 0 0 1 1 0 0
1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 0 0 1 1 0 0
VÍ DỤ 3

Cho véc tơ v và các ma trận A,B

Tạo các mảng này, sau đó, bằng một lệnh duy nhất, hãy:
- thay thế 4 cột cuối của hàng 1 và hàng 3 của A bởi 4 cột đầu của hai hàng
đầu của B
- thay thế 4 cột cuối của hàng thứ 4 của A bởi các phần tử từ 5 - 8 của v
- thay thế 4 cột cuối của hàng thứ 5 của A bởi các phần tử từ cột 2 - 5 của
hàng thứ 3 của B

>> A([1,3,4,5],[3:6]) = [B([1,2],[1:4]); v(5:8); B([3],[2:5])]


VÍ DỤ 3

>> A = [2:3:17; 3:3:18; 4:3:19; 5:3:20; 6:3:21]


A=
2 5 8 11 14 17
3 6 9 12 15 18
4 7 10 13 16 19
5 8 11 14 17 20
6 9 12 15 18 21

>> B = [5:5:30; 30:5:55; 55:5:80]


B= >> A([1,3,4,5],[3:6]) = [B([1,2],[1:4]); v(5:8); B([3],[2:5])]
5 10 15 20 25 30 A=
30 35 40 45 50 55 2 5 5 10 15 20
55 60 65 70 75 80 3 6 9 12 15 18
4 7 30 35 40 45
>> v = [99:-1:91] 5 8 95 94 93 92
v = 99 98 97 96 95 94 93 92 91 6 9 60 65 70 75
CHUỖI KÝ TỰ

- Là một mảng có các phần tử là các ký tự, đặt trong dấu ngoặc đơn ‘’
- Các ký tự có thể là chữ, số, ký hiệu hoặc dấu cách
- Ví dụ ‘ad eg’ , ’3%f3’ , ’2k9!{]’
- ‘’ --> ‘
>> a = 'abc def' >> c = 'abc '' def'
a= c=
abc def abc ' def

>> b = 'xin chao'


b=
xin chao

>> b(3)
ans =
n
>> b(4)
ans =

>>
CHUỖI KÝ TỰ

>> x = 234
x=
234

>> y = '234'
y=
234

>> x*2
ans =
468

>> y*2
ans =
100 102 104

x là số, tham gia được các phép tính toán học


y là chuỗi ký tự, không tham gia được các phép tính toán học
CHUỖI KÝ TỰ

Chuỗi ký tự cũng có thể đưa vào các mảng, mỗi dòng của mảng là một chuỗi ký
tự. Khi đó yêu cầu các chuỗi trong mỗi dòng có độ dài bằng nhau. Điều này bất
tiện nếu làm bằng tay.

MATLAB xây dựng sẵn lệnh char dùng để tạo mảng ký tự từ các chuỗi ký tự có
độ dài khác nhau

>> thong_tin = char('ho ten:' , 'nguyen van tuan' , 'diem so:' , 'A+')

thong_tin =

ho ten:
nguyen van tuan
diem so:
A+

You might also like