Tải bản đầy đủ - 0 (trang)
6 Thao tác đối với mảng

6 Thao tác đối với mảng

Tải bản đầy đủ - 0trang

37

1

2

3

>> C = [ A B(:,[1 3])]

bên phải ma trận A.

C=

1

2

3

4

5

6

7

8

9

>> C = [1 3]

C=

1

3

>> B = A(C,C)

ma trËn A.

B=

1

3

7

9

>> B= A(:)

B=

1

4

7

2

5

8

3

6

9



>> B = B.'

tư chun vÞ chÊm.

B=

1

4

7

>> B = A;

>> B(:,2) = []

B=

1

3

4

6

7

9



% Tạo ma trận C bằng cách ghÐp ma trËn A vµ

% cét thø nhÊt, thø ba cđa ma trËn B vµo



7

4

1



9

6

3



% Dïng ma trËn C lµm chỉ số để tạo ma trận B Từ



% Tạo ma trËn cét B tõ ma trËn A.



% ChuyÓn ma trËn B thành ma trận hàng bằng toán

2



5



8



3



6



9



% Loại bỏ cột thø hai cđa ma trËn B.



Khi ta g¸n cét thø hai của ma trận B cho ma trận rỗng ([]) thì nó sẽ bị xoá, ma

trận còn lại sẽ rút bỏ đi hàng thứ hai.

>> B = B.'

B=

1

4

3

6

>> B(2,:) = []

B=

1

4

>> A(2,:) = B

trËn B.



7

9

7



% Thay hµng thø hai cđa ma trËn A b»ng ma



38

A=

1

2

1

4

7

8

>> B = A(:,[2

B=

2

2

4

4

8

8



3

7

9

2



2



2])



2

4

8



2

4

8



T¹o ma trËn B bằng cách tạo bốn cột giống cột thứ hai của ma trận A, số hàng

vẫn giữ nguyên bằng số hµng cđa ma trËn A.

>> A(2,2) = []

??? Indexed empty matrix assignment is not allowed.

ở đây MATLAB không cho phép xoá đi một phần tử của ma trận mà phải xoá

đi một cột hoặc một hàng.

>> B = A(4,:)

??? Index exeeds matrix dimension.

Ví dụ trên ma trận A không có bốn hàng, nên MATLAB thông báo nh trên.

>> B(1:2,:) = A

??? In an assignment A(matrix, :) = B, the number of columns in A

and B must be the same.

MATLAB chØ ra rằng bạn không thể gán một ma trận vào trong một ma trận khác

mà khác nhau về kích cỡ.

>> B = [1 4 7];

>> B(3:4,:) = A(2:3,:)

B=

1

4

7

0

0

0

1

4

7

7

8

9

Nhng ta cã thể gán hai hàng của ma trận A cho hai hµng cđa ma trËn B, khi ma

trËn A vµ ma trËn B cã cïng sè cét. Ma trËn B chØ có một hàng nên khi thêm

hàng thứ ba và hàng thứ t thì hàng thứ hai của ma trận B đợc mặc định cho

thêm các phần tử 0 vào.

>> G(1:6) = A(:,2:3)

G=

2

4

8



3



7



9



Từ phần tử thứ nhất đến phần tử thứ sáu của ma trận G đợc gán bằng cột thứ

hai và cột thứ ba của ma trận A.



39

Đôi khi để tiện lợi hơn ta chỉ dùng chỉ số đơn để truy nhập đến các

phần tử của mảng. Khi chỉ số đơn đợc dùng trong MATLAB thì thứ tự các phần

tử của mảng đợc tính bắt đầu từ phần tử đầu tiên của cột, tính hết cột thì

tính đến cột tiếp theo..

VÝ dô:

>> D = [1

D=

1

5

9

>> D(2)

ans=

5

>> D(5)

ans=

6

>> D(end)

ans=

12

>> D(4:7)

ans=

2



2



3



4; 5



6



7



8; 9



10



11



12]



2

3

4

6

7

8

10

11

12

% Phần tử thứ hai của mảng.

% Phần tử thứ năm của mảng ( cột 2, hàng 2 ).

% Phần tử cuối cùng của mảng.

% Từ phần tử thứ t đến phần tử thứ bẩy của ma trận.

6



10



3



Ngoài trờng hợp dùng địa chỉ dựa trên bảng chỉ số, chúng ta còn có thể

dùng địa chỉ dựa trên mảng logic_là kết quả từ các phép toán logic. Nếu kích

cỡ của mảng logic cân bằng với mảng tạo ra nó thì đó chính là địa chỉ của

mảng. Trong trờng hợp này thì phần tử True (1) đợc giữa lại và phần tử False (0)

bị bỏ đi

Ví dụ:

>> x = -3:3 % Tạo mảng dữ liệu.

x=

-3

-2

-1

0

1

2

3

>> abs(x)>1

ans=

1

1

0

0

0

1

1

Trả về một mảng logic với giá trị một tại những phần tử có trị tuyệt đối lớn hơn

một.

>>

y=



y = x( abs(x)>1)



-3

-2

2

3

Tạo mảng y bằng cách lấy những phần tử của x mà có trị tuyệt đối lín h¬n

mét.

>> y = x([1 1 0 0 0 1 1])

??? Index into matrix is negative or zero. See release notes on

changes to logical indices



40

Câu lệnh bị lỗi mặc dù abs(x)>1 vµ [1 1 0 0 0 1 1] cïng là vector nh nhau.

Trong trờng hợp này, [1 1 0 0 0 1 1] là một mảng số, không phải là mảng

logic. Vì vậy MATLAB cố đánh địa chỉ các phần tử có số chỉ số trong mảng [1

1 0 0 0 1 1] và câu lệnh bị lỗi vì không có phần tử 0. Tuy nhiên MATLAB

cung cấp hàm logical để chuyển đổi từ mảng số sang mảng logic

>> y = x(logical([1 1 0 0 0 1 1]))

y=

-3

-2

2

3

m¶ng logic làm việc với ma trận cũng nh là đối với vector:

>> B = [5 -3; 2 -4]

B=

5

-3

2

-4

>> x = abs(B)>2

x=

1

1

0

0

>> y = B(x)

5

-3

4

Tuy nhiên kết quả đợc chuyển thành vector cột vì không cách nào để định

nghĩa ma trận chỉ có ba phần tử. Địa chỉ của mảng A( r, c ). Địa chỉ một

mảng con trong mảng A, định nghĩa bằng các chỉ số vector của hàng thiết kế

trong r, chØ sè vector cña cét thiÕt kÕ trong c. A( r, : ). Địa chỉ một mảng con

trong mảng A, định nghĩa bằnh các chỉ số vector của hàng thiết kế trong r,

và tất cả các cột của A. A( : , c). Địa chỉ một mảng con trong mảng A, định

nghĩa bằng tất cả các hàng của A, chỉ số vector của cột đợc thiết kế trong c.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 mảng A, định nghĩa bởi mảng logic x. x

phải cùng kích cỡ với A.

6.7 Tìm kiếm mảng con

Nhiều khi chóng ta mn biÕt c¸c chØ sè hay danh s¸ch các chỉ số của

những phần tử của một mảng mà nó thoả mãn một biểu thức quan hệ, trong

MATLAB để thực hiện việc đó ta sử dụng hàm find, hàm này trả về danh sách

con chỉ số tại những phần tử mà biểu thức quan hệ của chúng là đúng:

>> x = -3:3

x=

-3

-2

-1

0

1

2

3

>> k = find(abs(x)>1)

k=

1

2

6

7

tìm những chỉ số tại những vị trí mà tại đó abs(x)>1



41

y = x(k)

y=

-3

-2

2

3

Tạo mảng y, dùng các chỉ số trong mảng k.

Hàm find cũng cã thĨ sư dơng trong ma trËn:

>> A = [1 2 3; 4 5 6; 7 8 9]

A=

1

2

3

4

5

6

7

8

9

>> [i,j] = find(A>5)

i=

3

3

2

3

j=

1

2

3

3

ở đây i là chỉ số hàng, còn j là chỉ số cột; giữa i và j có mối quan hệ tơng ứng để chỉ những vị trí mà tại ®ã biĨu thøc quan hƯ lµ ®óng.

Chó ý: khi MATLAB trả lại hai hoặc nhiều biến, chúng đợc đặt trong dấu

ngoặc vuông, và đợc đặt bên trái dấu bằng. Cú pháp này khác với cú pháp thao

tác đối với mảng ở trên, khi mà [i,j]đợc đặt bên phải dấu bằng, và nó xây

dựng lên một mảng mà j đợc kết nối vào bên phải dấu bằng.

Bảng dới đây tóm tắt dạng lệnh của phần tìm kiếm mảng:

Tìm kiếm mảng

i = find(x)

Trả lại các chỉ số của mảng x 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.

6.8 So sánh mảng

Chúng ta có thể dùng hàm isequal so sánh hai mảng. Thí dụ:

>> A = [1 2 3; 4 5

A=

1

4

7

2

5

8

3

6

9

>> B = A.*(-1).^A

B=

-1

4

-7

2

-5

8



6; 7



8



9]’



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

6 Thao tác đối với mảng

Tải bản đầy đủ ngay(0 tr)

×