ADMIN: nhanguyen@hcmut.edu.vn

3. Các phép toán trên ma trận

Mảng đơn (vector)

Cú pháp khai báo mảng đơn:

Vector hàng: >> x= [a  b  c  d]

Vector cột: >> x= [a;  b;  c;  d]

Địa chỉ của mảng:

Cú pháp truy cập giá trị phần tử tại vị trí nào đó của mảng: >> x(vitri)

Ví dụ: Có mảng x=[2 3 4 8 6 7]

>>x(1) 		      %phần tử thứ nhất của mảng, x(1)=2

Cú pháp truy cập giá trị nhiều phần tử của mảng: >> x(a:b)

Ví dụ: Có mảng x=[2 3 4 8 6 7]

>>x1=x(2:4)     %phần tử thứ 2 đến ptử thứ 4; x1=[3 4 8]
>>x2=x(2:2:5)  %phần tử thứ 2 đến ptử thứ 5 với bước nhảy là 2; x2=[3 8]

Cú pháp gán lại giá trị cho phần tử của mảng: >> x(vitri)=giatri

>>x(2)=5          %phần tử thứ 2 được gán lại = 5; x=[2 5 4 8 6 7]

Một số lệnh tạo mảng tự động:

Dạng lệnhChức năng
x=first:lastTạo vector hàng x bắt đầu là first, kết thúc nhỏ hơn hoặc bằng last, bước mặc định là 1
x=first:increment:lastTạo vector hàng x bắt đầu là first, kết thúc nhỏ hơn hoặc bằng last, bước là increment
x=linspace(first,last,n)Tạo vector hàng x bắt đầu là first, kết thúc bằng last, có n phần tử
x=logspace(first,last,n)Tạo vector hàng x bắt đầu là 10first, kết thúc bằng 10last, có n phần tử

Chuyển vector hàng thành vector cột và ngược lại: >> y=x’

>>x=[2 3 4 8 6 7] 
>>y=x'

Mảng 2 chiều (ma trận)

  • Cú pháp khai báo ma trận: >> x= [1 2 3 4; 5 6 7 8; … ]

Các phép toán ma trận với số đơn (+ – * /): Phép toán được thực hiện trên từng phần tử, trả về ma trận kết quả

dụ:  Có x=[1 2 3; 4 5 6]

>>x1=x*2      % kết quả x1=[2 4 6; 8 10 12]

Chú ý: Toán tử  .^ :  lũy thừa từng phần tử trong ma trận

  • Cú pháp truy cập giá trị phần tử tại vị trí nào đó của mảng hai chiều: >> x(vitrihang, vitricot)

Ví dụ: Có x=[2 3 4; 8 6 7]

>>x(1,2)		%phần tử hàng thứ nhất, cột thứ hai của mảng, x(1,2)=3

Cú pháp gán lại giá trị cho phần tử của mảng hai chiều: >> x(vitrihang, vitricot)=giatri

>>x(2,3)=5	%phần tử hàng thứ 2, cột 3 được gán lại = 5; x=[2 5 4; 8 6 5]
Các phép toán đối với các phần tử mảngDữ liệu minh họa: a=[a1  a2 … an]; b=[b1  b2 … bn], c: số hướng
Cộng với số đơna+c=[a1+c  a2+c … an+c]
Nhân với số đơna*c=[a1*c  a2*c … an*c]
Cộng mảnga+b=[a1+b1  a2+b2  … an+bn]
Nhân mảnga.*b=[a1*b1  a2*b2  … an*bn]
Chia phải mảnga./b=[a1/b1  a2/b2  … an/bn]
Chia trái mảnga.\b=[a1\b1  a2\b2  … an\bn]
Lũy thừa mảnga.^c=[a1^c  a2^c  … an^c] c.^a=[c^a1  c^a2  … c^an] a.^b=[a1^b1  a2^b2 … an^bn]

Các phép toán ma trận với ma trận (+ – ): Phép toán được thực hiện trên từng cặp phần tử tương ứng vị trí, trả về ma trận kết quả

Ví dụ: Có a=[1 2 3; 4 5 6] ; b=[2 3 4; 5 6 7]

>>c=a+b      % kết quả c=[3 5 7; 9 11 13]

Chú ý:

  • Toán tử  .* :  nhân các phần tử tương ứng 2 ma trận với nhau
  • Toán tử  ./ :  chia các phần tử tương ứng 2 ma trận với nhau
  • Toán tử  .\ :  chia trái các phần tử tương ứng 2 ma trận với nhau
  • Toán tử  .^ :  lũy thừa các phần tử tương ứng 2 ma trận với nhau
  • Toán tử  * :  nhân 2 ma trận với nhau (lưu ý kích thước)

Một số lệnh thao tác với ma trận

phápChức năng
ones(n)Tạo ma trận n x n với các phần tử là 1
ones(r,c)Tạo ma trận r x c với các phần tử là 1
eye(n)Tạo ma trận đơn vị kích thước n x n (đường chéo =1)
zeros(n)Tạo ma trận n x n với các phần tử là 0
zeros(r,c)Tạo ma trận r x c với các phần tử là 0
rand(n)Tạo ma trận n x n với các phần tử là số ngẫu nhiên
diag(a)Tạo ma trận đường chéo với các phần tử trên đường chéo lấy từ vector a
size(a)Trả về kích thước mảng a

Ví dụ thao tác trên ma trận:

>> A=[1 2 3 ; 4 5 6; 7 8 9]
>> A(3,3)=0

Ví dụ:

>> A(2:6)=1
>> A(:,4)=4

Ví dụ thao tác trên ma trận:

>>A=[1 2 3 ; 4 5 6; 7 8 9]
>>B=A(3:-1:1,1:3)  %cách khác B=A(3:-1:1,:)
>>C=[A  B(1:3,[1 3])]

Ví dụ thao tác trên ma trận:

>>A=[1 2 3 ; 4 5 6; 7 8 9]
>>B=A(1:2,2:3)  %trích từ ma trận [A]

Ví dụ thao tác trên ma trận:

>> C=[1 3]
>> B=A(C,C)  %trích từ ma trận [A]

Tìm kiếm trên ma trận

  • Tìm và trả về luận lý:
>> x=-4:4
>> x>1
>> x==1
>> abs(x)>1
  • Tìm và trả về giá trị:
>> x=-4:4
>> y=x(abs(x)>2)
>> y=x(x==1)
  • Tìm và trả về vị trí:
>> x=-4:4
>> k=find(abs(x)>1)
>> A=[1 2 3; 4 5 6; 7 8 9]
>> [a b]=find(A>5)
>> x=-4:4
>> k=find(x)	% ngầm hiểu tìm x(i)>0

Một số lệnh đặc biệt thao tác trên ma trận

  • Đảo ngược hàng hoặc cột
>> A=[1 2 3; 4 5 6; 7 8 9]
>> B=flipud(A)		% flip up-down 
>> C=fliplr(A)		% flip left-right 
  • Xoay 900 ma trận
>> A=[1 2 3; 4 5 6; 7 8 9]
>> D=rot90(A)		% rotate 90^0
>> D=rot90(A,2)		% rotate 2x90^0 
  • Chuyển mảng 1 chiều thành mảng 2 chiều
>> A=[1 2 3 4 5 6 7 8 9 10 11 12]	% A=1:12
>> B=reshape(A,3,4)		% size(B)=3x4
>> B=reshape(A,2,6) 		% size(B)=2x6
  • Lấy đường chéo ma trận
>> A=[1 2 3; 4 5 6; 7 8 9]
>> B=diag(A)
  • Tạo lại ma trận từ đường chéo
>> A=[1 2 3; 4 5 6; 7 8 9]
>> B=diag(A)
>> C=diag(B)
  • Lấy ma trận tam giác trên, dưới từ 1 ma trận
>> A=[1 2 3 4; 5 6 7 8; 9 10 11 12]	
>> B=triu(A)		% upper triangular part
>> C=tril(A) 		% lower triangular part

Ứng dụng ma trận trong đại số tuyến tính

  • Giải phương trình tuyến tính
>> A=[1 2 3; 4 5 6; 7 8 0]
>> b=[366; 804;351]
>> x=inv(A)*b
>> x=A\b
  • Nghịch đảo ma trận
>> A=[1 2 3; 4 5 6; 7 8 9]
>> B=inv(A)
  • Tính hạng ma trận
>> A=[1 2 3; 4 5 6; 7 8 9]
>> B=rank(A)
  • Tính định thức ma trận vuông
>> A=[1 2 3; 4 5 6; 7 8 9]
>> C=det(A)