Chương 3. Các phép toán trên mảng 32 Phan Thanh Tao - 2004 Các hàm any và all là hữu ích trong việc liên kết với các phép toán logic. Nếu x là vectơ 0-1 thì any(x) trả về 1 nếu phần tử bất kỳ của x khác không, và ngược lại trả về 0. Hàm all(x) trả về 1 chỉ nếu tất cả các phần tử của x khác không. Các hàm này đặc biệt hữu ích trong câu lệnh if, if all(A < .5) thực hiện các lệnh end M ột lệnh if muốn trả lời cho một điều kiện đơn giản thì không phải là một vectơ có thể nhầm lẫn. Đối với các đối số là ma trận thì các hàm any và all làm việc trên từng cột và trả về một vectơ dòng với kết quả của mỗi cột. áp dụng hàm hai lần, như any(any(A)) luôn thu gọn ma trận về một điều kiện vô hướng. Sau đây là bảng tóm tắt các hàm quan hệ và logic của MATLAB: Hàm quan hệ và logic any Điều kiện logic all Điều kiện logic find Tìm chỉ số của các điều kiện logic exist Kiểm tra nếu các biến tồn tại isnan Dò tìm các giá trị NaN finite Dò tìm các giá trị vô định isempty Dò tìm các ma trận rỗng isstr Dò tìm các biến xâu chữ strcmp So sánh các biến xâu chữ 3.6. Các hàm toán sơ cấp Một tập hợp các hàm toán sơ cấp được áp dụng vào mảng trên cơ sở từng phần tử. Ví dụ, A = [ 1 2 3; 4 5 6 ] B = fix(pi*A) C = cos(pi*B) Chương 3. Các phép toán trên mảng 33 Phan Thanh Tao - 2004 cho ra A = 1 2 3 4 5 6 B = 3 6 9 12 15 18 C = -1 1 -1 1 -1 1 Các hàm có thể sử dụng gồm các hàm lượng giác và các hàm sơ cấp thông dụng: Hàm lượng giác sin Hàm sin cos Hàm cosin tan Hàm tang asin Hàm arcsin acos Hàm arccos atan Hàm arctang atan2 Hàm arctang sinh Hàm sin hyperbol cosh Hàm cosin hyperbol tanh Hàm tang hyperbol asinh Hàm arcsin hyperbol acosh Hàm arccos hyperbol atanh Hàm arctang hyperbol Chương 3. Các phép toán trên mảng 34 Phan Thanh Tao - 2004 Hàm toán sơ cấp abs Trị tuyệt đối hoặc argument số phức angle Góc pha sqrt Căn bậc hai real Phần thực imag Phần ảo conj Liên hợp của số phức round Làm tròn về số nguyên gần nhất fix Làm tròn về phía số 0 floor Làm tròn về phía -∞ ceil Làm tròn về phía ∞ sign Hàm dấu rem Phần dư hoặc môđun exp Mũ cơ số e log Logarit tự nhiên log10 Logarit cơ số 10 3.7. Các hàm toán học đặc biệt Một số hàm đặc biệt cung cấp nhiều khả năng nâng cao: Hàm đặc biệt bessel Hàm Bessel gamma Hàm gamma và gamma bù rat Hàm xấp xỉ erf Hàm lỗi invert Hàm đảo lỗi ellipk Hàm tích phân bù elliptic loại I ellipj Hàm elliptic Jacôbiên Giống như các hàm sơ cấp, chúng thực hiện trên từng phần tử khi nhập ma trận. Xem phần tham khảo để biết thêm thông tin. ******************* Chương 4. Thao tác trên véctơ và ma trận 35 Phan Thanh Tao - 2004 Chương 4. THAO TÁC TRÊN VECTƠ VÀ MA TRẬN Các công cụ về mô tả chỉ số của MATLAB cho phép thực hiện về dòng, về cột, về từng phần tử riêng biệt và từng phần của ma trận. Tâm điểm của việc mô tả chỉ số là vectơ, được phát sinh bằng cách dùng "Ký pháp Hai chấm". Vectơ và việc mô tả chỉ số là các thao tác hay dùng trong MATLAB và làm cho nó thực hiện các thao tác trên dữ liệu phức tạp khá hiệu lực. 4.1. Cách phát sinh vectơ Dấu hai chấm, :, là ký tự quan trọng trong MATLAB. Lệnh x = 1:5 phát sinh ra một vectơ dòng chứa các số từ 1 đến 5 theo chiều tăng đơn vị. Nó cho ra x = 1 2 3 4 5 Các cách tăng khác có thể dùng được. y = 0:pi/4:pi kết quả là y = 0.0000 0.7854 1.5708 2.3562 3.1416 Có thể thay đổi theo đơn vị âm. z = 6:-1:1 cho ra z = 6 5 4 3 2 1 Ký pháp hai chấm cho phép phát sinh các bảng một cách dễ dàng. Để lấy một bảng sắp xếp theo chiều đứng thì chuyển v ị vectơ dòng nhận được từ ký pháp hai chấm, tính toán cột giá trị, rồi định dạng ma trân từ hai cột. Ví dụ x = (0.0 : 0.2 : 3.0)'; Chương 4. Thao tác trên véctơ và ma trận 36 Phan Thanh Tao - 2004 y = exp(-x) .*sin(x); [x y] cho ra ans = 0.0000 0.0000 0.2000 0.1627 0.4000 0.2610 0.6000 0.3099 0.8000 0.3223 1.0000 0.3096 1.2000 0.2807 1.4000 0.2430 1.6000 0.2018 1.8000 0.1610 2.0000 0.1231 2.2000 0.0896 2.4000 0.0613 2.6000 0.0383 2.8000 0.0204 3.0000 0.0070 Các hàm phát sinh vectơ khác gồm linspace, cho phép số thực tốt hơn là cách tăng như đã chỉ định, k = linspace(-pi,pi,4) k = -3.1416 -1.0472 1.0472 3.1416 Chương 4. Thao tác trên véctơ và ma trận 37 Phan Thanh Tao - 2004 và hàm logspace phát sinh vectơ logarit đồng đều. 4.2. Mô tả chỉ số Các phần tử riêng biệt của ma trận có thể được tham chiếu bằng cách đưa vào chỉ số trong cặp ngoặc đơn. Một biểu thức dùng làm chỉ số được làm tròn thành số nguyên gần nhất. Ví dụ, cho ma trận A : A = 1 2 3 4 5 6 7 8 9 thì lệnh A(3,3) = A(1,3) + A(3,1) kết quả là A = 1 2 3 4 5 6 7 8 10 Một chỉ số có thể là một vectơ. Nếu X và V là các vectơ thì X(V) là [ X(V(1), X(V(2), , X(V(n)) ]. Đối với các ma trận chỉ số vectơ cho phép truy cập đến các ma trận con liên tục và không liên tục. Ví dụ, giả sử A là ma trận cấp 10. Thì A(1:5,3) là ma trận con cỡ 5x1, hay là vectơ cột gồm 5 phần tử đầu trên cột thứ 3 của ma trận A. Tương tự, A(1:5, 7:10) là ma trận con cỡ 5x4 gồm các phần tử từ 5 dòng đầu và 4 cột cuối. Dùng chính d ấu hai chấm đặt tại vị trí mô tả chỉ số biểu hiện tất cả các dòng hoặc các cột tương ứng. Ví dụ, Chương 4. Thao tác trên véctơ và ma trận 38 Phan Thanh Tao - 2004 A(:,3) là cột thứ 3 và A(1:5,:) là 5 cột đầu. Hiệu lực khá tinh vi là nhận được từ việc tham chiếu ma trận con ở cả hai phía của lệnh gán. Ví dụ, A(:,[3 5 10]) = B(:,1:3) thay các cột thứ 3, 5 và 10 của A với 3 cột đầu của B. Nói chung, nếu v và w là các vectơ với các thành phần nguyên thì A(v,w) là ma trận nhận được bằng cách lấy các phần t ử của A với chỉ số dòng trong v và chỉ số cột trong w. Vì vậy A(:,n:-1:1) đảo lại các cột của A và v = 2:2:n; w = [3 1 4 1 6]; A(v,w) là hợp pháp, nhưng có lẽ đáng ngờ. Một đặc điểm nữa cũng khá hữu ích là A(:). ở vế phải câu lệnh gán, A(:) biểu hiện tất cả các phần tử của A được gióng thành một vectơ c ột. Ví dụ A = [ 1 2; 3 4; 5 6 ] b = A(:) kết quả là A = 1 2 Chương 4. Thao tác trên véctơ và ma trận 39 Phan Thanh Tao - 2004 3 4 5 6 b = 1 2 3 4 5 6 Ở vế trái câu lệnh gán, A(:) có thể được dùng để đổi lại cỡ ma trận. Để làm điều này, trước hết A phải có. Sau đó A(:) biểu hiện ma trận cùng cỡ với A, nhưng với nội dung mới lấy bên vế phải. Ví dụ, A ở trên cỡ 3X2, vì vậy A(:) = 11:16 đổi 6 phần tử của vectơ dòng thành ma trận cỡ 3X2, A = 11 14 12 15 13 16 4.3. Mô tả chỉ số bằng vectơ 0-1 Có thể dùng các vectơ 0-1, thường được tạo ra bằng các phép toán quan hệ, để tham chiếu các ma trận con. Giả sử A là ma trận cỡ mxn và L là vectơ m chiều gồm các phần tử 0 và 1. Thì A(L,:) chỉ định các dòng của A ứng với các phần tử 1 của L. Sau đây là các cách trích ra, các phần tử lớn hơn 3 lần độ lệch chuẩn bị xóa trong vectơ: x = x(x<=3*std(x)); Tương tự, L = X(:,3)>100; X = X(L,:); . 1 2 3; 4 5 6 ] B = fix(pi*A) C = cos(pi*B) Chương 3. Các phép toán trên mảng 33 Phan Thanh Tao - 2004 cho ra A = 1 2 3 4 5 6 B = 3 6 9 12 15 18 C = -1 1 -1 1 -1 1 Các. 10. Thì A(1 :5, 3) là ma trận con cỡ 5x1, hay là vectơ cột gồm 5 phần tử đầu trên cột thứ 3 của ma trận A. Tương tự, A(1 :5, 7:10) là ma trận con cỡ 5x4 gồm các phần tử từ 5 dòng đầu và 4. định, k = linspace(-pi,pi,4) k = -3 .1416 -1 .0472 1.0472 3.1416 Chương 4. Thao tác trên véctơ và ma trận 37 Phan Thanh Tao - 2004 và hàm logspace phát sinh vectơ logarit đồng đều. 4.2.