Updatesofts.com Ebook Team
25
chơng 6
các phép toán với MảNg
Tất cả mọi sự tính toán đều duy trì một điểm là có sử dụng đến các số đơn, gọi là
scalars
scalarsscalars
scalars. Phép toán có liên quan đến scalars
scalarsscalars
scalars là các phép toán cơ bản, nhng một lúc nào
đó, phép toán phải lặp lại nhiều lần khi tính trên nhiều số. Để giải quyết vấn đề này,
MATLAB định nghĩa thao tác trên mảng dữ liệu.
6.1 Mảng đơn
6.1 Mảng đơn6.1 Mảng đơn
6.1 Mảng đơn Giả sử ta xét hàm y=sin(x) trong một nửa chu kỳ ( x 0 ) trong khoảng này số
điểm giá trị của x là vô tận, nhng ta chỉ xét những điểm cách nhau một khoảng giá trị là
0.1 nh vậy số các giá trị của x là đếm đợc. Từ đó ta có mảng các giá trị của x là
x= 0, 0.1, 0.2,...,
Nếu ta dùng máy tính kỹ thuật để tính thì ta đợc tơng ứng các giá trị của y, từ đó ta có
mảng của y
x 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
y 0 0.31 0.59 0.81 0.95 1.0 0.95 0.81 0.59 0.31 0
+) Để truy nhập đến các phần tử của mảng ta dùng các chỉ số thứ tự của phần tử đó trong
mảng
ví dụ x(1) là phần tử thứ nhất của mảng, x(2) là phần tử thứ hai của mảng...
Updatesofts.com Ebook Team
26
>> x(2) % phần tử thứ nhất của mảng
ans=
0.3142
>> y(5) % phần tử thứ 5 của mảng
ans=
0.9511
+) Để truy nhập đến nhiều phần tử của mảng, ví dụ ta truy nhập từ phần tử thứ nhất đến
phần tử thứ năm của mảng x:
>> x(1:5)
ans=
0 0.3142 0.6283 0.9425 1.2566
Truy nhập từ phần tử thứ 7 đến phần tử cuối của mảng y:
>> y(7:end)
ans=
0.9511 0.8090 0.5878 0.3090 0.0000
Truy nhập từ phần tử thứ ba đến phần tử thứ nhất của mảng y:
>> y(3:-1:1)
ans=
Updatesofts.com Ebook Team
27
Với mảng có số lợng phần tử ít thì ta có thể nhập vào trực tiếp, nhng với mảng có số l-
ợng lớn các phần tử thì ta dùng một trong hai cách sau:
+) Tạo một mảng bắt đầu là phần tử 0, sau bằng phần tử trớc cộng với 0.1, phần tử cuối là
1, tất cả các phần tử của mảng đợc nhân với :
>> x= (0:0.1:1)*pi
x=
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
+) Tạo mảng gồm các phần tử của x bằng hàm
linspace
linspace linspace
linspace
. Cú pháp của hàm này nh sau:
linspace
linspacelinspace
linspace(giá trị phần tử đầu, giá trị phần tử cuối, số các phần tử)
ví dụ
>> x = linspace(0,pi,11)
x=
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
, chứa 11 giá trị
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, nó không thuận tiện tạo các phần tử bằng các
phơng pháp trên, không có một mẫu chuẩn nào để tạo các mảng này. Tuy nhiên 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:5,b = 1:2:9
a=
Updatesofts.com Ebook Team
28
1 2 3 4 5
b=
1 3 5 7 9
>> c = [a b]
1 2 3 4 5 1 3 5 7 9
ở ví dụ trên ta đã tạo hai mảng thành phần là a và 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]
Tóm lại ta có bảng cấu trúc các mảng cơ bản:
x=[ 2 2*pi sqrt(2) 2-3j ] Tạo vector hàng x chứa các phần tử đặc biệt.
x= first : last Tạo vector hàng x bắt đầu tại first, phần tử sau
2
3
4
5
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ủa
vector hàng. Còn ở ví dụ này ta dùng dấu chấm phẩy để phân cách giữa hai hàng của
vector cột.
Updatesofts.com Ebook Team
29
Một cách khác để tạo các vector cột là dùng các hàm
linspace
linspacelinspace
linspace
,
logspace
logspacelogspace
logspace
, hay từ các
vector hàng, sau đó dùng phơng pháp chuyển vị. MATLAB dùng toán tử chuyển vị là ( ' )
để chuyển từ vector hàng thành vector cột và ngợc lại.
Ví dụ tạo một vector a
aa
a và vector b
bb
b là chuyển vị của vector a
aa
a, vector c
cc
c là chuyển vị của
2
3
4
5
>> d = a + i*a % Tạo vector số phức d
dd
d từ vector a
aa
a
d=
Columns 1 though 4
1.0000+1.0000i 2.0000+2.0000i 3.0000+3.0000i 4.0000+4.0000i
Columns 5
5.0000+5.0000i
>> e = d.' % Tạo vector e
ee
e từ vector d
dd
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
>> f = d' % Tạo ra vector f
ff
f từ vector d
dd
d bằng toán tử chuyển vị ( ' )
Chú ý
Chú ýChú ý
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 nh ví dụ sau:
>> h = [1 2 3;4 5 6 7]
Numbers of elements in each row must be the same
+) Phép toán giữa mảng với số đơn.
+) Phép toán giữa mảng với số đơn.+) Phép toán giữa mảng với số đơn.
+) Phép toán giữa mảng với số đơn. Trong ví dụ trớc chúng ta đã tạo mảng x bằng cách nhân các phần tử của một mảng
với . Các phép toán đơn giản khác giữa mảng với số đơn là phép cộng, phép trừ, phép nhân,
và phép chia của 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.
Ví dụ:
>> g = [1 2 3 4; 5 6 7 8; 9 10 11 12];
>> -2 % Trừ các phần tử của mảng g đi 2
ans=
-1 0 1 2
3 4 5 6
7 8 9 10
>> 2*g - 1 % Nhân tất cả các phần tử của mảng g với 2 sau đó trừ đi 1
ans=
1 3 5 7
9 11 13 15
>> 2*g - h % Nhân ma trận g với 2 sau đó lấy kết quả trừ đi ma trận h
hh
h.
ans=
1 3 5 7
8 10 12 14
15 17 19 21
>> g.*h % Nhân tơng ứng các phần tử của mảng g với các phần tử của mảng h
hh
h
ans=
1 2 3 4
10 12 14 16
27 30 33 36
ở ví dụ trên ta đã dùng toán tử chấm_nhân ( .* ), ngoài ra MATLAB còn dùng toán tử
chấm_chia ( ./ hoặc .\ ) để chia tơng ứng các phần tử của hai mảng nh ví dụ dới đây:
>> g./h % Chia phải tơng ứng các phần tử của mảng g với các phần tử của mảng h
hh
h
ans=
1.0000 2.0000 3.0000 4.0000
2.5000 3.0000 3.5000 4.0000
3.0000 3.3333 3.6667 4.0000
>> h.\g % Chia trái tơng ứng các phần tử của mảng g
gg
g với các phần tử của mảng h
hh
h
- 0.3750 0 0.3750
Phép chia ma trận đa ra kết quả mà không cần thiết phải cùng kích cỡ nh ma trận g
gg
g
và ma trận h
hh
h. Về các phép toán đối với ma trân chúng ta sẽ nói đến sau
+) Mảng với luỹ thừa.
MATLAB dùng toán tử ( .^ ) để định nghĩa luỹ thừa của mảng.
Ví dụ ta có hai mảng g
gg
g và h
hh
h nh ở trên, ta có thể tạo các mảng mới bằng toán tử ( .^ ) nh
sau:
>> g.^2 % Các phần tử của g
gg
g đợc luỹ thừa vớ số mũ là 2.
ans=
1 4 9 16
25 36 49 64
81 100 121 144
>> g.^-1 % Các phần tử của g
gg
g đợc luỳ thừa với số mũ là -1.
ans=
Dữ liệu minh hoạ: a = [a
1
a
2
... a
n
] , b = [b
1
b
2
... b
n
] , c là số vô hớng
Cộng với số đơn a+c = [a
1
+c a
2
+c ... a
n
+c]
Nhân với số đơn a*c = [a
1
*c a
2
*c ... a
n
*c]
Cộng mảng a+b = [ a
1
/ b
2
... a
n
/ b
n
]
Chia trái mảng a.\ b = [ a
1
\ b
1
a
2
\ b
2
... a
n
\ b
n
]
Luỹ thừa mảng
a.^c = [ a
1
^c a
2
^c ... a
n
^c ]
c.^a = [ c^a
Bởi vì có những ứng dụng chung của chúng mà MATLAB 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 hoặc 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, 5 cột với các phần tử là 0.
ans=
0 0 0 0 0
0 0 0 0 0
Tạo mảng có các phần tử là 1, kích cỡ bằng mảng g đã biết.
>> size(g) % Hàm trả về kích cỡ của mảng g.
ans=
3 4
>> ones(size(g))
ans=
1 1 1 1
1 1 1 1
1 1 1 1