Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

260

description

Khá đầy đủ những cơ bản về Matlab, được trình bày khoa học.

Transcript of Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Page 1: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng
Page 2: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Giới thiệu 1

Phan Thanh Tao - 2004

GIỚI THIỆU Matlab là một phần mềm toán học của hãng Mathworks để tính toán trên các số và có tính trực quan rất cao. Matlab đã qua nhiều phiên bản, giáo trình này giới thiệu phiên bản 7.0 (release 14). Matlab là viết tắt của Matrix Laboratory. Matlab làm việc chủ yếu với các ma trận. Ma trận cỡ mxn là bảng số chữ nhật gồm mxn số được sắp xếp thành m hàng và n cột. Trường hợp m=1 hoặc n=1 thì ma trận trở thành vectơ dòng hoặc cột; trường hợp m=n=1 thì ma trận trở thành một đại lượng vô hướng. Nói chung, Matlab có thể làm việc với nhiều kiểu dữ liệu khác nhau. Với xâu chữ (chuỗi ký tự) Matlab cũng xem là một dãy các ký tự hay là dãy mã số của các ký tự. Matlab dùng để giải quyết các bài toán về giải tích số, xử lý tín hiệu số, xử lý đồ họa, … mà không phải lập trình cổ điển. Hiện nay, Matlab có đến hàng ngàn lệnh và hàm tiện ích. Ngoài các hàm cài sẵn trong chính ngôn ngữ, Matlab còn có các lệnh và hàm ứng dụng chuyên biệt trong các Toolbox, để mở rộng môi trường Matlab nhằm giải quyết các bài toán thuộc các phạm trù riêng. Các Toolbox khá quan trọng và tiện ích cho người dùng như toán sơ cấp, xử lý tín hiệu số, xử lý ảnh, xử lý âm thanh, ma trận thưa, logic mờ,… Người dùng cũng có thể tạo nên các hàm phục vụ cho chuyên môn của mình, lưu vào tệp M-file để dùng về sau. Cần tính toán bằng công thức thì có thể dùng Toolbox SYMBOLIC. Để có được f=’cos(x)’ bằng cách lấy đạo hàm của g=’sin(x)’ thì dùng lệnh f=diff(‘sin(x)’). Ngược lại để có g là tích phân bất định của f thì dùng lệnh g=int(f). Matlab còn có giao diện đồ họa khá đẹp mắt và dể sử dụng. Người dùng có thể tính toán và tạo nên các hình ảnh đồ họa 2, 3 chiều cho trình ứng dụng của mình. Với các hình ảnh, nếu không chỉ định vè canh trục, phối màu thì Matlab thực hiện tự động một cách khá phù hợp. Vì tính mạnh mẽ để trợ giúp giải nhanh các bài toán kỹ thuật, chúng tôi cố gắng biên soạn tài liệu này để phục vụ một ít kiến thức cơ bản cho bạn đọc. Tuy nhiên, trên cơ sở đó bạn đọc có thể tự khai thác thêm các thành phần dùng riêng cho minh trong các Toolbox và Simulink. Lần đầu xuất bản nên không thể tránh khỏi thiếu sót. Rất mong ý kiến đóng góp quý báu của bạn đọc. Đà Nẵng, ngày 20/02/2004 Tác giả Phan Thanh Tao

Page 3: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Giới thiệu 2

Phan Thanh Tao - 2004

Hướng dẫn cài đặt MATLAB 7.0 Bạn hãy đưa đĩa CD vào ổ đĩa, chương trình autorun sẽ chạy và trên màn hình xuất hiện

Page 4: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Giới thiệu 3

Phan Thanh Tao - 2004

Ấn nút Next để tiếp tục.

Xuất hiện màn hình yêu cầu nhập thông tin cá nhân và mật khẩu bản quyền.

Page 5: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Giới thiệu 4

Phan Thanh Tao - 2004

Bạn gọi chương trình My Computer để mở đĩa CD và chạy chương trình \crack\keygen.exe để phát sinh mã mật khẩu.

Ấn Ctrl+C để chép mật khẩu sang Clipboard. Rồi đóng cửa số này lại.

Page 6: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Giới thiệu 5

Phan Thanh Tao - 2004

Quay lại cửa sổ cài đặt.

Vào ô (PLP) ấn Ctrl+V để dán mã mật khẩu vào.

Ấn nút Next để tiếp tục.

Page 7: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Giới thiệu 6

Phan Thanh Tao - 2004

Đánh dấu Yes để đồng ý về bản quyền, rồi ấn nút Next để tiếp tục.

Để cài đặt đầy đủ, đánh dấu Custom và ấn nút Next để tiếp tục.

Page 8: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Giới thiệu 7

Phan Thanh Tao - 2004

Ấn nút Next để tiếp tục.

Nếu cài đặt lần đầu trên máy thì chưa có thư mục MATLAB7, hỏi có chấp nhận tạo thư mục mới. Ấn Yes để tiếp tục.

Page 9: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Giới thiệu 8

Phan Thanh Tao - 2004

Ấn nút Next để tiếp tục.

Ấn nút Install để bắt đầu cài đặt.

Page 10: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Giới thiệu 9

Phan Thanh Tao - 2004

Xem hướng dẫn cài thêm sau này. Ấn nút Next để tiếp tục.

Ấn nút Finish để hoàn thành việc cài đặt.

Page 11: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Giới thiệu 10

Phan Thanh Tao - 2004

Bắt đầu vào môi trường MATLAB. Bạn nên chạy các chương trình mẫu để xem bằng cách ấn nút Demos hoặc nhập lệnh Demo ở dòng lệnh, sau dấu nhắc >>.

Page 12: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 1. Các khái niệm cơ bản 11

Phan Thanh Tao - 2004

Chương 1. CÁC KHÁI NIỆM CƠ BẢN MATLAB chỉ làm việc chủ yếu với các loại đối tượng là ma trận số có thể là

số phức. Trong trường hợp đặc biệt, có thể là ma trận cấp 1 là các vô hướng, và các ma trận dòng hoặc ma trận cột là các vectơ.

Hãy bắt đầu với cách nhập ma trận cho MATLAB.

1.1. Nhập ma trận đơn giản

Ma trận có thể nhập cho MATLAB bằng nhiều cách: - Nhập danh sách rõ ràng các phần tử. - Phát sinh bằng các lệnh và hàm gắn liền. - Tạo ra từ siêu tệp (M-file). - Nạp từ các tệp dữ liệu bên ngoài.

Ngôn ngữ MATLAB không chứa các lệnh khai báo kích thước hoặc khai báo kiểu. Việc lưu trữ là tự động.

Cách dễ nhất của việc nhập ma trận là nhập danh sách rõ ràng các phần tử. Danh sách các phần tử cách nhau ký tự trống hoặc dấu phẩy, đặt trong cặp ngoặc vuông, [ và ], và dùng dấu chấm phẩy( ; ) để biểu hiện kết thúc dòng. Ví dụ, nhập lệnh

A = [ 1 2 3; 4 5 6; 7 8 9 ] kết quả xuất là A = 1 2 3 4 5 6 7 8 9

Ma trận A được lưu để sử dụng về sau .

Ma trận lớn có thể được tách ra thành nhiều dòng, sang dòng thay cho dấu chấm phẩy. Mặc dù ít cần ma trận kích thước này, nhưng ma trận trên cũng có thể tách ra thành 3 dòng nhập như sau

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

Page 13: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 1. Các khái niệm cơ bản 12

Phan Thanh Tao - 2004

Các ma trận có thể nhập từ tệp với tên mở rộng là ".m" . Nếu tệp có tên là gena.m chứa ba dòng văn bản

A = [ 1 2 3 4 5 6 7 8 9 ] thì lệnh gena đọc tệp và phát sinh ra ma trận A.

Lệnh load có thể đọc các ma trận phát sinh từ các phần khác trước đó của MATLAB hoặc các ma trận ở dạng ASCII xuất từ các chương trình khác. Sẽ biết thêm sau này.

1.2. Các phần tử của ma trận

Các phần tử của ma trận có thể là biểu thức MATLAB bất kỳ; ví dụ, lệnh

x = [ -1.3 sqrt(3) (1+2+3)*4/5 ] kết quả là x = -1.3000 1.7321 4.8000

Các phần tử riêng biệt của ma trận có thể được tham chiếu với các chỉ số bên trong cặp ngoặc đơn, ( và ). Tiếp ví dụ trên, lệnh

x(5) = abs(x(1)) cho ra x = -1.3000 1.7321 4.8000 0.0000 1.3000

Lưu ý rằng kích thước của x được tự động tăng để phù hợp với các phần tử mới, và các phần tử trong khoảng không xác định được đặt giá trị không.

Ma trận lớn có thể được xây dựng bằng cách dùng các ma trận nhỏ như các phần tử. Ví dụ, có thể đưa thêm một dòng khác vào ma trận A với lệnh

r = [ 10 11 12 ]; A = [ A ; r ] kết quả là A = 1 2 3 4 5 6 7 8 9 10 11 12

Page 14: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 1. Các khái niệm cơ bản 13

Phan Thanh Tao - 2004

Các ma trận nhỏ có thể được trích ra từ các ma trận lớn bằng cách dùng dấu hai chấm, : . Ví dụ, lệnh

A = A(1:3,:);

lấy ba dòng đầu và tất cả các cột của ma trận A hiện thời để đưa ma trận A về giá trị ban đầu. Sẽ biết thêm về dấu hai chấm sau này.

1.3. Câu lệnh và biến

MATLAB là ngôn ngữ biểu thức. Các biểu thức được đánh vào bởi người dùng, được thông dịch và ước lượng bởi hệ MATLAB. Các lệnh MATLAB thường có dạng:

variable = expression

hoặc đơn giản

expression variable: tên biến, expression: biểu thức.

Các biểu thức được cấu thành từ các toán tử và các ký tự đặc biệt khác, từ các hàm, và từ các tên biến. Việc ước lượng các biểu thức cho ra một ma trận, sau đó hiển thị trên màn hình và gán vào biến để sử dụng về sau. Nếu tên biến và dấu = bị bỏ qua thì một biến có tên là ans, viết tắt chữ "answer" ( trả lời ), được tự động tạo ra. Ví dụ, đánh vào

1900/81 cho ra ans =

23.4568

Một câu lệnh được kết thúc bình thường với ký tự sang dòng hay phím <Enter>. Tuy nhiên, nếu ký tự cuối cùng của câu lệnh là dấu chấm phẩy thì việc in ra kết quả được hủy, nhưng lệnh vẫn được thực hiện. Điều này là hữu ích trong các siêu tệp M-file ( biết thêm sau này) và trong trường hợp kết quả đủ lớn không cần quan tâm từng số. Ví dụ, lệnh

p = conv(r,r);

tích chập các số trong r với chính chúng nhưng không hiển thị kết quả.

Page 15: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 1. Các khái niệm cơ bản 14

Phan Thanh Tao - 2004

Nếu biểu thức quá phức tạp để câu lệnh không thể đặt gọn trên một dòng thì có thể dùng dấu tĩnh lược (...) tiếp theo là ký tự sang dòng để biểu hiện câu lệnh được tiếp tục trên dòng tiếp theo. Ví dụ

s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 ... - 1/8 + 1/9 - 1/10 + 1/11 - 1/12;

tính tổng riêng của chuỗi điều hòa, gán tổng vào biến s, nhưng không in ra gì cả. Các ký tự trống quanh các dấu +, - là tùy chọn nhưng được đưa vào đây để dễ đọc.

Các tên biến, tên hàm được định dạng bằng một chữ viết, tiếp theo là số bất kỳ các chữ viết và chữ số ( hoặc dấu nối ). Chỉ có 19 ký tự đầu được nhớ.

MATLAB là ngôn ngữ nhạy cảm; nó thường phân biệt chữ hoa/chữ thường, bởi vậy a và A không phải là tên của cùng một biến. Tất cả các tên hàm phải là chữ thường; lệnh inv(A) sẽ lấy ngịch đảo của ma trận A, nhưng lệnh INV(A) tham chiếu đến một hàm không được định nghĩa: Tuy nhiên, lệnh casesen làm cho MATLAB không phân biệt chữ hoa/chữ thường. Trong chế độ này INV(a) là lấy ma trận đảo của nó.

1.4. Cách lấy thông tin vùng làm việc

Các lệnh trong các ví dụ cho đến bây giờ tạo ra các biến được lưu trong vùng làm việc của MATLAB. Thực hiện lệnh

who liệt kê các biến trong vùng làm việc:

your variables are:

A ans p r s x

leaving 291636 bytes of memory free

ở đây trình bày 6 biến phát sinh bởi các ví dụ, kể cả biến ans. Để biết thêm chi tiết về kích thước của mỗi biến hiện thời, dùng lệnh whos, cũng với ví dụ, cho ra

Name size total Complex

A 3 by 3 9 No ans 1 by 1 1 No p 1 by 5 5 No r 1 by 3 3 No s 1 by 1 1 No x 1 by 5 5 No

Page 16: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 1. Các khái niệm cơ bản 15

Phan Thanh Tao - 2004

Grand total is (24*8) = 192 bytes,

leaving 291636 bytes of memory free.

Mỗi phần tử của ma trận thực đòi hỏi 8 byte bộ nhớ, bởi vậy ma trận A cấp 3 dùng 72 byte và tất cả các biến dùng tổng cọng 192 byte. Tổng số không gian bộ nhớ tự do còn lại phụ thuộc vào từng loại máy khác nhau.

Biến ans cùng với một biến không liệt kê eps có ý nghĩa đặc biệt với MATLAB. Chúng là các biến cố định không thể xóa.

Biến eps (epsilon) dùng để xác định những giá trị gần kỳ dị (suy biến) và hạng ma trận. Giá trị khởi tạo của nó là khoảng cách từ 1.0 đến số thập phân lớn nhất tiếp theo. Đối với kỹ thuật số học IEEE (Institute of Electrical and Electronic Engineers) dùng trên các máy cá nhân và các máy trạm, thì

eps = 2-52

khoảng 2.22 x 10-16. eps có thể được đặt lại với giá trị khác, kể cả giá trị 0.

1.5. Số và biểu thức số

Các số dùng ký pháp thập phân qui ước với dấu chấm và dấu trừ đứng trước là tùy chọn. Có thể đưa vào cuối dạng khoa học ( lũy thừa 10 ). Sau đây là vài ví dụ về các số hợp pháp:

3 -99 0.0001 9.6397238 1.6040E-10 6.022252e23

Trên các máy dùng kỹ thuật số học chấm động IEEE thì độ chính xác tương đối của các số là eps, khoảng 16 chữ số có nghĩa. Miền giá trị khoảng 10-308 đến 10308.

Các biểu thức có thể được tạo ra bằng cách dùng các phép toán số học thông thường và các qui tắc ưu tiên:

+ cộng - trừ * nhân / chia phải \ chia trái ^ lũy thừa

Page 17: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 1. Các khái niệm cơ bản 16

Phan Thanh Tao - 2004

Các phép toán trên ma trận để cho tiện có hai ký hiệu cho phép chia. Các biểu thức vô hướng 1/4 và 4\1 có cùng giá trị số, chính là 0.25. Các cặp ngoặc đơn được dùng theo cách thông thường để xen vào việc ưu tiên của các phép toán số học.

Hầu hết các hàm toán sơ cấp thông thường trên các tính toán khoa học là các hàm cài sẵn của MATLAB, như abs, sqrt, log, và sin, ... Có thể thêm vào các hàm một cách dễ dàng với các siêu tệp M-file. Phần sau có một danh sách khá đầy đủ các hàm.

Một số các hàm cài sẵn đơn giản trả về các giá trị đặc biệt thường dùng. Hàm pi trả về số π, chương trình tính trước, đó là 4*atan(1). Một cách gọi khác để phát sinh số π là

imag(log(-1))

Hàm inf, viết tắt chữ infinity ( vô định ), được thấy trên rất ít hệ tính toán hoặc ngôn ngữ lập trình. Trên một số máy, nó được tạo ra bởi kỹ thuật số học IEEE cài trong bộ đồng xử lý toán học (coprocessor). Trên các máy khác, phần mềm chấm động được đưa vào để mô phỏng đồng xử lý toán học. Một cách để phát sinh giá trị trả về bởi hàm inf là

s = 1/0

kết quả là s =

∞ Warning: Divide by zero.

Trên các máy với kỹ thuật số học IEEE, việc chia cho số không không dẫn đến điều kiện lỗi hoặc kết thúc hoạt động. Cho ra một thông báo khuyến cáo và một giá trị đặc biệt có thể xử lý trong việc tính toán sau đó.

Biến NaN là một số IEEE quan hệ với hàm inf, nhưng có các đặc tính khác. Nó là viết tắt chữ "Not a Number" ( không phải là một số ) và được cho ra bởi các việc tính toán như inf/inf hoặc 0/0.

1.6. Số phức và ma trận phức

Số phức được dùng trong tất cả các phép toán và các hàm của MATLAB. Số phức được nhập bằng các hàm đặc biệt là i và j. Vài người có thể dùng

z = 3 + 4*i

trong khi người khác lại thích dùng

Page 18: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 1. Các khái niệm cơ bản 17

Phan Thanh Tao - 2004

z = 3 + 4*j

Một ví dụ khác là

w = r*exp(i*theta)

Có ít nhất hai cách thuận tiện để nhập ma trận phức. Chúng được minh họa bởi các lệnh

A = [ 1 2; 3 4 ] + i*[ 5 6; 7 8 ]

và A = [ 1+5*i 2+6*i; 3+7*i 4+8*i ]

cho ra cùng kết quả. Khi các số phức được nhập như các phần tử của ma trận bên trong cặp ngoặc vuông, thì điều quan trọng là tránh mọi khoảng trống, vì một biểu thức như 1 + 5*i với ký tự trống quanh dấu + biểu hiện hai số riêng biệt. ( Giống như thế cho số thực; một ký tự trống trước phần mũ trong 1.23 e-4 gây ra lỗi ).

Tên hàm cài sẵn có thể dùng như tên biến; trong trường hợp này hàm gốc trở nên không dùng được bên trong vùng làm việc hiện thời (hoặc hàm M-file cục bộ ) cho đến khi biến bị xóa. Nếu dùng i và j là tên các biến, và đè lên các giá trị này, thì một đơn vị phức mới được phát sinh và sử dụng theo cách thông thường:

ii = sqrt(-1)

z = 3 + 4*ii

1.7. Dạng thức xuất

Kết quả của mọi lệnh gán của MATLAB được hiển thị trên màn hình, gán cho biến chỉ định hoặc cho ans nếu không cho biến. Dạng thức hiển thị số có thể điều khiển bằng lệnh format. Lệnh format chỉ ảnh hưởng đến cách hiển thị ma trận chứ không ảnh hưởng đến việc tính toán và lưu chúng ( MATLAB thực hiện tất cả các tính toán theo độ chính xác kép "double" ).

Nếu tất cả các phần tử của ma trận đúng là số nguyên thì ma trận được hiển thị theo dạng không có phần thập phân. Ví dụ,

x = [ -1 0 1 ]

kết quả luôn là x =

-1 0 1

Page 19: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 1. Các khái niệm cơ bản 18

Phan Thanh Tao - 2004

Nếu ít nhất một phần tử của ma trận không là số nguyên thì có một số cách có thể hiển thị. Dạng ngầm định, gọi là dạng short, trình bày khoảng 5 chữ số có nghĩa. Các dạng khác trình bày nhiều chữ số hơn hoặc dùng dạng khoa học. Ví dụ, giả sử x = [ 4/3 1.2345e-6 ]

Các dạng thức, và kết quả xuất cho vectơ này, là:

Dạng thức short 1.3333 0.0000

Dạng thức short e 1.3333E+000 1.2345E-006

Dạng thức long 1.333333333333338 0.000001234500000

Dạng thức long e 1.333333333333338E+000 1.234500000000003E-006

Dạng thức hex 3FF555555555555 3EB4B6231AFBD271

Dạng thức + + +

Đối với các dạng long thì chữ số cuối cùng có thể xuất hiện không đúng, nhưng việc xuất ra đúng là một biểu hiện độ chính xác của số nhị phân lưu trong máy.

Với các dạng short và long, nếu phần tử lớn nhất của ma trận lớn hơn 1000 hoặc nhỏ hơn 0.001 thì một thừa số chung được áp dụng cho toàn bộ ma trận khi hiển thị nó. Ví dụ, lệnh

x = 1.e20*x

nhân x cho 1020 và kết quả hiển thị

x =

1.0E+020 *

1.3333 0.0000

Dạng thức + là cách cô đọng để hiển thị các ma trận lớn. Các ký hiệu +, - và ký tự trống được hiển thị cho các phần tử dương, âm và bằng không.

Page 20: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 1. Các khái niệm cơ bản 19

Phan Thanh Tao - 2004

Lệnh cuối cùng, format compact, bỏ nhiều ký tự sang dòng xuất hiện giữa các hiển thị về ma trận và cho phép nhiều thông tin hiện trên màn hình.

1.8. Công cụ trợ giúp

Công cụ trợ giúp cung cấp thông tin trực tiếp về hầu hết các vấn đề của MATLAB. Để xem danh sách các vấn đề trợ giúp, đánh vào lệnh

help

Để lấy về một vấn đề chỉ định, đánh vào help topic.( topic là vấn đề cần trợ giúp ). Ví dụ, lệnh

help eig

cung cấp thông tin về cách sử dụng hàm giá trị riêng,

help [

trình bày cách dùng các dấu ngoặc vuông để nhập ma trận, và

help help

là tham khảo chính nó, nhưng làm việc tốt đẹp.

1.9. Thoát và lưu vùng làm việc

Để thoát MATLAB, đánh vào lệnh quit hoặc exit. Việc kết thúc quá trình làm việc của MATLAB làm cho các biến trong vùng làm việc bị mất. Trước khi thoát, vùng làm việc có thể được lưu lại để dùng về sau bằng cách đánh vào lệnh

save

Lệnh này lưu tất cả các biến vào tệp có tên là matlab.mat. Khi gọi MATLAB lần sau, vùng làm việc có thể được phục hồi từ tệp matlab.mat bằng lệnh

load

Các lệnh save và load có thể dùng với các tên tệp khác, hoặc chỉ lưu các biến đã chọn. Lệnh save temp lưu các biến hiện thời vào tệp có tên là temp.mat. Lệnh

save temp X

chỉ lưu biến X, trong khi lệnh

save temp X Y Z

Page 21: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 1. Các khái niệm cơ bản 20

Phan Thanh Tao - 2004

lưu X, Y, và Z.

Lệnh load temp lấy lại tất cả các biến từ tệp temp.mat. Các lệnh load và save cũng có thể dùng cho việc nhập và xuất các tệp dữ liệu dạng ASCII, xem phần tham khảo để biết thêm chi tiết.

1.10. Các hàm

Phần lớn tính năng của MATLAB nhận được từ tập hợp mở rộng của nó về các hàm. MATLAB có một số lớn các hàm, cho đến nay trên 500 hàm. Một số hàm là hàm nội tại hay hàm cài sẵn với chính trình xử lý MATLAB. Các hàm khác có thể ở thư viện các siêu tệp M-file bên ngoài cùng gói hàng của MATLAB( MATLAB TOOLBOX ). Và một số được thêm vào bởi người dùng cho các trình ứng dụng đặc biệt.

Rõ ràng với người dùng thì một hàm có thể có hay không có trong trình MATLAB hoặc ở siêu tệp M-file. Đây là một mặt quan trọng của MATLAB; người dùng có thể tạo ra các hàm của riêng mình, và chúng hoạt động đúng như các hàm nội tại cài sẵn của MATLAB . Sẽ biết thêm về siêu tệp M-file trong phần sau.

Các phạm trù chung của các hàm toán học có thể dùng trong MATLAB gồm:

Toán sơ cấp Các hàm đặc biệt Ma trận sơ cấp Ma trận đặc biệt Tách và đặt thừa số ma trận Phân tích dữ liệu Đa thức Giải phương trình vi phân Phương trình phi tuyến và tối ưu phi tuyến Tích phân số Xử lý tín hiệu

Các phần sau sẽ giới thiệu các phạm trù khác nhau này về các hàm giải tích. Trong giáo trình này chúng tôi không đi vào chi tiết trên từng hàm; điều này được thực hiện bởi công cụ trợ giúp và trong phần tham khảo.

Cho đến bây giờ, chúng ta chỉ biết các hàm với một đối số nhập và một đối số xuất. Các hàm của MATLAB cũng có thể dùng với nhiều đối số. Ví dụ, lệnh

Page 22: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 1. Các khái niệm cơ bản 21

Phan Thanh Tao - 2004

x = sqrt(log(z))

trình bày cách dùng tổ hợp hai hàm đơn giản. Có các hàm của MATLAB dùng hai hoặc nhiều đối số nhập. Ví dụ,

theta = atan2(y, x)

Tất nhiên, mỗi đối số có thể là một biểu thức.

Một số hàm trả về hai hoặc nhiều đối số xuất. Các giá trị xuất được bọc quanh bởi cặp ngoặc vuông, [ và ], và cách nhau dấu phẩy:

[V,D] = eig(A)

[y,i] = max(X)

Hàm thứ nhất trả về hai ma trận, V và D, gồm vectơ riêng và các giá trị riêng tương ứng của ma trận A. Ví dụ thứ hai, dùng hàm max, trả về giá trị lớn nhất y và chỉ số i của giá trị lớn nhất trong vectơ X.

Các hàm cho phép nhiều đối số xuất có thể trả về ít đối số xuất hơn. Ví dụ, hàm max với một đối số xuất,

max(X)

trả về đúng giá trị lớn nhất.

Các đối số nhập hay đối số ở bên phải của một hàm không bao giờ được thay đổi. Các giá trị xuất, nếu có, của một hàm luôn trả về ở các đối số bên trái.

*******************

Page 23: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 2. Các phép toán trên ma trận 22

Phan Thanh Tao - 2004

Chương 2. CÁC PHÉP TOÁN TRÊN MA TRẬN Các phép toán trên ma trận là điều cơ bản của MATLAB; bất kỳ đâu có thể

được, chúng biểu hiện như xuất hiện trên giấy, chỉ phụ thuộc vào dung lượng bộ nhớ của máy.

2.1. Chuyển vị ma trận

Ký tự đặc biệt là dấu nháy ( ' ) biểu hiện phép chuyển vị một ma trận. Các lệnh A = [ 1 2 3; 4 5 6; 7 8 0 ]

B = A'

kết quả là

A =

1 2 3

4 5 6

7 8 0

B =

1 4 7

2 5 8

3 6 0

và lệnh

x = [ -1 0 2 ]'

cho ra

x =

-1 0 2

Dấu nháy ' chuyển vị ma trận theo ý nghĩa hình thức; nếu Z là ma trận phức thì Z' là chuyển vị liên hợp của nó. Điều này đôi khi dẫn đến kết quả không như ý

Page 24: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 2. Các phép toán trên ma trận 23

Phan Thanh Tao - 2004

muốn nếu dùng dữ liệu phức một cách bất cẩn. Đối với một chuyển vị không liên hợp thì dùng biểu thức Z.' hoặc hàm conj(Z').

2.2. Cộng và trừ ma trận

Cộng và trừ ma trận được biểu hiện bằng các ký hiệu + và - . Các phép toán được định nghĩa cho các ma trận cùng cỡ. Ví dụ, với các ma trận trên, A+x là không đúng, vì A là ma trận vuông cấp 3 và x là ma trận cỡ 3x1. Tuy nhiên,

C = A + B

là chấp nhận được, và kết quả là

C =

2 6 10

6 10 14

10 14 0

Các phép cộng và trừ cũng được định nghĩa nếu một trong các toán hạng là đại lượng vô hướng, đó là ma trận cấp một. Trong trường hợp này, đại lượng vô hướng được cộng hoặc trừ vào tất cả các phần tử của toán hạng kia. Ví dụ

y = x – 1

cho ra

y =

-2 -1 1

2.3. Nhân ma trận

Phép nhân ma trận được biểu hiện bởi ký hiệu * . Phép toán được định nghĩa cho các ma trận có kích thước bên trong bằng nhau, đó là X*Y cho phép nếu số cột của ma trận X bằng số hàng của ma trận Y. Ví dụ, cả hai ma trận x và y ở trên có cỡ 3x1, vì vậy biểu thức x*y không được định nghĩa và kết quả là một thông báo lỗi. Tuy nhiên, vài phép nhân khác về vectơ được định nghĩa, và rất hữu ích. Thông dụng nhất là tích nội tại, cũng được gọi là tích điểm hay tích vô hướng. Đây là

Page 25: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 2. Các phép toán trên ma trận 24

Phan Thanh Tao - 2004

x'*y kết quả là

ans =

4

Tất nhiên, y'*x cho cùng kết quả. Có hai tích ngoại lai, chúng là chuyển vị của nhau.

x*y' =

2 1 -1

0 0 0

-4 -2 2 y*x' =

2 0 -4

1 0 -2

-1 0 2

Phép nhân trên từng phần tử sẽ được mô tả trong phần sau. ( MATLAB không cung cấp đặc biệt cho việc tính toán vectơ qua các phép nhân. Tuy nhiên, người nào cần thì dễ dàng viết một siêu tệp M-file để tính toán chúng.)

Các phép nhân ma trận với vectơ là các trường hợp đặc biệt của nhân tổng quát ma trận với ma trận. Với ví dụ ma trận A và vectơ x thì

b = A*x

là được phép và kết quả xuất là

b =

5 8 -7

Một cách tự nhiên, một đại lượng vô hướng có thể nhân hoặc bị nhân với ma trận bất kỳ.

Page 26: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 2. Các phép toán trên ma trận 25

Phan Thanh Tao - 2004

pi*x ans =

-3.1416

0.0000

6.2432

2.4. Chia ma trận

Trong MATLAB có hai ký hiệu "chia ma trận", \ và /. Nếu A là ma trận không suy biến, thì A\B và B/A tương ứng hình thức với nhân trái và nhân phải của B cho nghịch đảo của A, đó là inv(A)*B và B*inv(A), nhưng kết quả nhận được trực tiếp chứ không tính toán qua phép nghịch đảo. Nói chung,

X = A\B là lời giải phương trình A*X = B

X = B/A là lời giải phương trình X*A = B

Phép chia trái, A\B, được định nghĩa với B có cùng số dòng với A.Nếu A là ma trận vuông, thì nó được phân tích bằng phép khử Gauss. Các nhân tử được dùng để giải các phương trình A*X(:,j) = B(:,j), ở đây B(:,j) biểu hiện cột thứ j của B. Kết quả là ma trận X có cùng cỡ với B. Nếu A suy biến (tùy theo ước lượng điều kiện LINPACK là RCOND ) thì một thông báo lỗi được hiển thị.

Nếu A là ma trận vuông thì nó được phân tích bằng phương pháp trực giao House-holder với việc định trục xoay về cột. các nhân tử được dùng để giải các phương trình xác định dưới hoặc trên theo phương pháp bình phương bé nhất. Kết quả là một ma trận X cỡ mxn, ở đây m là số cột của A và n là số cột của B. Mỗi cột của X có nhiều nhất k thành phần khác không, với k là hạng thực thụ của A.

Phép chia phải, B/A, được định nghĩa theo dạng chia trái là B/A = (A'\B')'.

Ví dụ, khi vectơ b được tính là A*x thì lệnh

z = A\b

có kết quả

z =

-1 0 2

Page 27: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 2. Các phép toán trên ma trận 26

Phan Thanh Tao - 2004

Đôi lúc dùng \ và / để tính các lời giải hệ phương trình xác định dưới hoặc trên bằng phương pháp bình phương bé nhất đưa đến nhiều điều đáng ngạc nhiên. Đó là khả năng "chia" một vectơ cho vectơ khác. Ví dụ, với các vectơ x và y ở trên thì

s = x\y

cho ra

s =

0.8000

Đây là vì s = 0.8 là giá trị vô hướng giải được từ phương trình xs = y theo phương pháp bình phương bé nhất. Chúng tôi đề nghị bạn đọc giải thích tại sao

S = y/x

cho ra

S =

0.0000 0.0000 -1.0000

0.0000 0.0000 -0.5000

0.0000 0.0000 0.5000

2.5. Lũy thừa ma trận

Biểu thức A^p nâng A lên lũy thừa bậc p và được định nghĩa nếu A là ma trận vuông và p là đại lượng vô hướng. Nếu p là số nguyên lớn hơn 1 thì phép lũy thừa được tính bằng cách nhân lặp. Đối với các giá trị khác của p thì việc tính toán gồm các giá trị riêng và các vectơ riêng, vì vậy nếu [V,D] = eig(A) thì

A^p = V*D.^p/V

Nếu P là một ma trận ,và a là đại lượng vô hướng thì a^P nâng a lên lũy thừa P bằng cách dùng các giá trị riêng và các vectơ riêng. X^P, với X và P đều là ma trận, là một lỗi.

2.6. Các hàm sơ cấp về ma trận

Trong MATLAB, các biểu thức như exp(A) và sqrt(A) được xem như các phép toán về mảng, xác định trên từng phần tử của A. MATLAB cũng có thể tính các hàm siêu việt về ma trận, như hàm mũ và hàm logarit. Các hàm đặc biệt này

Page 28: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 2. Các phép toán trên ma trận 27

Phan Thanh Tao - 2004

chỉ đựơc định nghĩa cho các ma trận vuông, tính toán khá khó và tốn thời gian, và đôi lúc có các tính chất toán học khá hấp dẫn.

Một hàm toán học siêu việt được thông dịch là hàm về ma trận nếu có chữ "m" nối thêm vào cuối tên hàm, như expm(A) và sqrtm(A). Theo trọn bộ của MATLAB thì ba hàm sau đây được định nghĩa:

Hàm siêu việt trên ma trận expm hàm mũ logm hàm loga sqrtm hàm căn bậc hai

Tuy nhiên, danh sách có thể được mở rộng bằng cách thêm vào các siêu tệp M-file, hoặc dùng lệnh funm. Xem các siêu tệp M-file sqrtm, logm, và funm trong MATLAB TOOLBOX, và expm và funm trong phần tham khảo.

Các hàm sơ cấp khác về ma trận gồm

Hàm sơ cấp trên ma trận poly tính đa thức đặc trưng det tính định thức trace tìm vết ma trận kron tích tenxơ Kronecker

Xem phần tham khảo để biết thêm chi tiết.

*******************

Page 29: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 3. Các phép toán trên mảng 28

Phan Thanh Tao - 2004

Chương 3. CÁC PHÉP TOÁN TRÊN MẢNG Chúng tôi dùng từ phép toán trên mảng để nói về các phép toán số học trên

từng phần tử, thay cho các phép toán đại số tuyến tính thông thường về ma trận biểu hiện bởi các ký hiệu * / \ ^ ' . Đưa vào trước phép toán dấu chấm để biểu hiện phép toán trên mảng hay phép toán trên từng phần tử.

3.1. Cộng và trừ trên mảng

Đối với các phép cộng và trừ thì phép toán trên mảng và trên ma trận là giống nhau, vì vậy + và - có thể được xem là các phép toán hoặc là trên ma trận, hoặc là trên mảng.

3.2. Nhân và chia trên mảng

Phép nhân trên mảng hoặc nhân từng phần tử được biểu hiện bằng .* . Nếu A và B cùng kích thước thì A.* B biểu hiện mảng mà các phần tử của nó đơn giản là tích của từng cặp phần tử của A và B. Ví dụ, nếu

x = [ 1 2 3 ]; y = [ 4 5 6 ];

thì

z = x .* y

kết quả là

z =

4 10 18

Các biểu thức A ./ B và A .\ B cho ra thương của từng cặp phần tử. Vì vậy,

z = x .\ y

kết quả là

z =

4.0000 2.5000 2.0000

3.3. Lũy thừa trên mảng

Lũy thừa từng phần tử biểu hiện bởi .^ . Sau đây là một số ví dụ, dùng các vectơ x và y ở trên. Đánh vào

Page 30: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 3. Các phép toán trên mảng 29

Phan Thanh Tao - 2004

z = x .^ y

kết quả là

z =

1 32 729

Phần mũ có thể là một đại lượng vô hướng.

z = 2 .^ [x y]

z =

2 4 8 16 32 64

Ví dụ cuối cùng minh họa cho một trong các đặc tính hấp dẫn về cú pháp của MATLAB. Mặc dù khó thấy, nhưng khoảng trống giữa chữ số 2 và dấu chấm là quan trọng. Nếu không có thì dấu chấm sẽ được thông dịch là một dấu chấm thập phân quan hệ với số 2. Rồi MATLAB chỉ xem dấu mũ đứng riêng và tính lũy thừa ma trận, trong trường hợp này kết quả là một thông báo lỗi vì ma trận mũ không vuông. Xen vào cặp ngoặc đơn để thực hiện cấp độ ưu tiên toán tử.

3.4. Phép toán quan hệ

Có 6 phép toán quan hệ để so sánh hai ma trận cùng cỡ.

Phép toán quan hệ < Nhỏ hơn <= Nhỏ hơn hoặc bằng > Lớn hơn >= Lớn hơn hoặc bằng == Bằng ~= Khác

Phép so sánh được thực hiện giữa các cặp phần tử tương ứng; kết quả là một ma trận gồm các số 1 và 0, với 1 biểu hiện cho giá trị đúng ( TRUE ) và 0 biểu hiện cho giá trị sai ( FALSE ).

Ví dụ

2+2 ~= 4

đơn giản là 0.

Page 31: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 3. Các phép toán trên mảng 30

Phan Thanh Tao - 2004

Các phép quan hệ có thể trình bày mẫu của các phần tử của ma trận thỏa mãn các điều kiện khác nhau. Ví dụ, sau đây là ma phương cấp 6.

A = magic(6)

A =

35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11

Ma phương cấp n là một ma trận cấp n được xây dựng từ các số nguyên từ 1 đến n2 với tổng các dòng và các cột bằng nhau. Nếu nhìn vào ma trận đủ lớn thì có thể lưu ý thấy các phần tử bội 3 nằm trên đường chéo thứ ba. Để hiển thị điều kỳ lạ này, đánh vào

P = (rem(A,3) == 0)

Dấu = kép là toán tử kiểm tra bằng, rem(A,3) là ma trận gồm các số dư, 0 được mở rộng thành ma trận không, và P trở thành ma trận gồm các số 1 và 0.

P =

0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0 Để thấy mẫu nhỏ hơn và rõ ràng, lệnh format + in ma trận ở dạng cô đọng, với dấu + cho số dương, dấu - cho số âm, và ký tự trống cho số 0.

format +

P + + + + + + + + + + + +

Page 32: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 3. Các phép toán trên mảng 31

Phan Thanh Tao - 2004

Hàm find là hữu ích với các phép toán quan hệ, đó là tìm các số khác không trong ma trận 0-1, và các phần tử dữ liệu thỏa mãn điều kiện quan hệ nào đó. Ví dụ, nếu Y là một vectơ thì hàm find(Y < 3.0) trả về một vectơ chứa các chỉ số của các phần tử trong Y nhỏ hơn 3.0.

Các lệnh

i = find(Y >3.0);

Y(i) = 10*ones(i);

thay tất cả các phần tử trong Y lớn hơn 3.0 với giá trị 10.0. Nó làm việc với ngay cả Y là một ma trận, vì ma trận có thể được tham chiếu như mảng các vectơ cột.

Biểu thức quan hệ X ==NaN luôn cho ra NaN, tùy theo các chỉ định số học IEEE, mọi phép toán trên NaN cho ra NaN. Nhưng đôi lúc cần kiểm tra các giá trị NaN. Vì vậy, hàm isnan(X) được cung cấp để trả về 1 cho các phần tử NaN của X, và 0 với các phần tử khác.

Cũng có ích là hàm finite(x) trả về 1 cho -∞ < x < ∞.

3.5. Phép toán logic

Có 3 phép toán logic làm việc với từng phần tử và thường dùng với các ma trận 0-1.

Phép toán quan hệ & Phép và | Phép hoặc ~ Phép phủ định

Các phép & và | so sánh hai đại lượng vô hướng, hoặc hai ma trận cùng cỡ. Đối với các ma trận thì chúng làm việc trên từng phần tử; nếu A và B là các ma trân 0-1 thì biểu thức A & B là một ma trận 0-1 khác biểu hiện logic AND của các phần tử tương ứng của A và B. Các phép toán logic xem mọi số khác 0 là đúng ( TRUE ). Chúng trả về 1 cho TRUE và 0 cho FALSE.

Phép NOT, hoặc bù logic, là toán tử đơn hạng. Biểu thức ~A trả về các số 0 cho các phần tử khác 0 của A và 1 cho các phần tử 0. Do đó hai biểu thức

P | (~P)

P & (~P)

trả về tất cả 1 và tất cả 0 tương ứng.

Page 33: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

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)

Page 34: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

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

Page 35: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

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.

*******************

Page 36: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

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)';

Page 37: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

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

Page 38: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

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ụ,

Page 39: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

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

Page 40: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

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,:);

Page 41: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 4. Thao tác trên véctơ và ma trận 40

Phan Thanh Tao - 2004

thay X với các dòng có phần tử ở cột thứ 3 lớn hơn 100.

4.4. Ma trận rỗng

Lệnh x = [ ]

gán ma trận cỡ 0x0 cho x. Sau đó dùng ma trận này sẽ không dẫn đến điều kiện lỗi; mà truyền cho ma trận rỗng. Lệnh này khác với lệnh

clear x

Xóa x từ danh sách các biến hiện thời. Các ma trận rỗng có trong vùng làm việc; chúng có đúng cỡ 0x0. Hàm exist có thể dùng để kiểm tra sự tồn tại của một ma trận (hoặc một tệp cho ma trận), trong khi đó hàm isempty kiểm tra ma trận rỗng.

Có thể phát sinh các vectơ rỗng. Nếu n<1 thì 1:n không chứa phần tử nào cả và do đó

x = 1:n

là một cách việc tạo một vectơ x rỗng.

Quan trọng hơn nữa là một cách có hiệu lực để xóa các dòng, các cột của một ma trận là gán chúng cho một ma trận rỗng. Ví dụ

A(:,[2,4]) = [ ]

xóa cột 2 và 4 của ma trận X.

Chắc chắn các hàm ma trận sẽ trả về các giá trị hợp lý về mặt toán học nếu ma trận rỗng. Chúng là các hàm det, cond, prod, sum, và một số hàm khác. Ví dụ, các hàm prod, det, và sum trả về 1, 1, và 0 tương ứng khi ma trận đối là rỗng.

Hơn nữa chúng ta đã biết không có đại số về các ma trận rỗng. Chúng tôi không chắc rằng chúng tôi sẽ thực hiện điều đó một cách đúng đắn, nhưng chúng tôi đã tìm thấy nhiều điều hữu ích.

4.5. Ma trận đặc biệt

Tập hợp các hàm phát sinh các ma trận đặc biệt để đưa vào trong đại số tuyến tính và xử lý tín hiệu.

Page 42: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 4. Thao tác trên véctơ và ma trận 41

Phan Thanh Tao - 2004

Các ma trận đặc biệt compan Ma trận Liên hợp diag Ma trận Chéo gallery Ma trận riêng hadamard Ma trận Hadamard hankel Ma trận Hankel hilb Ma trận Hilbert invhilb Ma trận Hilbert đảo magic Ma phương pascal Tam giác Pascal toeplitz Ma trận Toeplitz vander Ma trận Vandermonde

Ví dụ, phát sinh một ma trận liên hợp với đa thức x3 - 7x + 6.

p = [ 1 0 -7 6 ]

a = compan(p)

a =

0 7 -6

1 0 0

0 1 0

Các giá trị riêng của a là nghiệm của đa thức.

-3.0000 2.0000 1.0000

Một ma trận Toeplitz không đồng bộ về đường chéo là

c = [ 1 2 3 4 5 ];

r = [1.5 2.5 3.5 4.5 5.5];

t =toeplitz(c,r)

t =

Page 43: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 4. Thao tác trên véctơ và ma trận 42

Phan Thanh Tao - 2004

1.000 2.500 3.500 4.500 5.500 2.000 1.000 2.500 3.500 4.500 3.000 2.000 1.000 2.500 3.500 4.000 3.000 2.000 1.000 2.500 5.000 4.000 3.000 2.000 1.000

Các hàm khác phát sinh các ma trận tiện ích ít quan tâm nhưng hữu ích hơn.

Các ma trận tiện ích

zeros Ma trận zero ones Ma trận một rand Ma trận phần tử ngẫu

nhiên eye Ma trận đơn vị linspace Vectơ không gian tuyến

tính logspace Vectơ không gian loga meshdom Phạm vi để vẽ lưới

Trong các hàm này có hàm eye(A) trả về ma trận đơn vị cùng cỡ với A. Nên dùng tên dễ nhớ vì I và i thường dùng như các chỉ số hay đơn vị ảo sqrt(-1).

Các hàm zeros và ones phát sinh các ma trận hằng có kích cỡ khác nhau, và hàm rand để phát sinh các ma trận phân bố đồng bộ hoặc bình thường các phần tử ngẫu nhiên. Ví dụ, để phát sinh ma trận cỡ 4x3

A = rand(4,3)

A =

0.2113 0.8096 0.4832

0.0824 0.8474 0.6135

0.7599 0.4524 0.2749

0.0087 0.8075 0.8807

4.6. Cách tạo ra ma trận lớn

Các ma trận lớn có thể được tạo ra từ các ma trận nhỏ bằng cách dùng cặp ngoặc vuông bao quanh các ma trận nhỏ. Ví dụ,

Page 44: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 4. Thao tác trên véctơ và ma trận 43

Phan Thanh Tao - 2004

C = [A eye(4); ones(A) A^2]

tạo ra ma trận lớn với giả thiết A có 4 dòng. Các ma trận nhỏ hơn trong kiểu này của cách xây dựng phải cùng cỡ hoặc kết quả là một thông báo lỗi.

4.7. Thực hiện trên ma trận

Các hàm sẽ quay, đổi hàng-cột, thay đổi kích thước, hoặc trích ra các phần của ma trận.

Thao tác trên ma trận rot90 Quay ma trận fliplr Đổi cột ma trận flipud Đổi cột ma trận diag Trích hoặc tạo ra đường chéo tril Phần tam giác dưới triu Phần tam giác trên reshape Đặt lại kích thước .' Chuyển vị : Sắp xếp tổng quát

Ví dụ, để dặt lại kích thước ma trận cỡ 3x4 thành ma trận 2x6:

a =

1 4 7 10

2 5 8 11

3 6 9 12

b = reshape(a,2,3)

b =

1 3 5 7 9 11

2 4 6 8 10 12

Ba hàm diag, triu, và tril cung cấp truy cập đến đường chéo, tam giác trên, và tam giác dưới của ma trận. Ví dụ,

tril(rand(4,3))

Page 45: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 4. Thao tác trên véctơ và ma trận 44

Phan Thanh Tao - 2004

cho ra ans =

0.2113 0 0

0.0824 0.8474 0

0.7599 0.4524 0.2749

0.0087 0.8075 0.8807

Cũng rất hữu ích là các hàm size và length. Hàm size trả về vectơ 2 chiều chứa số dòng và số cột của một ma trận. Nếu biến là một vectơ thì length trả về số chiều của vectơ, hoặc max(size(V)).

*******************

Page 46: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 5. Phân tích dữ liệu 45

Phan Thanh Tao - 2004

Chương 5. THAO TÁC TRÊN VECTƠ VÀ MA TRẬN Phần này giới thiệu về cách phân tích dữ liệu bằng cách dùng MATLAB và

mô tả vài công cụ thống kê cơ bản. Kỹ thuật mạnh hơn là dùng đại số tuyến tính và các hàm xử lý tín hiệu bàn đến trong phần sau.

5.1. Phân tích theo hướng cột

Tất nhiên các ma trận dùng để giữ tất cả dữ liệu, nhưng điều này dẫn đến một lựa chọn của hướng dữ liệu khác nhau. Theo quy ước thì các biến khác nhau trong tập hợp dữ liệu được đặt theo các cột, cho phép quan sát qua các dòng. một tập hợp dữ liệu gồm 50 mẫu, 13 biến được lưu trong một ma trận cỡ 50x13.

Bắt đầu bằng ví dụ, dữ liệu kinh tế Longley đã có gồm các biến

1) Lạm phát quốc dân

2) Thu nhập quốc dân

3) Thất nghiệp

4) Lực lượng quân đội

5) Dân số

6) Năm

7) Lực lượng lao động

Nói chung có nhiều cách đưa dữ liệu vào MATLAB; điều này được khám phá trong phần sau. Giả sử dữ liệu chưa có trong dạng máy đọc được thì cách nhập dữ liệu dễ nhất là dùng một trình soạn thảo văn bản hoặc trình xử lý từ. Nếu tạo ra một tệp tên là longley.m chứa các lệnh gán

ldata = [

83.0 234.289 235.6 159.0 107.608 1947 60.232

88.5 259.426 232.5 145.6 108.623 1948 61.122

88.2 258.054 368.2 161.6 109.773 1949 60.171

89.5 284.599 335.1 165.0 110.929 1950 61187

96.2 328.975 209.9 309.9 112.075 1951 63.221

Page 47: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 5. Phân tích dữ liệu 46

Phan Thanh Tao - 2004

98.1 346.999 193.2 359.4 113.270 1952 63.639

99.0 365.385 187.0 354.7 115.094 1953 64.989

100.0 363.112 357.8 335.0 116.219 1954 63.761

101.2 397.469 290.4 304.8 117.388 1955 66.019

104.6 419.180 282.2 285.7 118.734 1956 67.857

108.4 442.769 293.6 279.8 120.445 1957 68.169

110.8 444.546 468.1 263.7 121.950 1958 66.513

112.6 482.704 381.3 255.2 123.366 1959 68.655

114.2 502.601 393.1 251.4 125.368 1960 69.564

115.7 518.173 480.6 257.2 127.852 1961 69.331

116.9 554.894 400.7 282.7 130.081 1962 70.551 ]

thì có thể thực hiện lệnh longley. Lệnh này truy cập tệp longley.m và tạo ra ma trận ldata (hoặc tên bất kỳ khác nếu muốn) trong vùng làm việc.Thử nhập ma trận này trong chế độ tương tác, nhưng chỉ được sửa đổi ở lần đầu. Nếu nhập sai thì không có cách sửa đổi.

Nếu quan sát nhiều hơn là có trên màn hình, các dòng có thể tiếp tục trên dòng tiếp theo bằng cách dùng dấu tĩnh lược gồm 3 dấu chấm. Ma trận cũng có thể nhập trong các khối cột và nối toàn bộ lại ở cuối dòng.

Với dữ liệu longley có 16 mẫu xét gồm 7 biến. Điều này biểu lộ bởi

[n,p] = size(ldata)

n =

16

p =

7

Đối với dữ liệu nhập theo từng cột này thì một nhóm các hàm cung cấp các công cụ phân tích dữ liệu cơ bản:

Page 48: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 5. Phân tích dữ liệu 47

Phan Thanh Tao - 2004

Phân tích dữ liệu theo từng cột max giá trị cực đại min giá trị cực tiểu mean giá trị trung bình median giá trị trung gian std độ lệch chuẩn sort sắp xếp sum tổng các phần tử prod tích các phần tử cumsum tổng tích lũy các phần tử cumprod tích tích lũy các phần tử diff đạo hàm xấp xỉ hist biểu đồ tần số corrcoef hệ số tương quan cov ma trận hiệp phương sai cplxpair Sắp lại thành cặp số phức

Đối với các đối là vectơ thì các hàm này không xét đến các vectơ có được định hướng theo dòng hay theo cột. Đối với các đối là mảng thì các hàm thực hiện theo cách định hướng cột trên dữ liệu trên mảng. Điều này có nghĩa là, chẳng hạn nếu hàm max áp dụng cho mảng thì kết quả là một vectơ dòng chứa các giá trị lớn nhất trên mỗi cột.

Do đó, nếu

A =

9 8 4

1 6 5

3 2 7

thì m = max(A)

mv = mean(A)

s = sort(A)

kết quả là

m =

Page 49: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 5. Phân tích dữ liệu 48

Phan Thanh Tao - 2004

9 8 7

mv =

4.3333 5.3333 5.333

s =

1 2 4

3 6 5

9 8 7

Hoặc với dữ liệu longley

m = median(ldata)

m =

1.0E+003*

0.1012 0.3975 0.3351 0.2798 0.1174 1.9550 0.0660

Có thể trừ giá trị trung bình mỗi cột của ldata bằng cách dùng phép nhân bên ngoài

lmean = ldata - ones(n,1)*m;

Có thể thêm vào danh sách này bằng cách dùng các siêu tệp M-file, nhưng khi dùng hãy cẩn thận để xử lý trường hợp vectơ dòng. Nếu viết các tệp M-file theo hướng cột riêng thì hãy xem cách hoàn thành điều này trong các tệp M-file khác, ví dụ mean.m và diff.m.

5.2. Các giá trị bỏ qua

Giá trị đặc biệt, NaN, viết tắt chữ Not-a-Number trong MATLAB. Thông thường cho ra bởi các biểu thức không xác định như 0/0, nguyên nhân của một thông báo lỗi, tùy theo quy ước thiết lập bởi chuẩn IEEE. Đối với công dụng thống kê thì các giá trị NaN có thể dùng để biểu hiện các giá trị bỏ qua hoặc dữ liệu không dùng được, NA.

Cách "sửa đổi" các giá trị NA là một điều khó khăn và thường khác nhau tùy theo từng trường hợp cụ thể. Tuy nhiên, MATLAB đồng dạng và nghiêm ngặt trong cách xem xét của nó về các giá trị NaN; chúng truyền một cách tự nhiên cho kết quả cuối cùng của mọi tính toán. Do đó nếu một giá trị NaN được dùng trong

Page 50: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 5. Phân tích dữ liệu 49

Phan Thanh Tao - 2004

mọi lần tính toán trung gian thì kết quả cuối cùng sẽ là một NaN, trừ khi kết quả cuối cùng không phụ thuộc vào giá trị NaN.

Về mặt thực hành, điều này có nghĩa là nên xóa các NaN trong dữ liệu trước khi thực hiện việc tính toán thống kê. Các NaN trong vectơ x được tìm ở:

i = find(isnan(x));

vì vậy

x = x(find(~isnan(x)))

trả về dữ liệu trong x với các NaN đã xóa. Có 2 cách khác nhau để thực hiện việc này là

x = x(~isnan(x));

x(isnan(x)) = [ ];

có lẽ cách thứ hai là rõ nhất. Phải dùng hàm đặc biệt isnan để tìm các NaN vì không thể dùng lệnh

x(x==NaN) = [ ];

Các NaN trả về NaN cho mọi phép toán, kể cả các phép toán quan hệ.

Nếu thay vì vectơ, dữ liệu ở trên các cột của ma trận, và xóa mọi dòng của ma trận có NaN thì dùng

X(any(isnan(X)'),:) = [ ];

đây là một lệnh khá thô, nhưng có hiệu lực. Nếu cho rằng khó nhớ thì hoàn toàn biện hộ. Nếu thường cần xóa các NaN thì cách giải quyết là viết một tệp M-file, ví dụ

function X = excise(X)

X(any(isnan(X)'),:) = [ ];

Bây giờ đánh vào

X = excise(X);

là hoàn thành cùng công việc. Biết thêm về các tệp M-file sau này.

Page 51: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 5. Phân tích dữ liệu 50

Phan Thanh Tao - 2004

5.3. Cách xóa các giá trị quá hạn

Cách xóa các giá trị quá hạn trong dữ liệu giống như cách xóa các NaN. Với dữ liệu Longley, giá trị trung bình và các độ lệch chuẩn của mỗi cột dữ liệu là:

mv = mean(ldata)

sigma = std(ldata)

mv =

1.0E+003*

0.101 0.387 0.319 0.260 0.117 1.954 0.065

sigma =

10.448 96.238 90.479 67.382 6.735 4.609 3.400

Số dòng có giá trị chênh lệch lớn hơn 3 lần độ lệch chuẩn là:

[n,p] = size(ldata);

e = ones(n,1);

dist = asb(ldata-e*mv);

outliers = dist > 3*e*sigma;

nout = sum(any(outliers'))

nout = 0

Không có. Nếu có thì chúng bị xóa với lệnh

X(any(outliers'),:) = [ ];

5.4. Hồi quy và đường cong thực nghiệm

Trước khi đưa đường cong thực nghiệm vào dữ liệu thì phải chuẩn hóa dữ liệu. Việc chuẩn hóa có thể cải tiến độ chính xác của kết quả cuối cùng. Vẫn làm việc với dữ liệu Longley, một cách chuẩn hóa là xóa giá trị trung bình

X = X - e* mean(X);

và để chuẩn hóa thành đơn vị độ lệch chuẩn

Page 52: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 5. Phân tích dữ liệu 51

Phan Thanh Tao - 2004

X = X ./ (e*std(X);

Có thể tính hồi quy thất nghiệp ( cột cuối cùng ) theo các cột trước đó, dùng trong dữ liệu thô trong trường hợp này,

y = ladat(:,7);

A = [ldata(:,1:6) ones(y)];

coef = A\y

kết quả là

coef =

1.0E+0003 0.00001506187227

-0.00003581917929

-0.00002020229804

-0.00001033226867

-0.00005110410565

0.00182915146461

-3.48225863459802

Dữ liệu Longley có tương quan cao, xem qua các hệ số tương quan.

corr(X)

ans =

1.0000 0.9916 0.6206 0.4647 0.9792 0.9911 0.9709 0.9916 1.0000 0.6043 0.4464 0.9911 0.9953 0.9836 0.6206 0.6043 1.0000 -0.1774 0.6866 0.6683 0.5025 0.4647 0.4464 -0.1774 1.0000 0.3644 0.4172 0.4573 0.9792 0.9911 0.6866 0.3644 1.0000 0.9940 0.9604 0.9911 0.9953 0.6683 0.4172 0.9940 1.0000 0.9713 0.9709 0.9836 0.5025 0.4573 0.9604 0.9713 1.0000

Page 53: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 5. Phân tích dữ liệu 52

Phan Thanh Tao - 2004

Thường đưa đa thức vào dữ liệu là có ích. Nói chung, một đa thức đưa vào dữ liệu theo các vectơ x và y là một hàm, p, có dạng:

p(x) = c1xd + c2xd-1 + ...+ cn

Cấp là d và số hệ số là n = d + 1. Các hệ số c1, c2, ..., cn được xác định bằng cách giải hệ phương trình tuyến tính:

Ac = y

Các cột của A là lũy thừa thoái của vectơ x. Sau đây là một cách tạo ra A

for j=1:n

A(:,j) = x.^(n-j);

end

Lời giải của hệ phương trình tuyến tính Ac = y nhận được với phép chia ma trận của MATLAB:

c = A\y

Hàm polyfit.m trong MATLAB TOOLBOX tự động làm thủ tục này.

Trong bài toán hồi quy, các hàm khác, thường là hàm nhiều biến các cột của ma trận dữ liệu, được đưa vào dữ liệu bằng cách tìm dạng của ma trận A tương ứng. Ví dụ, dùng dữ liệu longley,

A = [ldata(:,1) ldata(:,2).^2 sin(ldata(:,3)) ones(n,1)];

coef = A\y;

tìm các hệ số hồi quy cho một hàm phức tạp hơn.

*******************

Page 54: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 6. Hàm ma trận 53

Phan Thanh Tao - 2004

Chương 6. HÀM MA TRẬN Nhiều khả năng toán học của MATLAB nhận được từ các hàm ma trận của nó.

Một số hàm gắn liền với trình xử lý MATLAB. Các hàm khác, trong thư viện các tệp M-file, phân phối cùng với MATLAB. Và một số được thêm vào bởi từng người dùng, hoặc nhóm người cho các trình ứng dụng đặc biệt. ở đây chúng tôi không đi sâu vào chi tiết từng hàm; điều đó được thực hiện trong công cụ trợ giúp và phần tham khảo. Thông tin thêm nữa cũng có thể tìm trong hướng dẫn sử dụng phần mềm LINPACK và EISPACH, cung cấp cơ bản về thuật toán cho MATLAB. Trong phần này, chúng tôi cho xem qua các hàm được nhóm theo các hàm thừa số ma trận và hàm phân tích ma trận.

Gồm 4 nhóm:

- Thừa số tam giác

- Thừa số trực giao

- Tách giá trị riêng

- Tách giá trị kỳ dị

6.1. Thừa số tam giác

Cách tách thừa số cơ bản nhất là tách ma trận vuông bất kỳ thành tích 2 ma trận tam giác, một ma trận là hoán vị của một ma trận tam giác dưới và ma trận kia là ma trận tam giác trên. Việc tách thừa số thường gọi là "thừa số LU" hoặc đôi khi gọi là "thừa số LR". Hầu hết các thuật toán để tính là các phép biến đổi theo phương pháp khử Gauss.

Chính các thừa số lấy được từ hàm lu. Các thừa số được dùng để nhận nghịch đảo ma trận với hàm inv và lấy định thức với hàm det. Đó cũng là cơ sở cho việc giải hệ phương trình tuyến tính hay "chia ma trận vuông" với các toán tử \ và /.

Ví dụ, bắt đầu với

A =

1 2 3

4 5 6

7 8 0

Page 55: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 6. Hàm ma trận 54

Phan Thanh Tao - 2004

Để xem phân tích LU, dùng câu lệnh gán kép của MATLAB.

[L,U] = lu(A)

cho ra

L =

0.1429 1.0000 0

0.5714 0.5000 1.0000

1.0000 0 0

U =

7.0000 8.0000 0.0000

0 0.8571 3.0000

0 0 4.5000

Lưu ý rằng L là hoán vị của ma trận tam giác dưới có các số 1 trên đường chéo, và U là tam giác trên. Để kiểm tra thừa số có thể tính tích

L*U

cho ra giá trị A gốc. Đó là,

ans =

1 2 3

4 5 6

7 8 0

Ma trận đảo của ma trận ví dụ nhận được với

X = inv(A)

Ma trận đảo được tính toán thực sự qua các nghịch đảo của các thừa số tam giác

X = inv(U)*inv(L)

Định thức của ma trận ví dụ nhận được với

Page 56: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 6. Hàm ma trận 55

Phan Thanh Tao - 2004

d = det(A)

cho ra

d =

27

Được tính từ định thức của các thừa số tam giác

d = det(L)*det(U)

cho ra

d =

27.0000

Tại sao 2 lần in ra d ở dạng khác nhau? Khi MATLAB được yêu cầu tính det(A), nó nhận thấy tất cảc các phần tử của A là nguyên, vì vậy nó cho định thức là số nguyên. Nhưng khi tính lần hai, các phần tử của U không nguyên, vì vậy MATLAB không cho kết quả là số nguyên.

Như một ví dụ về hệ phương trình tuyến tính, lấy

b =

1 3 5

Lời giải phương trình Ax = b nhận được với phép chia ma trận của MATLAB

x = A\b

cho ra

x =

0.3333 0.3333 0.0000

Lời giải được tính toán thực sự bằng cách giải 2 hệ tam giác,

y = L\b, x = U\y

Page 57: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 6. Hàm ma trận 56

Phan Thanh Tao - 2004

Lời giải trung gian là

y =

5.0000 0.2857 0.0000

Thừa số tam giác cũng được dùng bởi một hàm đặc biệt là rcond. Đây là sản phẩm của một số chương trình con của LINPACK để ước lượng số điều kiện tính nghịch đảo của một ma trận vuông.

Hai hàm khác, chol và rref, có thể được đưa vào nhóm này vì thuật toán cơ bản quan hệ gần gủi với thừa số LU. Hàm chol cho thừa số Cholesky của một ma trận đối xứng xác định dương. Dạng xếp bậc thu gọn dòng của ma trận chữ nhật, rref, có một ít đáng quan tâm trong lý thuyết đại số tuyến tính, mặc dù có giá trị tính toán không lớn. Nó được đưa vào MATLAB vì tính sư phạm.

6.2. Thừa số trực giao

Thừa số "QR" là hữu ích cho cả ma trận vuông lẫn ma trận chữ nhật. Nó tách một ma trận thành tích của một ma trận trực chuẩn và một ma trận tam giác trên. Ví dụ, lấy

A =

1 2 3

4 5 6

7 8 9

10 11 12

là ma trận khuyết hạng; cột giữa là trung bình cộng của hai cột kia. Tính khuyết hạng có thể được biểu lộ bằng thừa số.

[Q,R] = qr(A)

cho ra

Q =

-0.0776 -0.8331 0.5444 0.0605

-0.3105 -0.4512 -0.7709 0.3251

Page 58: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 6. Hàm ma trận 57

Phan Thanh Tao - 2004

-0.5433 -0.0694 -0.0913 -0.8317

-0.7762 0.3124 0.3178 0.4461

R =

-12.8841 -14.5916 -16.2992

0 -1.0413 -2.0826

0 0 0.0000

0 0 0

Có thể kiểm tra rằng tích Q*R cho ra A gốc, nhưng đừng băn khoăn điều đó. Cấu trúc tam giác của R cho nó các số 0 dưới đường chéo; số 0 trên đường chéo ở R(3,3) cho thấy rằng R, và do đó A, không phải là ma trận đủ hạng.

Phân tích thừa số QR được dùng để giải các hệ phương trình tuyến tính với số phương trình nhiều hơn số ẩn. Ví dụ

b =

1 3 5 7

Hệ phương trình Ax=b là hệ 4 phương trình chỉ có 3 ẩn. Lời giải tốt nhất theo phương pháp bình phương bé nhất được tính bởi

x = A\b

cho ra

Warning: Rank deficient, rank = 2 tol = 1.4594E-014

x = 0.5000 0.0000 0.1667

Báo trước về sự khuyết hạng. Giá trị tol dùng để xác định rằng một phần tử trên đường chéo của R là không đáng kể. Lời giải x được tính bằng cách tách thừa số và qua 2 bước

Page 59: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 6. Hàm ma trận 58

Phan Thanh Tao - 2004

y = Q'*b; x = R\y

Nếu kiểm tra lời giải đã tính theo công thức A*x thì thấy rằng nó bằng b với sai số làm tròn. Điều này nói rằng mặc dù hệ phương trình Ax=b là vô định và khuyết hạng nhưng chúng vẫn thích hợp. Có nhiều lời giải vô định vectơ x; thừa số QR tìm ra một lời giải trong chúng.

Việc phân tích thừa số này cũng là cơ sở cho các hàm null và orth, chúng phát sinh các cơ sở trực giao cho không gian 0 và phạm vi của một ma trận đã cho.

6.3. Tách giá trị kỳ dị

Chúng tôi không có ý giải thích cách tách giá trị kỳ dị ở đây; chúng ta phải chấp nhận với ý kiến cho rằng nó là công cụ mạnh mẽ cho việc giải các bài toán về ma trận. Xem sách hướng dẫn sử dụng LINPACK hoặc sách viết bởi Golub và VanLoan đối với vấn đề này. Trong MATLAB, lệnh gán ba

[U,S,V] = svd(A)

cho ra 3 thừa số trong việc tách giá trị kỳ dị,

A = U*S*V'

U và V là ma trận trực giao và S là ma trận chéo. Bằng chính nó, hàm svd(A) trả về đúng các phần tử trên đường chéo của S, đó là các giá trị kỳ dị của A.

Việc tách giá trị kỳ dị được sử dụng cho một số hàm khác, kể cả hàm giả đảo, pinv(A); tính hạng, rank(A); chuẩn ma trận Ơ-clit, norm(A,2); và số điều kiện, cond(A).

6.4. Giá trị riêng

Nếu A là ma trận vuông cấp n thì n số λ thỏa mãn Ax = λx gọi là các giá trị riêng của A. Chúng được tính bằng

eig(A)

trả về các giá trị riêng trong một vectơ cột. Nếu A là ma trận thực và đối xứng thì các giá trị riêng là thực. Nhưng nếu A không đối xứng thì các giá trị riêng luôn là số phức. Ví dụ, với

A =

0 1

Page 60: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 6. Hàm ma trận 59

Phan Thanh Tao - 2004

-1 0

Lệnh eig(A) cho ra

ans =

0.0000 + 1.0000 i

0.0000 - 1.0000 i

Các vectơ riêng và các giá trị riêng nhận được với lệnh gán kép,

[X,D] = eig(A)

Trong trường hợp này các phần tử trên đường chéo của D là các giá trị riêng và các cột của X là các vectơ riêng tương ứng mà A*X = X*D.

Hai kết quả trung gian dùng trong việc tính các giá trị riêng là chuẩn Hessenberg, hess(A), và chuẩn Schur, Schur(A). Chuẩn Schur dùng để tính các hàm ma trận siêu việt, như sqrtm(A) và logm(A).

Nếu A và B là các ma trận vuông thì hàm eig(A,B) trả về một vectơ chứa các giá trị riêng suy rộng từ lời giải phương trình

Ax = λBx

Lệnh gán kép dùng để nhận các vectơ riêng

[X,D] = eig(A,B)

cho ra ma trận chéo D gồm các giá trị riêng suy rộng và ma trận X đầy đủ có các cột là các vectơ riêng tương ứng mà A*X = B*X*D. Các kết quả trung gian trong lời giải của bài toán giá trị riêng suy rộng này có thể dùng từ hàm qz(A,B).

6.5. Hạng và điều kiện

Các hàm của MATLAB liên quan đến hạng và điều kiện gồm:

Điều kiện về ma trận Cond Số điều kiện trong chuẩn 2 norm chuẩn 1, chuẩn 2, chuẩn F, chuẩn ∞ rank hạng ma trận rcond ước lượng điều kiện

Page 61: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 6. Hàm ma trận 60

Phan Thanh Tao - 2004

Có nhiều nơi trong MATLAB có tính hạng ma trận: trong rref(A), trong A\B với A không vuông, trong orth(A) và null(A), và trong giả đảo pinv(A). Ba thuật toán khác nhau với ba tiêu chuẩn khác nhau không đáng kể và vì vậy ba giá trị khác nhau đó có thể cho ra ma trận giống nhau.

Với rref(A) thì hạng của A là số dòng khác không. Thuật toán khử của rref là nhanh nhất trong 3 thuật toán xác định hạng ma trận, nhưng ít tinh vi và ít tin cậy nhất.

Với A\B, orth(A), và null(A), cách phân tích thừa số QR đựoc dùng như mô tả trong chương 9 sách hướng dẫn LINPACK .

Với pinv(A), thuật toán dựa vào cách phân tích giá trị kỳ dị và được mô tả trong chương 11 sách hướng dẫn LINPACK . thuật toán pinv tốn thời gian nhất, nhưng đáng tin cậy nhất và do đó cũng được dùng để tính hạng ma trận, rank(A).

*******************

Page 62: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 7. Đa thức và xử lý tín hiệu 61

Phan Thanh Tao - 2004

Chương 7. ĐA THỨC VÀ XỬ LÝ TÍN HIỆU 7.1. Đa thức

Các đa thức biểu hiện trong MATLAB như các vectơ dòng chứa các hệ số theo lũy thừa thoái. Ví dụ, Phương trình đặc trưng của ma trận

A =

1 2 3

4 5 6

7 8 9

được tính với

p = poly(A)

p =

1 -6 -72 -27

Đây là biểu hiện MATLAB của ma trận s3 -6s2 -72s -27.

Các nghiệm của phương trình này là:

r = roots(p)

r =

12.1229 -5.7345 -0.3884

Tất nhiên giống các giá trị riêng của ma trận A. Có thể ráp ngược về đa thức gốc với hàm poly,

p2 = poly(r)

p2 =

1 -6 -72 -27

Xét các đa thức a(s) = s2 +2s +3 và b(s) = 4s2 +5s +6. Tích các đa thức là tích chập các hệ số:

Page 63: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 7. Đa thức và xử lý tín hiệu 62

Phan Thanh Tao - 2004

a = [1 2 3]; b = [4 5 6];

c = conv(a,b)

c =

4 13 28 27 18

Dùng hàm tách tích chập để chia ngược lại,

[q,r] = deconv(c,a)

q =

4 5 6

r =

0 0 0 0 0

Danh sách đầy đủ các hàm về đa thức gồm:

Đa thức poly Đa thức đặc trưng roots Nghiệm đa thức-phương pháp ma trận liên hợp roots1 Nghiệm đa thức-phương pháp Laguerre polyval Ước lượng đa thức polyvalm Ước lượng đa thức ma trận conv Nhân đa thức deconv Chia đa thức residue Khai triển thừa số từng phần polyfit Vẽ đường cong đa thức

7.2. Xử lý tín hiệu

Các vectơ dùng để giữ các tín hiệu dữ liệu mẫu, hoặc chuỗi, cho việc xử lý tín hiệu. Đối với hệ thống nhiều dữ kiện nhập, mỗi dòng ứng với một điểm mẫu, với viẹc quan sát bảng qua các cột của ma trận. Một vài hàm xử lý tín hiệu được đưa vào hệ thống chính của MATLAB:

Xử lý tín hiệu abs Chuẩn của số phức angle Góc pha conv Tích chập

Page 64: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 7. Đa thức và xử lý tín hiệu 63

Phan Thanh Tao - 2004

cov Hiệp phương sai deconv Tách tích chập fit Biến đổi Fourier nhanh ifft Nghịch đảo biển đổi Fourier nhanh fftshift Hoán đổi dạng toàn phương ma trận

Vài hàm có bản sao 2 chiều, trong trường hợp đó "tín hiệu" đúng là một ma trận:

Xử lý tín hiệu 2 chiều fft2 FFT 2 chiều ifft2 FFT 2 chiều ngược fftshift Sắp xếp lại các kết quả FFT conv2 Tích chập 2 chiều

Có nhiều hàm xử lý tín hiệu nữa có thể sử dụng trong SIGNAL PROCESSING TOOLBOX. Phần này có ý giới thiệu sơ bộ về khả năng xử lý tín hiệu của MATLAB; để biết thêm thông tin xem riêng sách hướng dẫn sử dụng SIGNAL PROCESSING TOOLBOX.

7.3. Lọc dữ liệu

Trong SIGNAL PROCESSING TOOLBOX, hàm

y =filter(b,a,x)

lọc dữ liệu trong vectơ x với bộ lọc mô tả bởi các vectơ a và b, tạo ra dữ liệu y đã lọc. Cấu trúc lọc là bộ lọc dãy tổng quát mô tả bởi phương trình vi phân:

y(n) = b(1)x(n) + b(2)x(n-1) + ... + b(nb)x(n-nb+1)

-a(2)y(n-1) - ... -a(na)y(n-na+1)

hoặc tương đương phép biến đổi Z

H(z) = Y(z)X(z)

=b b b nba a na

z zz z

nb

na

( ) ( ) ... ( )( ) ... ( )

( )

( )

1 21 2

1 1

1 1

+ + +

+ + +

− − −

− − −

Ví dụ, để tìm và vẽ đơn vị n điểm đáp ứng bộ lọc:

x =[1 zeros(1,n-1);

y = filter(b,a,x);

Page 65: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 7. Đa thức và xử lý tín hiệu 64

Phan Thanh Tao - 2004

plot(y,'o')

Hàm freqz trả về kết quả phức của bộ lọc số. Kết quả là hàm H(z) ước lượng quanh đơn vị tròn trong mặt phẳng phức, x =ejω . Để dùng freqz để tìm và vẽ đường cong thực nghiệm n điểm:

[h,w] = frqz(b,a,n);

mag = abs(h);

phase = angle(h);

semilogy(w,mag), plot(w,phase)

Các hàm có thể sử dụng trong SIGNAL PROCESSING TOOLBOX dùng để thiết kế bộ lọc số. Chúng tôi đưa nội dung vào đây để yêu cầu một số kiến thức về kỹ thuật thiết kế bộ lọc, có thể dùng nhiều phương pháp. Ví dụ, các hàm số học về số phức cho phép về kỹ thuật giống như biến đổi song tuyến tính và vẽ cực 0 để đổi sang các nguyên mẫu s-phạm trù sang z-phạm trù. Cũng như thế, các bộ lọc FIR được thiết kế một cách dễ dàng bằng kỹ thuật về cửa sổ.

7.4. FFT(Fast Fourier Transform-Biến đổi Fourier nhanh)

Phải nói rằng thuật toán FFT chủ yếu dùng cho việc tính toán phép biến đổi Fourier của chuổi là thích hợp của việc xử lý tín hiệu số. Miền giá trị sử dụng của nó từ việc lọc dữ liệu, tích chập, tính toán các yêu cầu thường xuyên đến các trình ứng dụng trong việc ước luợng quang năng.

Hàm fft(x) là phép biến đổi Fourier của vectơ x, tính toán biến đổi Fourier cơ số 2 nhanh nếu độ dài của x là bội lũy thừa của 2, và với thuật toán chuyển cơ số nếu độ dài của x không phải là bội lũy thừa của 2. Nếu X là ma trận thì fft(X) là biến đổi Fourier nhanh của mỗi cột của X.

Hàm fft(x,n) là FFT n-điểm. Nếu độ dài của x nhỏ hơn n thì x được thêm với đuôi các số 0 thành độ dài n. Nếu độ dài của x lớn hơn n thì x bị cắt phần đuôi. Khi X là ma trận thì độ dài các cột của X được chỉnh lý theo cùng cách này.

Hàm ifft(x) là phép biến đổi Fourier ngược của vectơ x, hàm ifft(x,n) là FFT ngược n-điểm.

Cặp hai hàm cài đặt phép biến đổi và biến đổi ngược cho bởi:

X(k+1) = x n Nkn

n

N

W( )+=

∑ 10

1

Page 66: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 7. Đa thức và xử lý tín hiệu 65

Phan Thanh Tao - 2004

x(n+1) = 1/N X k Nkn

k

N

W( )+ −

=

∑ 10

1

ở đây WN = e-j (2π/N) và N = length(x). Lưu ý rằng chỉ số được viết theo cách không chính tắc chạy đến n+1 và k+1 thay vì đến n và k bình thường, vì các vectơ của MATLAB chạy từ 1 đến N thay vì từ 0 đến N-1.

Giả sử một dãy độ dài chẵn gồm N điểm có cùng tần số mẫu của fs . Sau đó chuyển sang tần số Nyquist, hoặc điểm n =N/2+1, thì quan hệ giữa số nhị phân và tần số thực là:

f = (bin_number -1)*fs/N

FFT của vectơ cột x

x = [ 4 3 7 -9 1 0 0 0]';

tìm thấy với

y = fft(x)

kết quả là

y =

6.0000

11.4853 - 2.7574 i

-2.0000 - 12.0000 i

-5.4853 + 11.2426 i

18.0000

-5.4853 - 11.2426 i

-2.0000 + 12.0000 i

11.4853 + 2.7574 i

Lưu ý rằng mặc dù dãy x là thực, nhưng y lại là phức. Thành phần thứ nhất của dữ liệu biến đổi là đóng góp DC và phần tử thứ năm tương ứng với tần số Nyquist. Ba giá trị cuối cùng của y tương ứng các tần số âm và, đối với dãy số thực x, chúng là các liên hợp phức của y(4), y(3) và y(2).

Page 67: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 7. Đa thức và xử lý tín hiệu 66

Phan Thanh Tao - 2004

Để biết thêm thông tin thì xem phần tham khảo. Nếu làm nhiều với việc xử lý tín hiệu thì xem sách hướng dẫn sử dụng SIGNAL PROCESSING TOOLBOX.

*******************

Page 68: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 8. Hàm có đối số là hàm 67

Phan Thanh Tao - 2004

Chương 8. HÀM CÓ ĐỐI SỐ LÀ HÀM Một lớp các hàm trong MATLAB không làm việc với các ma trận số mà với

các hàm toán học. Các hàm có đối số là hàm này gồm:

Tích phân số

Phương trình và tối ưu phi tuyến

Giải phương trình vi phân

Các hàm toán học được biểu hiện trong MATLAB bởi các tệp M-file về hàm. Ví dụ, hàm

humps(x) = 13 01

19 04

62 2( . ) . ( . ) .x x− ++

− +−

được tạo ra có thể dùng trong MATLAB bằng cách tạo ra tệp M-file có tên là humps.m:

function y = humps(x)

y = 1 ./ ((x-.3).^2+.01) + 1 ./ ((x-.9).^2 +.04) - 6;

Đồ thị của hàm là:

x = -1:.01:2;

plot(x,humps(x))

Kết quả là hình 8.1.

8.1. Tích phân số

Diện tích vùng dưới hàm humps(x) có thể được xác định bằng tích phân hàm humps(x), một cách xử lý xem như phép cầu phương. Để lấy tích phân hàm humps từ 0 đến 1:

q = quad('humps',0,1)

q =

29.8583

Hai hàm của MATLAB để tính cầu phương là:

Page 69: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 8. Hàm có đối số là hàm 68

Phan Thanh Tao - 2004

Tích phân số quad Phương pháp Simson quad8 Phương pháp Newton

Lưu ý rằng đối số thứ nhất của hàm quad là xâu chữ đặt trong cặp dấu nháy chứa tên của một hàm. Điều này cho thấy tại sao gọi quad là một hàm có đối số là hàm - là một hàm tính toán trên các hàm khác.

Hình 8.1

8.2. Phương trình và tối ưu phi tuyến

Các hàm về hàm dùng cho phương trình và tối ưu phi tuyến gồm:

Phương trình và tối ưu phi tuyến fmin Cực tiểu của hàm một biến fmins Cực tiểu của hàm nhiều biến (Tối ưu phi tuyến không ràng buộc) fsolve Lời giải của hệ phương trình phi tuyến (giá trị không của hàm nhiều biến) fzero Giá trị không của hàm một biến

Page 70: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 8. Hàm có đối số là hàm 69

Phan Thanh Tao - 2004

Tiếp tục ví dụ, vị trí của giá trị cực tiểu của hàm humps(x) trong miền từ 0.5 đến 1 được tính với fmin:

xm = fmin('humps', .5, 1)

xm =

0.6370

Giá trị của nó ở điểm cực tiểu là:

ym = humps(xm)

ym =

11.2528

Theo đồ thị, rõ ràng humps có 2 giá trị 0. Vị trí của giá trị 0 gần x = 0 là:

xz1 = fzero('humps', 0)

xz1 =

-0.1316

Vị trí của giá trị 0 gần x = 1 là:

xz2 = fzero('humps', 1)

xz2 =

1.2995

8.3. Phương trình vi phân

Các hàm của MATLAB để giải phương trình vi phân thường là:

Giải phương trình vi phân ode23

Phương pháp Runge-Kutta cấp 2/3

ode45

Phương pháp Runge-Kutta-Fehlberg cấp 4/5

Xét phương trình vi phân cấp 2 Van der Pol

Page 71: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 8. Hàm có đối số là hàm 70

Phan Thanh Tao - 2004

x.. + (x2 - 1)x

. + x = 0

Có thể viết lại phương trình này như một hệ gồm cặp phương trình vi phân cấp một:

x.

1 = x1(1- 22x ) - x2

x.

2 = x1

Bước thứ nhất đối với việc mô phỏng hệ này là tạo ra một tệp M-file hàm chứa các phương trình vi phân này. Có thể gọi nó là vdpol.m:

function xdot = vdpol(t,x)

xdot(1) = x(1) .* (1 - x(2) .^ 2) - x(2);

xdot(2) = x(1);

xdot = xdot’; % phiên bản mới yêu cầu vectơ cột

Để mô phỏng phương trình vi phân vdpol xác định trên đoạn 0 ≤t≤20, gọi hàm ode23

t0 = 0; tf = 20;

x0 = [ 0 0.25]'; % các điều kiện khởi đầu

[t,x] = ode23('vdpol', t0, tf, x0);

plot(t,x)

Kết quả là hình 8.2.

Page 72: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 8. Hàm có đối số là hàm 71

Phan Thanh Tao - 2004

Hình 8.2

*******************

Page 73: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 9. Đồ thị 72

Phan Thanh Tao - 2004

Chương 9. ĐỒ THỊ Dữ liệu về khoa học và kỹ thuật được xét đến ở dạng đồ thị trong MATLAB

bằng cách dùng các lệnh về đồ họa để tạo ra hình vẽ trên màn hình. Có nhiều kiểu đồ họa khác nhau có thể chọn:

Đồ thị plot Vẽ đường tuyến tính x-y loglog Vẽ loga x-y semilogx Vẽ bán loga x-y (loga trục x) semilogy Vẽ bán loga x-y (loga trục y) polar Vẽ tọa độ cực mesh Vẽ mặt lưới 3 chiều contour Vẽ đường mức bar Vẽ biểu đồ stairs Vẽ đồ thị bậc thang

Khi một đồ thị có trên màn hình thì có thể có nhãn, tiêu đề, hoặc các dòng lưới theo:

title Tiêu đề đồ thị xlabel Nhãn trục x ylabel Nhãn trục y text Văn bản ở vị trí bất kỳ gtext Văn bản ở vị trí chuột grid Các dòng lưới

Có các lệnh để điều khiển việc chia trục và đồ thị:

axis Chia trục hold Giữ hình vẽ trên màn hình shg Hiện màn hình đồ thị clg Xóa màn hình đồ thị subplot Chia màn hình đồ thị thành các cửa sổ con ginput Dấu chữ thập cho chuột

Và có các lệnh để đưa bản sao ra máy in:

print Đưa đồ thị ra máy in prtsc In đồ thị màn hình meta Tạo siêu tệp đồ thị

Page 74: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 9. Đồ thị 73

Phan Thanh Tao - 2004

9.1. Hình vẽ trong mặt phẳng x-y

Lệnh plot tạo ra các hình vẽ mặt phẳng x-y. Khi lệnh plot là chủ thì các hình vẽ loga và cực được tạo ra bằng cách thay các từ loglog, semilogx, semilogy, hoặc polar cho từ plot. Cả 5 lệnh được dùng cùng một cách; chúng chỉ ảnh hưởng đến cách chia trục và cách hiển thị dữ liệu.

9.2. Dạng thức cơ bản

Nếu Y là một vectơ thì lệnh plot(Y) cho ra một hình vẽ gồm các phần tử của Y đối số là chỉ số của các phần tử của Y. Ví dụ, để vẽ các số {0., .48, .84, 1, .91, .6, .14}, nhập chúng vào một vectơ và thực hiện lệnh plot:

Y = [0. .48 .84 1. .91 .6 .14];

plot(Y)

Kết quả là hình 9.1.

Hình 9.1

Page 75: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 9. Đồ thị 74

Phan Thanh Tao - 2004

Lưu ý rằng dữ liệu được chia trục tự động và các trục X và Y được vẽ. Ở điểm này, tùy theo phần cứng của máy sử dụng mà màn hình có đáp ứng các lệnh đánh vào hay không. MATLAB có hai màn hình, một màn hình đồ họa và một màn hình lệnh. Một số cấu hình phần cứng cho phép cả hai màn hình hiện đồng thời, trong khi một số khác chỉ hiện mỗi lúc một màn hình. Nếu màn hình lệnh không còn ở đó nữa thì có thể quay lại bằng cách ấn một phím bất kỳ.

Khi màn hình lệnh đã quay lại thì một tiêu đề đồ thị, nhãn trục X và nhãn trục Y, và các dòng lưới có thể đặt vào hình vẽ bằng cách nhập liên tục vào các lệnh

title('My first plot')

xlabel('fortnights')

ylabel(furlongs')

grid

Kết quả là hình 9.2.

Hình 9.2

Page 76: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 9. Đồ thị 75

Phan Thanh Tao - 2004

Hàm gtext('text') cho phép chuột hoặc các phím mũi tên định vị bằng một dấu chữ thập trên đồ thị, ở điểm mà văn bản sẽ đặt khi có phím hoặc nút chuột được nhấn.

Nếu X và Y là các vectơ cùng độ dài, thì lệnh plot(X,Y) vẽ hình vẽ x-y gồm các phần tử của X đối số là các phần tử của Y. Ví dụ,

t = 0:.05:4*pi;

y = sin(t);

plot(t,y)

Kết quả là hình 9.3.

Hình 9.3

9.3. Nhiều đường

Có hai cách để vẽ nhiều đường trên một đồ thị đơn. Thứ nhất là cho lệnh plot với 2 đối số, như plot(X,Y), ở đây hoặc là X, hoặc là Y, hoặc là cả hai là ma trận. Sau đó:

Page 77: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 9. Đồ thị 76

Phan Thanh Tao - 2004

[1] Nếu Y là ma trận và X là vectơ, thì plot(X,Y) vẽ liên tục các dòng hoặc các cột của Y đối số là vectơ X, dùng kiểu đường khác nhau cho mỗi dòng hoặc cột. Việc "định hướng" dòng hay cột của Y được chọn để có cùng số phần tử như vectơ X. Nếu Y là ma trận vuông thì tự chọn hướng cột.

[2] Nếu X là ma trận và Y là vectơ, thì các quy tắc trên được áp dụng, ngoại trừ các đường từ X được vẽ đối số là vectơ Y.

[3] Nếu cả X và Y là ma trận cùng cỡ, thì plot(X,Y) vẽ các cột của X đối số là các cột của Y.

[4] Nếu không chỉ định X, như plot(Y), ở đây Y là ma trận, thì các đường được vẽ cho mỗi cột của Y đối số là chỉ số dòng.

Cách thứ hai và dễ dàng hơn để vẽ nhiều đường trên một đồ thị đơn là dùng lệnh plot với nhiều đối số:

plot(X1, Y1, X2, Y2, ..., Xn, Yn)

Các biến X1, Y1, X2, Y2, ... là các cặp vectơ. Mỗi cặp x-y đựoc vẽ, phát sinh ra nhiều đường trên đồ thị. Phương pháp nhiều đối số có điều thuận lợi là cho phép các vectơ có dộ dài khác nhau hiển thị trên cùng một đồ thị. Như trước đây, mỗi cặp dùng một kiểu đường khác nhau.

9.4. Kiểu đường và kiểu điểm

9.4.1. Kiểu

Kiểu đường dùng trong đồ thị có thể điều khiển nếu không thỏa mãn kiểu ngầm định . Cũng có thể vẽ điểm bằng các ký hiệu khác nhau. Ví dụ,

plot(X,Y,'x') vẽ một hình vẽ điểm bằng cách dùng các dấu x trong khi

plot(X1,Y1,':',X2,Y2,'+') dùng đường chấm chấm cho đường cong thứ nhất và dấu + cho đường cong thứ hai. Các kiểu đường và kiểu điểm khác là:

Kiểu đường Kiểu điểm đặc - dấu chấm . gạch -- dấu cọng + chấm : dấu sao * chấm gạch -. dấu tròn o dấu x x

Page 78: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 9. Đồ thị 77

Phan Thanh Tao - 2004

9.4.2. Màu

Trong hệ thống có cung cấp màu, thì màu đường và màu điểm có thể chỉ định theo cách tương tự kiểu đường và kiểu điểm. Ví dụ, các lệnh

plot(X,Y,'r')

plot(X,Y,'+g')

dùng màu đỏ cho đồ thị thứ nhất và dấu + màu xanh cho đồ thị thứ hai. Các màu khác là:

Màu đỏ r xanh lá cây g xanh nước biển b trắng w ẩn i

Nếu thiết bị phần cứng không cung cấp màu, thì các màu khác nhau trên màn hình làm cho các kiểu đường vẽ sẽ khác nhau.

9.5. Dữ liệu ảo và phức

Khi đối số của lệnh plot là phức (có phần ảo khác không), thì phần ảo được bỏ qua ngoại trừ khi plot được cho một đối số phức đơn. Đối với trường hợp đặc biệt này, thì kết quả là hình vẽ tắt của hàm phần thực đối số là phần ảo. Do đó lệnh plot(Z), khi Z là một vectơ phức hoặc ma trận phức thì tương đương lệnh plot(real(Z),imag(Z)).

Để vẽ nhiều đường trong mặt phẳng phức thì không có cách vẽ tắt, và các phần thực và ảo phải chỉ định rõ ràng.

9.6. Hình vẽ loga, cực, và biểu đồ

Cách dùng các lệnh loglog, semilogx, semilogy, và polar là giống như lệnh plot. Các lệnh này cho phép dữ liệu được vẽ theo các kiểu khác nhau, nghĩa là trong các hệ tọa độ khác nhau:

• polar(theta, rho) là hình vẽ trong hệ tọa cực của góc theta, theo đơn vị radian, đối số là bán kính rho. Sau đó dùng lệnh grid để vẽ các lưới cực.

• loglog là hình vẽ dùng đơn vị chia trục log10 - log10 .

Page 79: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 9. Đồ thị 78

Phan Thanh Tao - 2004

• semilogx là hình vẽ dùng đơn vị chia trục bán loga. Trục x là log10 trong khi trục y là tuyến tính.

• semilogy là hình vẽ dùng đơn vị chia trục bán loga. Trục y là log10 trong khi trục x là tuyến tính.

Lệnh bar(x) hiển thị biểu đồ thanh của các phần tử của vectơ x, lệnh bar không chấp nhận nhiều đối số. Tương tự, nhưng bỏ qua các đường đứng là lệnh stairs, cho ra hình vẽ bậc thang là hữu ích cho việc vẽ biểu đồ hệ dữ liệu mẫu.

9.7. Vẽ mặt lưới 3 chiều và đường mức

Lệnh mesh(Z) tạo ra hình vẽ phối cảnh 3 chiều của các phần tử trong ma trận Z. Mặt lưới được xác định bởi các tọa độ Z của các điểm bên trên lưới chữ nhật trong mặt phẳng x-y. Hình vẽ được định dạng bằng cách nối các điểm kề nhau bằng các đoạn thẳng.

Lệnh mesh có thể dùng để xem các ma trận lớn, mà nếu in ra ở dạng thức số thì quá lớn. Nó cũng có thể dùng để vẽ các hàm hai biến.

Bước thứ nhất trong việc hiển thị hàm hai biến z = f(x,y) là phát sinh các ma trận X và Y gồm các dòng và các cột lặp tương ứng trên miền giá trị của hàm. Sau đó hàm có thể được tính toán trực tiếp và vẽ.

Xét hàm sin(r)/r hay sinc mà kết quả là mặt mũ phớt rộng vành mà mọi người ưa nhìn Một cách tạo ra là:

x = -8:.5:8;

y = x';

X = ones(size(y))*x;

Y = y*ones(size(x));

R = sqrt(X .^2 + Y .^2) + eps;

Z = sin(R)./R;

mesh(Z)

Lệnh thứ nhất xác định miền giá trị x mà trên đó hàm được ước lượng. Lệnh thứ ba tạo ra ma trận X gồm các dòng lặp. Sau khi phát sinh ma trận Y tương ứng, ma trận R được tạo ra chứa khoảng cách từ tâm của ma trận, đó là gốc. Việc định dạng hàm sinc và áp dụng lệnh mesh kết quả là hình 9.4.

Page 80: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 9. Đồ thị 79

Phan Thanh Tao - 2004

Hình 9.4

Một ma trận đơn vị trông như mặt lưới gì ? Hãy thử lệnh mesh(eye(14)). Với một phương pháp dễ dàng phát sinh các ma trận đặc biệt X và Y đòi hỏi để ước lượng hàm hai biến, xem lệnh meshdom trong phần tham khảo.

Xen vào vẽ lưới là vẽ đường mức để xem nội dung của ma trận. Một đường mức của màng dạng L trong sách hướng dẫn này là

z = membrane(1, 15, 9, 2);

contour(z)

Kết quả làhình 9.5.

Page 81: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 9. Đồ thị 80

Phan Thanh Tao - 2004

Hình 9.5

9.8. Điều khiển màn hình

MATLAB có 2 màn hình, một cửa sổ đồ họa và một của sổ lệnh. Cấu hình phần cứng có thể cho phép cả hai màn hình thấy được đồng thời trên 2 cửa sổ khác nhau, hoặc có chỉ cho phép thấy mỗi lúc một cửa sổ. Một số lệnh dùng để chuyển qua lại giữa 2 cửa sổ, và/hoặc xóa các cửa sổ theo yêu cầu:

shg Hiện cửa sổ đồ họa any key Quay ngược lại cửa sổ lệnh clc Xóa cửa sổ lệnh clg Xóa cửa sổ đồ họa home Đưa con trỏ lệnh về đầu dòng

Ví dụ, nếu trong lúc MATLAB đang làm việc mà chỉ có màn hình lệnh trên màn hình, thì vào lệnh shg sẽ gọi lại hình vẽ cuối cùng đã vẽ trên màn hình đồ họa.

Page 82: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 9. Đồ thị 81

Phan Thanh Tao - 2004

Ngầm định, với cấu hình phần cứng không hiển thị cả hai màn hình lệnh và màn hình đồ họa đồng thời sẽ, tạm dừng trong chế độ vẽ sau khi vẽ xong và chờ ấn phím.

Có thể tách cửa sổ đồ họa thành nhiều phần, nhằm để xem một số hình vẽ cùng một lúc. Lệnh subplot(m,n,p) cắt cửa sổ đồ họa thành mxn lưới và dùng hộp thứ p cho hình vẽ tiếp sau. Ví dụ,

subplot(2, 1, 1), plot(abs(y))

subplot(2, 1, 2), plot(angle(y))

cắt màn hình thành hai, vẽ độ dài của vectơ phức trong nữa trên, và vẽ góc pha trong nữa dưới. Xem hình 9.6.

Lệnh subplot(1, 1, 1), hoặc đúng subplot, trở về cửa sổ đơn ngầm định là toàn màn hình.

Hình 9.6

Page 83: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 9. Đồ thị 82

Phan Thanh Tao - 2004

9.9. Cách chia đơn vị trục tọa độ

Trong trường hợp nào đó, có thể muốn đè lên đặc tính chia trục ngầm định của lệnh vẽ và chọn giới hạn vẽ. Việc thực hiện lệnh axis, chính nó giữ lại cách chia đơn vị trục hiện thời cho các hình vẽ sau. Vào lệnh axis lần nữa tiếp tục chia tự động. Hàm axis trả về vectơ dòng gồm 4 phần tử chứa [x_min, x_max, y_min, y_max] từ hình vẽ cuối cùng. Lệnh axis(V), ở đây V là vectơ 4 phần tử, đặt cách chia trục vào các giới hạn chỉ định.

Dùng lần thứ hai lệnh axis là để điều khiển tỉ lệ phân giải của hình vẽ trên màn hình. Lệnh axis('square') đặt vùng vẽ trên màn hình là hình vuông. Với tỉ số phân giải vuông thì một đường thẳng có hệ số góc 1 đúng là 45 độ, không bị lệch bởi hình dáng không đều của màn hình. Cũng vậy, các đường tròn, như plot(sin(t),cos(t)), giống đường tròn thay vì đường ô-van. Lệnh axis('normal') đặt tỉ lệ phân giải về giá trị chuẩn.

Lệnh hold giữ hình vẽ hiện thời trên màn hình. Lệnh plot tiếp theo sẽ thêm vào hình vẽ, dùng các giới hạn về trục đã thiết lập và duy trì các đường cong đã vẽ trước đó. Lệnh hold vẫn còn hiệu lực cho đến khi được gọi lại.

9.10. Bản sao phần cứng

Ba lệnh prtsc, print và meta, cung cấp các khả năng về phần cứng nói chung: prtsc prtsc khởi động liệt kê cửa sổ đồ họa, như Shift-Prtsc, và cho phép thực hiện trong tệp M-file hoặc trong vòng lặp for. Nói chung, kết quả này theo hình vẽ phân giải thấp, vì điểm ảnh trên màn hình chuyển thành điểm ảnh trên máy in.

meta meta mở một siêu tệp đồ họa, dùng tên tệp chỉ định, và ghi hình vẽ hiện thời vào đó để xử lý về sau. Lệnh meta tiếp sau nối vào tên tệp đã chỉ định trước đó. Siêu tệp có thể được xử lý sau đó, dùng các chương trình xử lý hình vẽ.

print print đưa bản sao phân giải cao của hình vẽ hiện thời ra máy in. Một số máy có giới hạn về bộ nhớ thì lệnh này không thực hiện được.

Cách dễ nhất đễ nhận hình vẽ trên màn hình trên mọi máy tính cá nhân là giữ phím Shift và ấn phím Prtsc. Hoạt động này đưa hình ảnh trong màn hình đồ họa ra máy in.

Xem phần đầu về đặc tả máy của sách hướng dẫn này để biết thêm thông tin về cách nhận bản sao phần cứng.

*******************

Page 84: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 10. Điều khiển luồng 83

Phan Thanh Tao - 2004

Chương 10. ĐIỀU KHIỂN LUỒNG MATLAB có các lệnh điều khiển luồng như đã tìm thấy trong hầu hết các

ngôn ngữ máy tính. Các lệnh điều khiển luồng đưa MATLAB sang cấp độ khác máy tính tay, cho phép nó được dùng như một ngôn ngữ bậc cao về ma trận.

10.1. Vòng lặp FOR

MATLAB có phiên bản riêng của nó về vòng lặp "DO" hoặc "FOR" tìm thấy trong các ngôn ngữ máy tính. Nó cho phép một câu lệnh, một nhóm lệnh, được lặp lại một số lần cố định xác định trước. Ví dụ

for i = 1:n, x(i) = 0, end

gán 0 vào n phần tử đầu của x. Nếu n nhỏ hơn 1 thì lệnh vẫn hợp pháp, nhưng câu lệnh bên trong không được thực hiện. Nếu x chưa có, hoặc có ít hơn n phần tử thì không gian thêm vào được tự động phân phối.

Có thể tổ hợp các vòng lặp và thường thụt vào để dễ đọc.

for i = 1:m

for j = 1:n

A(i,j) = 1/(i+j-1);

end

end

A

Dấu chấm phẩy cuối câu lệnh bên trong vòng lặp để hủy việc in lặp ra màn hình, trong khi lệnh A sau vòng lặp hiển thị kết quả cuối cùng.

Một điển quan trong là: mỗi vòng lặp for phải gắn với từ khóa end. Nếu đơn giản vào lệnh

for i = 1:n, x(i) = 0

thì hệ thống sẽ kiên nhẫn chờ nhập các lệnh còn lại trong thân vòng lặp. Không có gì xảy ra đánh vào end.

Một ví dụ khác, giả sử

Page 85: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 10. Điều khiển luồng 84

Phan Thanh Tao - 2004

t =

-1 0 1 3 5 và muốn phát sinh một ma trận Vandermonde, ma trận có các cột là lũy thừa các phần tử của t.

A =

1 -1 1 -1 1

0 0 0 0 1

1 1 1 1 1

81 27 9 3 1

625 125 25 5 1

ở đây vòng lặp kép rõ ràng nhất.

n = max(size(t));

for j = 1:n

for i = 1:n

A(i,j) = t(i)^(n-j);

end

end

Nhưng vòng lặp đơn với các phép toán trên vectơ có ý nghĩa hơn và cũng minh họa cho vấn đề vòng lặp for có thể chạy ngược.

A(:,n) = ones(n,1);

for j = n-1:-1:1

A(:,j) = t .* A(:,j+1);

Page 86: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 10. Điều khiển luồng 85

Phan Thanh Tao - 2004

end

Dạng tổng quát của vòng lặp for là

for v = expression

statements

end

expression đúng là một ma trận, vì đúng là trong MATLAB. Các cột của ma trận được gán từng cột vào biến v và rồi các lệnh statements được thực hiện. Một cách rõ ràng hơn của việc hoàn thành cùng công việc này là

E = expression;

[m,n] = size(E);

for j = 1:n

v = E(:,j);

statements

end

Thông thường expression là loại như m:n, hoặc m:i:n, đó là ma trận chỉ có một dòng, và bởi vậy các cột của nó đơn giản là các đại lượng vô hướng. Trong trường hợp đặc biệt này, vòng lặp for giống như các vòng lặp "FOR" hay "DO" của các ngôn ngữ lập trình khác.

10.2. Vòng lặp WHILE

MATLAB cũng có phiên bản về vòng lặp "WHILE", cho phép một lệnh hoặc nhóm lệnh lặp lại với số lần không xác định, dưới điều khiển của một điều kiện logic. Sau đây là bài toán đơn giản minh họa cho vòng lăp while. Số nguyên n đầu tiên là số nào để n! (n giai thừa) là một số gồm 100 chữ số ? Vòng lặp while sau đây sẽ tìm ra nó. Nếu chưa biết câu trả lời thì có thể chạy các lệnh này

n = 1;

while(prd(1:n)<1.e100, n = n+1; end

n

Page 87: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 10. Điều khiển luồng 86

Phan Thanh Tao - 2004

Một minh họa tính toán có tính ứng dụng cao hơn về vòng lặp while là tính hàm mũ của một ma trận, trong MATLAB gọi là expm(A). Một định nghĩa có thể có của hàm mũ là chuỗi lũy thừa,

expm(A) = 1 + A + A^2/2! + A^3/3! + ...

Lý do để dùng cách tính toán thực sự này là với số phần tử của A không lớn lắm. ý tưởng này là tính tổng nhiều hạng tử của chuỗi này là cần thiết để cho ra kết quả không đổi nếu một số hạng tử nữa thêm vào độ chính xác số học của máy. Trong vòng lặp sau, A là ma trận đã cho, E sẽ thành lũy thừa mong muốn, F là hạng tử riêng trong chuỗi, và k là chỉ số của hạng tử đó. Các lệnh trong vòng lặp được lặp lại cho đến khi F là quá nhỏ để việc thêm nó vào E không làm thay đổi giá trị của E.

E = zeros(A);

F = eye(A);

k =1;

while norm(E+F-E,1)>0

E = E + F;

F = A*F/k;

k = k+1;

end

Thay vào đó nếu muốn tính mảng hoặc mũ từng phần tử exp(A) thì đúng là phải thay đổi giá trị khởi tạo của F từ eye(A) thành ones(A) và thay đổi tích ma trận A*F thành tích mảng A .*F.

Dạng tổng quát của vòng lặp while là

while expression

statements

end

Các lệnh statements được thực hiện lặp khi tất cả các phần tử trong ma trận biểu thức expression khác không. Ma trận biểu thức thường dùng nhất là một biểu thức quan hệ 1-1, bởi vậy khác không tương ứng với TRUE. Khi ma trận

Page 88: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 10. Điều khiển luồng 87

Phan Thanh Tao - 2004

biểu thức không phải là một đại lượng vô hướng thì có thể thu gọn nó lại bằng các hàm any và all.

10.3. Các lệnh IF và BREAK

Sau đây là cặp ví dụ minh họa cho lệnh if của MATLAB. Đầu tiên trình bày cách tính có thể rơi vào 3 trường hợp, tùy thuộc vào dấu và tính chẵn lẻ của n.

if n<0

A = negative(n)

elseif rem(n,2) == 0

A = even(n)

else

A = odd(n)

end

Ví dụ thứ hai là một bài toán hấp dẫn trong lý thuyết số. Lấy một số nguyên dương bất kỳ. Nếu chẵn thì chia cho 2; nếu lẻ thì nhân 3 cọng 1. Lặp lại tiến trình trên cho đến khi số nguyên bằng 1. Vấn đề lý thú chưa được chứng minh là: Có số nguyên nào để tiến trình không được kết thúc không ? Chương trình MATLAB minh họa cho các câu lệnh while và if. Cũng trình bày hàm input - nhắc người dùng nhập dữ liệu từ bàn phím, và lệnh break - cung cấp một việc nhảy ra ngoài vòng lặp.

% Bài toán cổ "3n+1" trong lý thuyết số.

while 1

n = input(' Nhập n, âm để thoát. ');

if n<=0, break, end

while n >1

if rem(n,2)==0

n = n/2

else

Page 89: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 10. Điều khiển luồng 88

Phan Thanh Tao - 2004

n = 3*n+1

end;

end

end

Có thể chương trình này chạy mãi mãi.

*******************

Page 90: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 11. Siêu tệp M-File 89

Phan Thanh Tao - 2004

Chương 11. SIÊU TỆP M-FILE NGUYÊN BẢN VÀ HÀM

MATLAB thường dùng chế độ dòng lệnh; khi nhập một dòng lệnh đơn thì MATLAB thực hiện ngay lập tức và hiển thị kết quả. MATLAB cũng có khả năng thực hiện một dãy các lệnh lưu trong một tệp. Hai chế độ này tạo thành một môi trường thông dịch.

Các tệp chứa các lệnh của MATLAB gọi là siêu tệp M-file vì chúng có tên mở rộng là ".m" (".m" là lựa chọn của Macintosh). Ví dụ, một tệp tên là bessel.m có thể chứa các lệnh của MATLAB để tính các hàm Bessel.

Một M-file gồm một dãy các lệnh chuẩn của MATLAB, có thể chứa các tham chiếu đến các M-file khác. Một M-file có thể gọi đệ quy đến chính nó.

Một cách dùng M-file là một dãy dài tùy ý các lệnh. Các tệp như thế gọi là các tệp nguyên bản. Một kiểu thứ hai của M-file cung cấp khả năng mở rộng MATLAB. Gọi là tệp hàm, chúng cho phép các hàm mới thêm vào các hàm đã có. Nhiều tính năng của MATLAB nhận được từ khả năng này để tạo ra các hàm mới để giải các bài toán do người dùng chỉ định.

Cả hai kiểu M-file, nguyên bản và hàm, là các tệp văn bản ASCII bình thường, và được tạo ra bằng cách dùng một trình soạn thảo văn bản hay trình xử lý từ, tùy chọn.

11.1. Tệp nguyên bản

Khi nguyên bản được gọi, MATLAB đơn giản thực hiện các lệnh trong tệp, thay cho việc đợi nhập từ bàn phím. Các lệnh trong tệp nguyên bản thực hiện toàn cục trên dữ liệu trong vùng làm việc. Các nguyên bản thường hữu ích cho việc vận hành các phân tích, giải toán, hoặc thực hiện các thiết trí đòi hỏi quá nhiều lệnh mà trở nên cồng kềnh trong chế độ tương tác.

Ví dụ, giả sử các lệnh của MATLAB

% Một M-file để tính các số Fibonnaci

f = [1 1]; i = 1;

while f(i) + f(i+1) <1000

f(i+2) = f(i) + f(i+1);

i = i+1;

Page 91: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 11. Siêu tệp M-File 90

Phan Thanh Tao - 2004

end

plot(f)

được chứa trong một tệp tên là fibno.m. Vào lệnh fibno làm cho MATLAB thực hiện các lệnh, tính 16 số Fibonnaci đầu tiên và tạo ra hình vẽ như hình 11.1.

Hình 11.1

Sau khi thực hiện tệp xong, các biến f và i còn lại trong vùng làm việc.

Các chương trình mẫu của MATLAB là các ví dụ tốt cho cách sử dụng các M-file để thực hiện nhiều nhiệm vụ phức tạp hơn. Tên nguyên bản startup.m được tự động thi hành khi MATLAB được gọi. Các hằng vật lý, các thừa số chuyển đổi kỹ thuật, hoặc các thứ khác muốn định nghĩa trước trong vùng làm việc có thể đặt trong các tệp này. Trên hệ thống mạng hoặc nhiều người dùng, thì có một nguyên bản tên matlab.m được dành riêng để dùng cho quản lý hệ thống. Nó có thể dùng để cài đặt các định nghĩa và các thông điệp rộng rãi.

Page 92: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 11. Siêu tệp M-File 91

Phan Thanh Tao - 2004

11.2. Tệp hàm

Nếu dòng thứ nhất của một M-file chứa từ "function", thì tệp là một tệp hàm. Một hàm khác với một nguyên bản là có thể truyền các đối số, và các biến định nghĩa và thực hiện bên trong tệp là cục bộ của hàm và không thao tác toàn cục trong vùng làm việc. Các tệp hàm là hữu ích cho việc mở rộng MATLAB, đó là tạo ra các hàm MATLAB mới bằng cách dùng chính ngôn ngữ MATLAB.

Sau đây là một ví dụ đơn giản. Tệp mean.m chứa các lệnh:

function y = mean(x)

% MEAN Giá trị trung bình. Đối với vectơ , MEAN(x)

% trả về giá trị trung bình. Đối với ma trận, MEAN(x) là một %vectơ dòng chứa các giá trị trung bình của mỗi cột. [m,n] = size(x);

if m== 1

m = n; % xử lý vectơ dòng.

end

y = sum(x)/m;

Tệp này định nghĩa một hàm mới tên là mean. Hàm mới mean được dùng như mọi hàm MATLAB khác. Ví dụ, nếu Z là một vectơ gồm các số từ 1 đến 99,

Z = 1:99;

giá trị trung bình tìm thấy bằng cách đánh vào

mean(Z)

kết quả là ans =

50

Hãy xét vài chi tiết của mean.m:

• Dòng thứ nhất khai báo tên hàm, các đối số nhập, và các đối số xuất. Không có dòng này thì tệp sẽ là tệp nguyên bản thay vì tệp hàm.

• Dấu % biểu hiện phần còn lại của dòng là lời chú thích và được bỏ qua.

Page 93: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 11. Siêu tệp M-File 92

Phan Thanh Tao - 2004

• Vài dòng đầu cung cấp tư liệu M-file và được hiển thị nếu đánh vào

help mean.

• Các biến m, n, và y là cục bộ của mean và sẽ không còn trong vùng làm việc khi mean thực hiện xong. (Hoặc nếu trước đó đã có thì không bị thay đổi.)

• Không cần phải đặt các số nguyên từ 1 đến 99 vào biến x. Thực ra, dùng mean với biến tên là Z. Vectơ Z chứa các số nguyên từ 1 đến 99 được truyền hoặc sao chép vào mean ở đây nó trở thành một biến cục bộ tên là x.

Một phiên bản có một ít phức tạp hơn của mean gọi là stat tính độ lệch chuẩn:

function [mean, stdev] = stat(x)

[m,n] = size(x);

if m==1

m = n; % xử lý vectơ dòng

end

mean = sum(x)/m;

stdev = sqrt(sum(x.^2)/ m - mean.^);

stat minh họa cho khả năng trả về nhiều đối số xuất.

Một hàm tính hạng ma trận dùng nhiều đối số nhập:

function r = rank(y,tol)

% hạng của một ma trận

s = svd(x);

if (nargin == 1)

tol = max(size(x)) * s(1) * eps;

end

r = sum(s>tol);

Page 94: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 11. Siêu tệp M-File 93

Phan Thanh Tao - 2004

Ví dụ này minh họa cách dùng biến thường xuyên nargin để tìm số đối số nhập. Biến nargout, mặc dù không được dùng ở đây nhưng chứa số đối số xuất.

Vài gợi ý trợ giúp :

Khi một tệp M-hàm được gọi lần đầu thì được biên dịch và đưa vào bộ nhớ. Sau đó có thể sử dụng cho các lần gọi sau mà không biên dịch lại. Nó còn trong bộ nhớ trừ khi không đủ bộ nhớ, trong trường hợp này có thể bị xóa tự động.

Lệnh what trình bày danh sách thư mục các tệp M-file có thể sử dụng trong thư mục hiện hành, lệnh type liệt các tệp M-file, và ! dùng để gọi trình soạn thảo, cho phép tạo ra hoặc sửa đổi tệp M-file.

Nói chung, nếu nhập tên nào đó cho MATLAB, ví dụ đánh vào whoopie, thì MATLAB thông dịch qua các bước sau:

[1] Tìm xem whoopie có phải là một biến.

[2] Kiểm tra whoopie có phải là hàm cài sẵn.

[3] Tìm trong thư mục hiện hành có không một tệp có tên whopie.m.

[4] Tìm trong các thư mục chỉ định bởi biến môi trường

MATLABPATH có không một tệp có tên whoopie.m. ( Xem phần giới thiệu cách cài đặt để học cách đặt biến môi trường MATLABPATH )

Do đó đầu tiên MATLAB thử dùng whoopie như một biến, nếu có, trước khi dùng whoopie như một hàm.

11.3. Các lệnh Echo, input, pause, keyboard

Thông thường, khi thực hiện M-file, các lệnh trong tệp không được hiển thị trên màn hình. Lệnh echo làm cho tệp M-file được thấy khi thực hiện, điều này hữu ích cho việc gỡ rối hoặc làm mẫu. Xem phần tham khảo để biết thêm chi tiết.

Hàm input nhận dữ liệu nhập từ người dùng. Lệnh

n = input('Có bao nhiêu quả táo')

cho người dùng câu văn bản nhắc, đợi người dùng nhập số hoặc biểu thức từ bàn phím. Một cách dùng input là xây dựng M-file điều khiển menu. Công cụ demo là một ví dụ cho trường hợp này.

Page 95: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 11. Siêu tệp M-File 94

Phan Thanh Tao - 2004

Tương tự input, nhưng mạnh hơn, là hàm keyboard. Hàm này gọi bàn phím như một nguyên bản. Đặt trong các tệp M-file, thì đặc tính này giúp ích cho việc gỡ rối, hoặc cho việc thay đổi các biến trong thời gian thi hành.

Lệnh pause tạo ra thủ tục dừng và chờ người dùng ấn phím bất kỳ trước khi tiếp tục. Lệnh pause(n) tạm dừng n giây trước khi tiếp tục.

Cũng có thể định nghĩa các biến toàn cục, mặc dù chúng tôi không khuyên như thế. Xem phần tham khảo nếu có ý muốn.

11.4. Xâu chữ và macro xâu chữ

Các xâu chữ văn bản được nhập vào MATLAB trong cặp nháy đơn. Ví dụ, s = 'Hello'

kết quả là

s =

Hello

Xâu chữ được lưu trong một vectơ, mỗi phần tử một ký tự. Trong trường hợp này, lệnh

size(s)

ans =

1 5

biểu hiện rằng s có 5 phần tử. Các ký tự được lưu giá trị ASCII của chúng và hàm abs trình bày giá trị này,

abs(s)

ans =

72 101 108 108 111

Hàm setstr đặt các vectơ để hiển thị như văn bản thay vì trình bày các giá trị ASCII. Cũng hữu ích là lệnh disp đơn giản hiển thị văn bản có trong biến, và các hàm isstr và strcmp dò tìm và so sánh các xâu chữ tương ứng.

Các biến văn bản có thể nối lại thành xâu chữ lớn bằng cách dùng cặp ngoặc vuông:

Page 96: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 11. Siêu tệp M-File 95

Phan Thanh Tao - 2004

s = [s, 'World']

s =

Hello World

Các giá trị số được chuyển sang các xâu chữ bằng các hàm sprintf, num2str, và int2str. Các giá trị số sau khi chuyển sang xâu chữ thường được nối vào xâu chữ lớn để đặt tiêu đề cho hình vẽ có giá trị số:

f = 70; c =(f-32)/1.8;

title(['Nhiệt độ trong phòng là ',num2str(c),' độ C'])

eval là hàm làm việc với các biến xâu chữ để cài đặt một công cụ macro văn bản khá mạnh mẽ. eval(t) làm cho văn bản chứa trong t được ước lượng. Nếu STRING là văn bản nguồn cho nhiều biểu thức hoặc câu lệnh của MATLAB thì

t ='STRING';

mã hóa văn bản trong t. Đánh vào t in văn bản và eval(t) làm cho văn bản được thông dịch, hoặc là một lệnh hoặc là một nhân tử trong biểu thức. Ví dụ

t = '1/(i+j-1)';

for i = 1:n

for j = 1:n

a(i,j) = eval(t);

end

end

phát sinh ma trân Hilbert cấp n. Một ví dụ khác trình bày văn bản đánh chỉ số,

S = ['x = 3 '

'y = 4 '

'z = sqrt(x*x+y*y) '];

for k = 1:3

eval(S(k,:));

Page 97: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 11. Siêu tệp M-File 96

Phan Thanh Tao - 2004

end

Các xâu chữ tạo thành các dòng của ma trận A cần phải có cùng độ dài. Sau đây là ví dụ cuối cùng trình bày cách eval có thể dùng lệnh load để nạp 10 tệp dữ liệu được đánh số liên tục:

fname = 'mydata';

for i = 1:10

eval(['load ',fname,int2str(i)]

end

Công cụ macro văn bản được ứng dụng hữu hiệu trong việc truyền tên hàm cho các tệp M-hàm. Để lấy ví dụ, xem tệp funm.m trong MATLAB TOOLBOX.

11.5. Chương trình bên ngoài

Có thể, và thương hữu ích, để tạo ra các chương trình độc lập bên ngoài riêng của mình hoạt động như các hàm MATLAB mới. Điều này có thể thực hiện bằng cách viết các tệp M-file để

[1] Lưu các biến trên đĩa,

[2] Chạy các chương trình bên ngoài (đọc các tệp dữ liệu, xử lý chúng, và ghi kết quả trở lại đĩa), và

[3] Nạp các tệp đã xử lý ngược về vùng làm việc.

Ví dụ, sau đây là một M-hàm giả định để tìm lời giải phương trình Garfield dùng chương trình GAREQN bên ngoài

function y = garfield(a,b,q,r)

save gardata a b q r

!gareqn

load gardata

Nó yêu cầu đã viết một chương trình tên là GAREQN (bằng Fortran hoặc ngôn ngữ nào đó) để đọc tệp tên là gardata.mat, xử lý nó, và đặt kết quả trở ra tệp đó. Các chương trình con tiện ích mô tả trong phần sau có thể dùng để đọc và ghi các tệp MAT.

Page 98: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 11. Siêu tệp M-File 97

Phan Thanh Tao - 2004

Công cụ này là một trong các lựa chọn để "liên kết chương trình riêng" vào MATLAB. Một lựa chọn khác là dùng công cụ tệp MEX - một kỹ thuật nhờ đó có thể liên kết vật lý chương trình có đối tượng mới vào MATLAB. Xem phần đặc tả máy để thấy công cụ này có thể dùng cho máy mình không.

11.6. Vấn đề về tốc độ và bộ nhớ

Các thao tác về vectơ và ma trận gắn liền của MATLAB thực hiện nhanh hơn các thao tác được dịch của nó. Điều này có nghĩa là để nhận tốc độ nhanh nhất ngoài MATLAB phải cố gắng vectơ hóa thuật toán trong tệp M-file. Bất kỳ đâu có thể được, các vòng lặp for và while nên chuyển sang các phép toán về vectơ hoặc ma trận. Ví dụ, một cách lấy sin của 1000 số từ 1 đến 10:

i = 0;

for t = 0:.01:10

i = i+1;

y(i) = sin(t);

end

Một phiên bản vectơ hóa của cùng chương trình này là:

t = 0:.01:10;

y = sin(t);

Trên một máy, ví dụ thứ nhất chạy hết 15 giây, trong khi ví dụ thứ hai chỉ tốn 0.6 giây, nhanh gấp 25 lần. Không phải luôn luôn tối ưu được các chương trình phức tạp, nhưng khi tốc độ là quan trọng thì nên tìm cách vectơ hóa thuật toán.

Nếu không thể vectơ hóa mảnh chương trình, thì đây là một cách để làm cho vòng lặp for chạy nhanh hơn: định vị trước mọi vectơ có kết quả xuất được lưu. Ví dụ, việc đưa vào câu lệnh thứ nhất ở đây , dùng hàm zeros, làm cho vòng lặp for thực hiện nhanh đáng kể:

y = zeros(1,100);

for i = 1:100

y(i) = det(x^i);

end

Page 99: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 11. Siêu tệp M-File 98

Phan Thanh Tao - 2004

Lý do là, nếu không định vị trước, thì MATLAB phải tăng kích thước của vectơ y lên 1 qua mỗi lần lặp. Nếu vectơ được định vị trước thì bước này được khử đi và việc thực hiện được nhanh hơn.

Đối với công việc thực hiện với các ma trận lớn trên các máy có bộ nhớ hạn chế, thì ý đồ định vị trước có một tiện lợi thứ hai: là sử dụng bộ nhớ hiệu lực hơn và giúp kiểm tra có chạy tràn bộ nhớ không. Nó trợ giúp vì bộ nhớ có khuynh hướng bị phân mảnh, bởi vậy có thể có nhiều vùng nhớ tự do, nhưng không đủ không gian liên tục để giữ một biến lớn. Việc định vị trước giúp thu gọn sự phân mảnh.

Trong vấn đề về bộ nhớ, nếu lệnh who hiển thị tổng số bộ nhớ tự do còn lại, thì có vài điều về số này có lẽ nên cẩn thận. Nếu xóa một biến trong vùng làm việc, thì con số hiển thị bởi lệnh who thường không tăng lên, trừ khi nó là biến "cao nhất" trong vùng làm việc.

Con số này biểu hiện thực sự tổng bộ nhớ tự do liên tục và chưa dùng. Việc xóa biến cao nhất làm cho bộ nhớ lớn hơn, nhưng xóa biến dưới biến cao nhất không có hiệu lực. Về mặt ứng dụng, toàn bộ ý nghĩa này là có thể có nhiều vùng nhớ tự do hơn lệnh who biểu hiện.

Các máy tính với bộ nhớ ảo không hiển thị tổng số vùng nhớ tự do còn lại vì không có các giới hạn phải chấp nhận của MATLAB hay của phần cứng.

Có một cách tối ưu mà MATLAB thực hiện giúp để biết khi viết M-file. Các đối số gọi hàm M-file không sao chép sang vùng làm việc cục bộ của hàm trừ khi xen vào nội dung của đối số vào bên trong M-hàm. Điều này có nghĩa là không có không tốn bộ nhớ cho việc truyền các biến lớn vào các hàm M-file.

*******************

Page 100: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 12. Về tệp trên đĩa 99

Phan Thanh Tao - 2004

Chương 12. VỀ TỆP TRÊN ĐĨA load và save là các lệnh của MATLAB để lưu vào hoặc lấy ra từ đĩa nội dung

của vùng làm việc. Các lệnh khác quan hệ đến tệp giúp cho việc quản lý đĩa, cho phép các chương trình bên ngoài chạy, và cung cấp khả năng nhập/xuất dữ liệu.

12.1. Thao tác về tệp

Các lệnh dir, type, delete, và chdir cài đặt tập hợp các lệnh về hệ điều hành chung để thao tác về tệp. Sau đây là bảng biểu hiện các lệnh này sắp xếp với các hệ điều hành khác, có lẽ ngưới dùng làm quen với một trong chúng:

MATLAB MS-DOS UNIX VAX/VMSdir dir is dir type type cat type delete del rm delete chdir chdir cd set default

Với hầu hết các lệnh này, đường dẫn, ký tự đại diện, và tên ổ đĩa dùng theo cách thông thường.

Lệnh type khác với lệnh type thông thường ở một điểm đặc biệt; nếu không cho kiểu tệp thì ngầm định là .m. Điều này thuận tiện cho việc hay dùng nhất của lệnh type là để liệt kê các tệp M-file trên màn hình.

Lệnh diary tạo ra nhật ký cho công việc của MATLAB trên đĩa (tuy nhiên không lưu các hình ảnh ). Kết quả là tệp văn bản ASCII phù hợp với việc đưa vào các bản báo cáo và các tài liệu khác dùng trình xử lý từ bất kỳ.

Để biết thêm chi tiết về các lệnh này, xem phần tham khảo hoặc dùng công cụ trợ giúp nóng help.

12.2. Chạy chương trình bên ngoài

Ký tự chấm than, ! , là ký tự thoát và biểu hiện phần còn lại của dòng nhập là lệnh của hệ điều hành. Điều này hoàn toàn có ích cho việc gọi các trình tiện ích hoặc chạy các chương trình khác mà không ra khỏi MATLAB. Ví dụ

!f77 simpleprog

gọi trình biên dịch Fortran và

Page 101: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 12. Về tệp trên đĩa 100

Phan Thanh Tao - 2004

!edt darwin.m

gọi trình soạn thảo edt cho một tệp có tên là darwin.m. Sau khi chương trình này chạy xong, quyền điều khiển trả về cho MATLAB.

Cách xử lý đúng đắn về ! tùy thuộc vào từng loại máy cụ thể. Xem phần đặc tả máy để biết thêm thông tin.

12.3. Nhập và xuất dữ liệu

Dữ liệu từ các chương trình khác và bên ngoài có thể đưa vào MATLAB bằng nhiều cách. Tương tự, dữ liệu MATLAB có thể xuất ra bên ngoài. Cũng có thể có các chương trình thao tác dữ liệu trực tiếp trong các tệp MAT, dạng tệp MATLAB sử dụng.

Cách tốt nhất phụ thuộc vào số lượng dữ liệu đang có, dữ liệu có ở dạng máy có thể đọc được không, dạng gì, v.v... Sau đây là một số lựa chọn; hãy chọn một để tương thích.

[1] Nhập như một danh sách rõ ràng các phần tử. Nếu ít dữ liệu, nhỏ hơn 10x15 phần tử, thì dễ dàng nhập trực tiếp dữ liệu vào bằng cặp ngoặc vuông, [ và ]. Phưong pháp này bất tiện đối với dữ liệu lớn vì không thể sửa dữ liệu nhập nếu bị lỗi.

[2] Tạo trong một M-file. Dùng trình soạn thảo văn bản để tạo ra một nguyên bản M-file chứa danh sách rõ ràng các phần tử. Cách này là tốt khi dữ liệu chưa ở dạng máy có thể đọc được và phải đánh chúng vào. Cơ bản là giống cách 1, có thuận tiện là cho phép dùng trình soạn thảo để thay đổi dữ liệu hoặc sửa lỗi. Sau đó có thể chạy lại M-file để nhập lại dữ liệu.

[3] Nạp từ một tệp ASCII phẳng. Nếu dữ liệu được lưu ở dạng ASCII, với các dòng có độ dài cố định kết thúc bằng ký tự sang dòng,và các khoảng trống ngăn cách các số, thì tệp như thế được gọi là tệp phẳng.(Tệp ASCII phẳng có thể được soạn bằng trình soạn thảo văn bản thông thường.) Các tệp phẳng có thể được đọc trực tiếp vào MATLAB bằng lệnh load. Kết quả được đặt vào một biến có tên là tên tệp.

[4] Viết một chương trình bằng Fortran hoặc C để dịch dữ liệu sang dạng MAT-file.

Vài cách đưa dữ liệu ra bên ngoài là:

[1] Với các ma trận nhỏ, dùng lệnh diary để tạo ra một tệp nhật ký, rồi sau đó liệt kê các biến trong tệp này. Có thể dùng soạn thảo văn bản để thao tác trên tệp nhật ký sau này. Việc xuất dữ liệu của lệnh diary dùng trong suốt thời

Page 102: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Chương 12. Về tệp trên đĩa 101

Phan Thanh Tao - 2004

gian làm việc của MATLAB, nó có ích cho việc đưa dữ liệu vào tài liệu và các bản báo cáo.

[2] Lưu vào một biến bằng lệnh save, với lựa chọn /ascii. Ví dụ,

A rand(4,3);

save temp.dat A/ascii

tạo ra một tệp ASCII tên là temp.dat chứa nội dung:

0.2113 0.8096 0.4832

0.0824 0.8474 0.6135

0.7599 0.4524 0.2749

0.0087 0.8075 0.8807

[3] Viết một chương trình bằng Fortran hoặc C để dịch tệp MAT sang dạng đặc biệt riêng của mình.

Có thể muốn có các chương trình bên ngoài đọc hoặc ghi dữ liệu trực tiếp vào tệp MAT đã dùng các lệnh load và save. Dạng thức của tệp MAT được trình bày dưới lệnh load trong phần tham khảo.

Nếu chương trình viết bằng Fortran hoặc C, thì có vài phục vụ cung cấp trong MATLAB TOOLBOX giúp giao diện chương trình với các tệp MAT:

savemat.for Ghi tệp MAT.

loadmat.for Đọc tệp MAT.

testls1.for Ví dụ sử dụng savemat và loadmat.

testls2.for Ví dụ khác sử dụng savemat và loadmat.

loadmat.c Nạp ma trận từ tệp MAT.

savemat.c Lưu ma trận vào tệp MAT.

testls.c Ví dụ dùng loadmat.c và savemat.c.

Việc cài đặt các phiên bản Fortran của các phục vụ này có thể khác nhau theo từng loại máy.

*******************

Page 103: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 102

Phan Thanh Tao - 2004

PHỤ LỤC

BỘ LỆNH VÀ HÀM

Page 104: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 103

Phan Thanh Tao - 2004

Quaín lyï Lãnh vaì haìm

HELP Âæa ra taìç liãûu tråü giuïp træûc tuyãún Lãûnh HELP liãût kã danh saïch táút caí caïc váún âãö chênh. Mäùi váún âãö tæång æïng våïi mäüt thæ muûc trong âæåìng dáùn MATLABPATH Lãûnh "HELP topic" cho tråü giuïp vãö <topic>. <topic> coï thãø laì mäüt tãn lãûnh hoàûc tãn thæ muûc. Nãúu laì tãn lãûnh thç HELP hiãøn thë thäng tin vãö lãûnh âoï. Nãúu laì tãn thæ muûc thç HELP hiãøn thë näüi dung thæ muûc. MORE ON laìm cho HELP taûm dæìng mäùi khi âáöy maìn hçnh DOC DOC Naûp taìi liãûu hypertext (siãu vàn baín) DOC <topic> naûp taìi liãûu hypertext coï váún âãö chè âënh laì topic Chênh lãûnh DOC naûp danh saïch caïc taìi liãûu hypertext WHAT Liãût kã danh saïch caïc tãûp M-file, MAT- file vaì MEX-file Lãûnh WHAT liãût kã danh saïch caïc tãûp M-file, MAT- file vaì MEX-file trong thæ muûc hiãûn haình. Lãûnh WHAT <dirname> liãût kã caïc tãûp trong thæ muûc <dirname> trãn âæåìng dáùn MATLABPATH. Khäng cáön cho âæåìng dáùn âáöy âuí TYPE Hiãøn thë näüi dung mäüt tãûp vàn baín TYPE foo.bar xem näüi dung tãûp foo.bar TYPE foo xem näüi dung tãûp foo.m LOOKFOR LOOKFOR Tçm caïc âãö muûc HELP LOOKFOR XYZ tçm chuäùi XYZ trong doìng chuï thêch âáöu tiãn cuía vàn baín HELP trong táút caí caïc tãûp M-file tçm trãn âæåìng dáùn MATLABPATH. Khäng cáön cho âæåìng dáùn âáöy âuí. WHAT liãût kã caïc haìm trong mäüt thæ muûc, WHICH tçm thæ muûc chæïa haìm chè âënh, vaì LOOKFOR tçm táút caí caïc haìm trong táút caí caïc thæ muûc maì coï tæì chè âënh WHICH Tçm caïc haìm vaì tãûp WHICH FCN hiãûn âæåìng dáùn âáöy âuí cuía haìm âæåüc chè âënh båíi FCN. Haìm coï thãø laì haìm M-file, MEX-file, âäö hoüa SIMULINK, hoàûc haìm chuáøn. Caïc haìm chuáøn vaì haìm SIMULINK thç âæåüc hiãûn mäüt thäng baïo cho biãút laì haìm chuáøn hay laì haìm thaình pháön cuía SIMULINK

Page 105: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 104

Phan Thanh Tao - 2004

DEMO Laìm máùu vaìi khaí nàng cuía MATLAB, chaûy chæång trçnh Expo cuía MATLAB PATH Kiãøm tra âæåìng dáùn tçm kiãúm cuía MATLAB Lãûnh PATH hiãûn âæåìng dáùn tçm kiãúm hiãûn haình cuía MATLAB. Âæåìng dáùn tçm kiãúm laì biãún mäi træåìng MATLABPATH trong hãû âiãöu haình hoàûc âæåüc âàût båíi MATLABRC, vaì coï thãø chè âënh båíi STARTUP P = PATH traí vãö mäüt chuäùi chæïa âæåìng dáùn trong P PATH(P) âäøi âæåìng dáùn sang P PATH(P1,P2) âäøi âæåìng dáùn sang P1 vaì P2. Do âoï PATH(PATH,P) näúi mäüt thæ muûc måïi vaìo âæåìng dáùn hiãûn haình vaì PATH(P,PATH) cho mäüt âæåìng dáùn måïi bàòng caïch näúi P vaìo træåïc âæåìng dáùn cuî. Nãúu P1 hoàûc P2 âaî coï trãn âæåìng dáùn thç khäng thãm vaìo

Quaín lyï caïc biãún vaì vuìng laìm viãûc

WHO Liãût kã caïc biãún hiãûn haình WHO liãût kã caïc biãún trong vuìng laìm viãûc hiãûn haình WHOS hiãøn thë nhiãöu thäng tin hån vãö mäùi biãún WHO GLOBAL vaì WHOS GLOBAL liãût kã caïc biãún trong vuìng laìm viãûc toaìn cuûc WHOS Hiãøn thë thäng tin âáöy âuí hån vãö caïc biãún hiãûn haình WHOS laì daûng âáöy âuí cuía WHO, liãût kã caïc biãún trong vuìng laìm viãûc hiãûn haình cuìng våïi thäng tin vãö kêch thæåïc, máût âäü, âäü phæïc taûp cuía chuïng, ... LOAD Láúy caïc biãún tæì âéa LOAD <fname> láúy caïc biãún tæì tãûp MAT-file 'fname.mat' Lãûnh LOAD naûp tæì tãûp 'matlab.mat' LOAD <xxx.yyy> âoüc tãûp ASCII xxx.yyy, noï phaíi chæïa mäüt maíng chæî nháût caïc säú liãûu sàõp xãúp thaình m doìng, mäùi doìng gäöm n giaï trë. Kãút quaí laì mäüt ma tráûn cåî mxn tãn laì xxx Âãø naûp mäüt tãûp ASCII maì khäng coï tãn måí räüng thç duìng lãûnh LOAD <fname> -ascii. Ngoaìi ra, MATLAB thãm vaìo pháön måí räüng '.mat' vaì naûp noï nhæ mäüt tãûp MAT-file. Âãø naûp tãûp MAT-file maì khäng coï pháön måí räüng '.mat' thç duìng lãûnh LOAD <fname.ext> -mat. Nãúu tãn tãûp laì "stdio" thç LOAD âoüc tæì thiãút bë nháûp chuáøn

Page 106: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 105

Phan Thanh Tao - 2004

SAVE Læu caïc biãún vaìo âéa SAVE <fname> læu táút caí caïc biãún vaìo tãûp nhë phán "MAT-file" coï tãn <fname.mat>. Dæî liãûu coï thãø láúy laûi våïi lãûnh LOAD. Nãúu boí qua tãn tãûp thç tãn tãûp ngáöm âënh laì "matlab.mat" SAVE fname X chè læu biãún X SAVE fname X Y Z læu X, Y, vaì Z SAVE fname X Y Z -ascii duìng daûng ASCII 8 chæî säú thay cho daûng nhë phán SAVE fname X Y Z -ascii -double duìng daûng ASCII 8 chæî säú SAVE fname X Y Z -ascii -double -tabs caïch nhau caïc khoaíng tab Nãúu tãn tãûp laì "stdio" thç SAVE gæíi dæî liãûu ra thiãút bë xuáút chuáøn. Caïc daûng nhë phán duìng trong tãûp MAT-file phuû thuäüc vaìo kêch thæåïc vaì kiãøu cuía ma tráûn. Caïc ma tráûn nhoí vaì ma tráûn coï säú khäng nguyãn âæåüc læu trong daûng cháúm âäüng 8 byte/säú. Caïc ma tráûn låïn hoàûc nguyãn coï thãø læu trong daûng cä âoüngchè cáön1, 2 hoàûc 4 byte/ säú. Xem caïc phuûc vuû C vaì Fortran vãö âoüc/ghi caïc tãûp MAT-file tæì caïc chæång trçnh bãn ngoaìi CLEAR Xoïa caïc loaûi khaïc nhau trong vuìng laìm viãûc CLEAR xoïa táút caí caïc biãún trong vuìng laìm viãûc CLEAR VARIABLES giäúng CLEAR CLEAR X xoïa biãún hoàûc haìm X CLEAR FUNCTIONS xoïa táút caí caïc haìm biãn dëch M-file CLEAR MEX xoïa táút caí caïc liãn kãút tãûp MEX-file CLEAR ALL xoïa táút caí caïc biãún , caïc haìm vaì caïc liãn kãút MEX Nãúu X toaìn cuûc thç CLEAR X xoaï X trong vuìng laìm viãûc hiãûn haình, nhæng coï thãø truy cáûp åí caïc haìm khai baïo noï toaìn cuûc CLEAR GLOBAL X xoïa biãún toaìn cuûc X CLEAR GLOBAL xoïa táút caí caïc biãún toaìn cuûc PACK Håüp nháút vuìng nhåï laìm viãûc PACK thæûc hiãûn viãûc táûp håüp bäü nhåï vung vaîi. Caïc pháön MATLAB måí räüng coï thãø laìm cho bäü nhåï bë phán nhiãöu maính, ngàn caín viãûc læu caïc biãún låïn. PACK laì lãûnh læu táút caí caïc biãún vaìo âéa, Xoïa bäü nhåï, räöi naûp laûi caïc biãún SIZE Láúy kêch thæåïc ma tráûn D = SIZE(X), våïi ma tráûn X cåî MxN thç traí vãö vectå doìng D = [M, N] chæïa säú doìng vaì säú cäüt cuía ma tráûn X [M,N] = SIZE(X) säú doìng vaì säú cäüt cuía ma tráûn X taïch thaình 2 biãún

Page 107: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 106

Phan Thanh Tao - 2004

M = SIZE(X,1) traí vãö âuïng säú doìng N = SIZE(X,2) traí vãö âuïng säú cäüt LENGTH Láúy säú thaình pháön cuía vectå LENGTH(X) traí vãö âäü daìi cuía vectå X. Tæång âæång MAX(SIZE(X)) DISP Hiãûn mäüt ma tráûn nhæ vàn baín DISP(X) hiãûn ma tráûn maì khäng in ra tãn ma tráûn. Nãúu X chæïa vàn baín thç vàn baín âæåüc hiãøn thë

Laìm viãûc våïi tãûp vaì hãû âiãöu haình

CD Thay âäøi thæ muûc hiãûn haình CD <dir> âàût thæ muûc hiãûn haình laì <dir> CD .. chuyãøn vãö thæ muûc cha Lãûnh CD âãø xem thæ muûc hiãûn haình DIR Xem danh saïch caïc tãûp trong mäüt thæ muûc DIR <dir> liãût kã caïc tãûp trong thæ muûc <dir>. Coï thãø duìng âæåìng dáùn vaì kyï tæû âaûi diãûn DELETE Xoïa mäüt tãûp hay mäüt âäúi tæåüng âäö hoüa DELETE <file_name> xoïa tãûp <file_name> trãn âéa DELETE(H) xoïa âäúi tæåüng âäö hoüa coï theí laì H. Nãúu âäúi tæåüng laì mäüt cæía säø thç cæía säø âæåüc âoïng GETENV Láúy giaï trë mäi træåìng GETENV('NAME'), NAME laì chuäùi vàn baín, tçm danh saïch mäi træåìng våïi chuäùi coï daûng NAME=VALUE vaì traí vãö chuäùi VALUE nãúu coï chuäùi nhæ thãú. Nãúu khäng tçm tháúy tãn chè âënh thç traí vãö mäüt ma tráûn räùng Dáúu ! âãø thi haình mäüt lãûnh cuía hãû âiãöu haình DIARY Læu vàn baín cuía pháön MATLAB DIARY <file_name> taûo mäüt baín sao caïc dæî liãûu nháûp/xuáút ghi vaìo tãûp <file_name> DIARY OFF huíy noï. DIARY ON ngæåüc laûi Lãûnh DIARY láût traûng thaïi hiãûn thåìi

Âiãöu khiãøn cæía säø lãûnh

CLC Xoïa cæíía säø lãûnh vaì âæa con troí vãö âáöu cæía säø

Page 108: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 107

Phan Thanh Tao - 2004

HOME Âæa con troí vãö âáöu cæía säø FORMAT Âàût daûng thæïc xuáút Táút caí caïc tênh toaïn trong MATLAB âæåüc thæûc hiãûn åí âäü chênh xaïc keïp Lãûnh FORMAT coï thãø duìng thay âäøi daûng thæïc hiãøn thë nhæ sau: FORMAT giäúng nhæ SHORT vaì laì ngáöm âënh FORMAT SHORT daûng dáúu cháúm ténh våïi 5 chæî säú FORMAT LONG daûng dáúu cháúm ténh våïi 15 chæî säú FORMAT SHORT E daûng dáúu cháúm âäüng våïi 5 chæî säú FORMAT LONG E daûng dáúu cháúm âäüng våïi 15 chæî säú FORMAT HEX daûng tháûp luûc phán FORMAT + caïc kyï hiãûu +, - vaì dáúu

caïch in ra âäúi våïi caïc pháön tæí dæång, ám, vaì 0. Pháön aío âæåüc boí qua

FORMAT BANK daûng âä_la vaì xu FORMAT COMPACT boí caïc kyï tæû sang doìng FORMAT LOOSE âàût vaìo caïc kyï tæû sang doìng FORMAT RAT xáúp xè bàòng daûng phán säú cho caïc säú nguyãn nhoí ECHO Âæa ra caïc lãûnh trong tãûp nguyãn baín ECHO ON báût viãûc âæa ra caïc lãûnh trong tãûp nguyãn baín ECHO OFF tàõt viãûc âæa ra caïc lãûnh trong tãûp nguyãn baín ECHO file ON , åí âáy 'file' laì tãn haìm laìm cho tãûp haìm âæa ra khi duìng noï ECHO file OFF tàõt noï . ECHO file láût traûng thaïi hiãûn thåìi ECHO ON ALL báût viãûc âæa ra caïc lãûnh trong táút caí caïc tãûp nguyãn baín. ECHO OFF ALL tàõt noï MORE Âiãöu khiãøn xuáút tæìng trang trong cæía säø lãûnh MORE OFF huíy xuáút tæìng trang trong cæía säø lãûnh MORE ON cho pheïp xuáút tæìng trang trong cæía säø lãûnh MORE(N) chè âënh kêch thæåïc trang laì N doìng. Ngáöm âënh laì OFF vaì N = 23 Khi MORE cho pheïp vaì xuáút tæìng trang thç áún ↵ âãø âãún doìng tiãúp theo, áún <spacebar> âãø sang trang tiãúp. ÁÚn phêm "q" âãø thoaït âãö muûc hiãøn thë

Page 109: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 108

Phan Thanh Tao - 2004

Thäng tin chung

INFO Thäng tin vãö MATLAB vaì MathWorks INFO <toolboxpath> hiãûn caïc tãûp Readme cuía toolbox våïi âæåìng dáùn chè âënh WHATSNEW WHATSNEW Hiãûn caïc tãûp cuía MATLAB vaì caïc toolbox WHATSNEW <toolboxpath> hiãûn caïc tãûp Readme cuía toolbox våïi âæåìng dáùn chè

âënh VER Säú phiãn baín cuía MATLAB VER hiãøn thë säú phiãn baín cuía MATLAB vaì toolbox hiãûn thåìi VER(TBX) hiãøn thë thäng tin phiãn baín hiãûn thåìi cuía toolbox chè âënh bàòng chuäùi TBX

Page 110: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 109

Phan Thanh Tao - 2004

Caïc haìm Logic

EXIST Kiãøm tra biãún hoàûc haìm âaî coï EXIST('A') traí vãö: 0 nãúu A khäng coï 1 nãúu A laì mäüt biãún trong vuìng laìm viãûc 2 nãúu A laì mäüt M-file trong âæåìng dáùn tçm kiãúm cuía MATLAB 3 nãúu A laì mäüt MEX-file trong âæåìng dáùn tçm kiãúm cuía MATLAB 4 nãúu A laì haìm SIMULINK âaî âæåüc biãn dëch 5 nãúu A laì haìm cuía MATLAB Læu yï: EXIST('A') cuîng traí vãö 2 nãúu mäüt tãn tãûp âuïng tãn laì 'A' coï trong âæåìng dáùn cuía MATLAB ANY Âuïng nãúu mäüt pháön tæí báït kyì cuía vectå âuïng (khaïc 0) Våïi vectå thç ANY(V) traí vãö 1 nãúu mäüt pháön tæí báït kyì cuía vectå khaïc 0. Ngæåüc laûi traí vãö 0 Våïi ma tráûn thç ANY(X) thæûc hiãûn trãn tæìng cäüt cuía X, traí vãö vectå doìng gäöm caïc säú 1 vaì 0 ALL Âuïng nãúu táút caí caïc pháön tæí cuía vectå âãöu âuïng Våïi vectå thç ALL(V) traí vãö 1 nãúu táút caí caïc pháön tæí cuía vectå khaïc 0. Ngæåüc laûi traí vãö 0 Våïi ma tráûn thç ANY(X) thæûc hiãûn trãn tæìng cäüt cuía X, traí vãö vectå doìng gäöm caïc säú 1 vaì 0 FIND Tçm chè säú cuía caïc pháön tæí khaïc 0 I = FIND(X) traí vãö caïc chè säú cuía caïc pháön tæí khaïc 0. Vê duû, I = FIND(A>100), traí vãö chè säú cuía caïc pháön tæí låïn hån 100 cuía A [I,J] = FIND(X) traí vãö chè säú doìng vaì cäüt cuía caïc pháön tæí khaïc 0 trong ma tráûn X. Thæåìng duìng våïi ma tráûn thæa [I,J,V] = FIND(X) cuîng traí vãö chè säú doìng vaì cäüt cuía caïc pháön tæí khaïc 0 trong ma tráûn X. Læu yï ràòng find(X) vaì find(X~=0) seî cho ra cuìng I vaì J, nhæng sau âoï cho ra V våïi táút caí caïc säú 1 ISNAN Âuïng nãúu khäng phaíi laì mäüt säú (NaN, Not-A-Number nhæ 0/0) ISNAN(X) traí vãö 1våïi caïc pháön tæí cuía X laì NaN vaì 0 nãúu khaïc Vê duû ISNAN([pi NaN Inf -Inf]) laì [0 1 0 0] ISINF Âuïng våïi caïc pháön tæí khäng xaïc âënh (1/0 chàóng haûn)

Page 111: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 110

Phan Thanh Tao - 2004

ISINF(X) traí vãö 1 våïi caïc pháön tæí cuía X laì +Inf hoàûc -Inf vaì 0 nãúu khaïc Vê duû, isinf([pi NaN Inf -Inf]) laì [0 0 1 1] FINITE Âuïng våïi caïc pháön tæí xaïc âënh FINITE(X) traí vãö 1 våïi caïc pháön tæí cuía X laì xaïc âënh vaì 0 nãúu khäng xaïc âënh Vê duû, finite ([pi NaN Inf -Inf]) laì [1 0 0 0] ISEMPTY ISEMPTY Âuïng våïi caïc ma tráûn räùng ISEMPTY(X) traí vãö 1 nãúu X laì mäüt ma tráûn räùng vaì 0 nãúu khäng räùng. Mäüt ma tráûn räùng coï kêch thæåïc 0 êt nháút 1 chiãöu, nhæ 0x0, 0x5, ... ISSPARSE ISSPARSE Âuïng nãúu laì ma tráûn thæa ISSPARSE(S) laì 1 nãúu låïp læu træî cuía S laì thæa vaì 0 nãúu ngæåüc laûi ISSTR Âuïng våïi chuäùi kyï tæû ISSTR(S) traí vãö 1 nãúu S laì mäüt chuäùi kyï tæû vaì 0 nãúu ngæåüc laûi ISGLOBAL ISGLOBAL Âuïng våïi caïc biãún toaìn cuûc ISGLOBAL(A) laì 1 nãúu A laì biãún toaìn cuûc, 0 nãúu ngæåüc laûi

Caïc haìm dæî liãûu cå baín

MAX Âäúi våïi vectå thç MAX(X) laì pháön tæí låïn nháút trong X. Våïi ma tráûn thç MAX(X) laì vectå doìng chæïa pháön tæí låïn nháút trãn mäùi cäüt [Y,I] = MAX(X) læu chè säú cuía caïc giaï trë låïn nháút trong vectå I MAX(X,Y) traí vãö mäüt ma tráûn cuìng kêch thæåïc våïi X vaì Y våïi caïc pháön tæí låïn nháút láúy ra tæì X hoàûc Y. Våïi säú phæïc thç duìng MAX(ABS(X)) MIN Âäúi våïi vectå thç MIN(X) laì pháön tæí nhoí nháút trong X. Våïi ma tráûn thç MIN(X) laì vectå doìng chæïa pháön tæí nhoí nháút trãn mäùi cäüt [Y,I] = MIN(X) læu chè säú cuía caïc giaï trë nhoí nháút trong vectå I MIN(X,Y) traí vãö mäüt ma tráûn cuìng kêch thæåïc våïi X vaì Y våïi caïc pháön tæí nhoí nháút láúy ra tæì X hoàûc Y. Våïi säú phæïc thç duìng MIN(ABS(X)) MEAN

Page 112: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 111

Phan Thanh Tao - 2004

Tênh giaï trë trung bçnh Âäúi våïi vectå thç MEAN(X) laì giaï trë trung bçnh cuía caïc pháön tæí trong X. Våïi ma tráûn thç MEAN(X) laì vectå doìng chæïa giaï trë trung bçnh cuía mäùi cäüt MEDIAN Tênh giaï trë trung gian Âäúi våïi vectå thç MEDIAN(X) laì giaï trë trung gian cuía caïc pháön tæí låïn trong X. Våïi ma tráûn thç MEDIAN(X) laì vectå doìng chæïa giaï trë trung gian cuía mäùi cäüt STD Âäü lãûch chuáøn Âäúi våïi vectå thç STD(X) laì âäü lãûch chuáøn. Våïi ma tráûn thç STD(X) laì vectå doìng chæïa âäü lãûch chuáøn cuía mäùi cäüt STD tênh âäü lãûch chuáøn "tiãu biãøu", âæåüc chuáøn hoïa N-1, våïi N laì âäü daìi cuía daîy SORT Sàõp xãúp tàng dáön SORT(X) sàõp xãúp mäùi cäüt theo thæï tæû tàng dáön. Nãúu X phæïc thç caïc pháön tæí âæåüc sàõp xãúp theo ABS(X) [Y,I] = SORT(X) cuîng traí vãö mäüt ma tráûn chè säú I. Nãúu X laì vectå thç Y = X(I). Nãúu X laì ma tráûn cåî mxn thç for j = 1:n, Y(:,j) = X(I(:,j),j) SUM Tênh täøng caïc pháön tæí Âäúi våïi vectå thç SUM(X) laì täøng caïc pháön tæí cuía X. Våïi ma tráûn thç SUM(X) laì vectå doìng chæïa täøng cuía mäùi cäüt. SUM(DIAG(X)) laì vãút cuía X PROD Tênh têch caïc pháön tæí Âäúi våïi vectå thç PROD (X) laì têch caïc pháön tæí cuía X. Våïi ma tráûn thç PROD (X) laì vectå doìng chæïa têch cuía mäùi cäüt CUMSUM Tênh täøng têch luîy caïc pháön tæí Âäúi våïi vectå thç CUMSUM(X) laì täøng têch luîy caïc pháön tæí cuía X. Våïi ma tráûn thç CUMSUM(X) laì vectå doìng chæïa täøng têch luîy cuía mäùi cäüt CUMPROD Tênh têch têch luîy caïc pháön tæí Âäúi våïi vectå thç CUMPROD (X) laì têch têch luîy caïc pháön tæí cuía X. Våïi ma tráûn thç CUMPROD (X) laì vectå doìng chæïa têch têch luîy cuía mäùi cäüt TRAPZ Tênh têch phán säú bàòng phæång phaïp hçnh thang

Page 113: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 112

Phan Thanh Tao - 2004

Z = TRAPZ(X,Y) tênh têch phán cuía Y theo X bàòng caïch duìng têch phán hçnh thang. X vaì Y phaíi laì caïc vectå cuìng âäü daìi, hoàûc X phaíi laì vectå cäüt vaì Y laì ma tráûn cuìng säú doìng våïi X. TRAPZ tênh têch phán cuía mäùi cäüt tæång æïng. Kãút quaí Z laì mäüt âaûi læåüng vä hæåïng hoàûc laì mäüt vectå doìng Z = TRAPZ(Y) tênh têch phán hçnh thang Y våïi giaí thiãút khoaíng caïch giæîa caïc âiãøm laì âån vë. Tênh têch phán cho caïc khoaíng khaïc nhau thç nhán Z våïi khoaíng tàng

Vi phán xaïc âënh

DIFF Vi phán hoàûc sai phán DIFF coï thãø âæåüc goüi våïi caïc âäúi säú laì säú hoàûc cäng thæïc. Våiï âäúi säú laì vectå säú thç DIFF tênh caïc sai phán. Våïi vectå X thç DIFF(X) laì [X(2)-X(1) X(3)-X(2) ... X(n)-X(n-1)] Våïi ma trán X thç DIFF(X) ma tráûn caïc cäüt sai phán [X(2:n,:) - X(1:n-1,:)] DIFF(X,n) laì haìm sai phán báûc n Våïi âäúi säú cäng thæïc (chuäùi) thç DIFF duìng Symbolic Math Toolbox âãø tênh âaûo haìm DIFF(S) tênh vi phán cuía S æïïng våïi biãún âäüc láûp cuía noï DIFF(S,'v') tênh vi phán cuía S æïïng våïi biãún 'v' DIFF(S,n) vaì DIFF(S,'v',n) vi phán S n láön DIFF khäng tham säú tênh vi phán biãøu thæïc træåïc GRADIENT Xáúp xè gradient [PX,PY] = GRADIENT(Z,DX,DY) traí vãö âaûo haìm vãö säú tæìng pháön cuía ma tráûn Z PX = dZ/dx vaì PY = dZ/dy. DX vaì DY coï thãø laì caïc vä hæåïng chæïa khoaíng máùu trong hæåïng cuía X vaì Y, hoàûc chuïng coï thãø laì caïc vectå chæïa táút caí caïc vë trê roî raìng [PX,PY] = GRADIENT(Z) giaí thiãút DX = DY = 1 Nãúu Y laì vectå thç GRADIENT(Y) vaì GRADIENT(Y,DX) traí vãö âaûo haìm säú mäüt chiãöu dY/dX DEL2 Nàm âiãøm råìi raûc Laplace V = del2(U) laì mäüt ma tráûn cuìng cåî våïi U våïi mäùi pháön tæí bàòng sai phán giæîa mäüt pháön tæí cuía ma tráûn U vaì trung bçnh cäüng cuía bäún pháön tæí lán cáûn. Våïi caïc pháön tæí åí “goïc” vaì “ caûnh” thç chè mäüt hoàûc ba pháön tæí âæåüc tênh

Caïc thao taïc vãö vectå

CROSS Têch coï hæåïng vectå

Page 114: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 113

Phan Thanh Tao - 2004

C = CROSS(A,B) traí vãö têch coï hæåïng cuía caïc vectå A vaì B. Âoï laì, C = A x B. A vaì B phaíi laì caïc vectå 3 chiãöu. Nãúu A vaì B laì caïc ma tráûn cåî 3xN thç C laì ma tráûn cåî 3xN chæïa têch coï hæåïng giæîa caïc cäüt tæång æïng cuía A vaì B DOT Têch vä hæåïng vectå C = DOT(A,B) traí vãö têch vä hæåïng cuía caïc vectå A vaì. A vaì B phaíi laì caïc vectå cuìng âäü daìi. Nãúu A vaì B laì caïc ma tráûn cåî MxN (våïi caïc vectå cäüt) thç C laì vectå doìng âäü daìi N chæïa caïc têch vä hæåïng giæîa caïc cäüt tæång æïng cuía A vaì B Våïi caïc vectå cäüt, thay vaìo âoï duìng A'*B

Caïc hãû säú tæång quan

CORRCOEF CORRCOEF laì hãû säú tæång quan CORRCOEF(X) laì ma tráûn caïc hãû säú tæång quan taûo nãn tæì maíng X maì mäùi doìng cuía noï laì mäüt quan tràõc, vaì mäùi cäüt laì mäüt biãún CORRCOEF(X,Y) giäúng nhæ CORRCOEF([X Y]) Nãúu C ma tráûn phhæång sai, C = COV(X), thç CORRCOEF(X) laì ma tráûn maì pháön tæí thæï (i,j) laì C(i,j)/SQRT(C(i,i)*C(j,j)) COV Ma tráûn phæång sai Nãúu X laì vectå thç COV(X) laì mäüt biãún. Våïi ma tráûn thç mäùi doìng laì mäüt quan tràõc, vaì mäùi cäüt laì mäüt biãún, COV(X) laì ma tráûn phæång sai. DIAG(COV(X)) laì mäüt vectå caïc biãún cho mäùi cäüt, vaì SQRT(DIAG(COV(X))) laì vectå caïc âäü lãûch chuáøn. COV(X,Y) bàòng COV([X Y]), våïi X vaì Y laì caïc vectå cäüt cuìng âäü daìi SUBSPACE SUBSPACE laì goïc giæîa 2 khäng gian con SUBSPACE(A,B) tçm goïc giæîa 2 khäng gian con chè âënh båíi caïc cäüt cuía A vaì B. Nãúu A vaì B laì caïc vectå coï âäü daìi âån vë thç bàòng ACOS(A'*B) Nãúu goïc nhoí thç 2 khäng gian gáön phuû thuäüc tuyãún tênh. Trong thê nghiãûm váût lyï mä taí båíi vaìi quan tràõc A vaì mäüt thæûc haình thæï hai cuía thê nghiãûm mä taí båíi B, SUBSPACE(A,B) cho caïc âäü âo cuía täøng säú thäng tin måïi aính hæåíng båíi thê nghiãûm thæï hai khäng quan hãû våïi caïc sai säú thäúng kã cuía caïc thay âäøi

Loüc vaì têch cháûp

FILTER Loüc säú

Page 115: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 114

Phan Thanh Tao - 2004

Y = FILTER(B, A, X) loüc dæî liãûu trong vectå X våïi bäü loüc mä taí båíi caïc vectå A vaì B âãø tao ra viãûc loüc dæî liãûu. Bäü loüc thæûc hiãûn "Biãún âäøi træûc tiãúp daûng II " cuía phæång trçnh vi phán chuáøn: y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb) - a(2)*y(n-1) - ... - a(na+1)*y(n-na) [Y,Zf] = FILTER(B,A,X,Zi) cho truy xuáút caïc âiãöu kiãûn âáöu vaì cuäúi, Zi vaì Zf, cuía thåìi gian keïo trãù (trç hoaîn) FILTER2 FILTER2 loüc hai chiãöu Y = FILTER2(B,X) loüc dæî liãûu trong vectå X våïi bäü loüc hai chiãöu trong ma tráûn B. Kãút quaí, Y, âæåüc tênh bàòng têch cháûp 2 chiãöu vaì cuìng cåî våïi X Y = FILTER2(B,X,'shape') traí vãö Y tênh thäng qua têch cháûp 2 chiãöu våïi kêch thæåïc chè âënh båíi 'shape': 'same' - (ngáöm âënh) traí vãö pháön tám cuía têch cháûp cuìng kêch thæåïc våïi X 'valid' - chè traí vãö caïc pháön cuía têch cháûp maì âæåüc tênh khäng coï caïc caûnh thãm giaï trë 0, size(Y) < size(X) 'full' - traí vãö têch cháûp hai chiãöu âáöy âuí, size(Y) > size(X)

Page 116: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 115

Phan Thanh Tao - 2004

CONV Têch cháûp vaì têch âa thæïc C = CONV(A, B) têch cháûp caïc vectå A vaì B. Vectå kãút quaí coï âäü daìi LENGTH(A)+LENGTH(B)-1. Nãúu A vaì B laì caïc vectå hãû säú âa thæïc thç têch cháûp cuía chuïng laì têch 2 âa thæïc CONV2 Têch cháûp 2 chiãöu C = CONV2(A, B) thæûc hiãûn têch cháûp 2 chiãöu cuía caïc ma tráûn A vaì B. Nãúu [ma,na] = size(A) vaì [mb,nb] = size(B) thç size(C) = [ma+mb-1,na+nb-1]. C = CONV2(A,B,'shape') traí vã pháön con cuía têch cháûp 2 chiãöu våïi kêch thæåïc chè âënh båíi 'shape': 'full' - (ngáöm âënh) traí vãö têch cháûp 2 chiãöu âáöy âuí 'same' - traí vãö pháön tám cuía têch cháûp cuìng cåî våïi A 'valid' - chè traí vãö caïc pháön cuía têch cháûp maì âæåüc tênh khäng coï caïc caûnh thãm giaï trë 0, size(C) = [ma-mb+1,na-nb+1] nãúu size(A) > size(B) CONV2 nhanh nháút khi size(A) > size(B) DECONV Taïch cháûp vaì chia âa thæïc [Q,R] = DECONV(B,A) taïch vectå A ra khoíi vectå B. Kãút quaí traí vãö trong vectå Q vaì pháön coìn laûi trong vectå R maì B = conv(Q,A) + R Nãúu A vaì B laì caïc vectå hãû säú âa thæïc thç taïch cháûp laì chia âa thæïc. Kãút quaí cuía pheïp chia B cho A laì thæång Q vaì coìn laûi R BESSELF Thiãút kãú bäü loüc tæång tæû Bessel [b,a] = besself(n,Wn) [b,a] = besself(n,Wn,'ftype') [z,p,k] = besself(...) [A,B,C,D] = besself(...) BILINEAR Chuyãøn bäü loüc tæång tæû sang säú theo phæång phaïp biãún âäøi song tuyãún tênh [zd,pd,kd] = bilinear(z,p,k,Fs) [zd,pd,kd] = bilinear(z,p,k,Fs,Fp) [numd,dend] = bilinear(num,den,Fs) [numd,dend] = bilinear(num,den,Fs,Fp) [Ad,Bd,Cd,Dd] = bilinear(A,B,C,D,Fs) [Ad,Bd,Cd,Dd] = bilinear(A,B,C,D,Fs,Fp) BLACKMAN Cæía säø Blackman w = blackman(n) w = blackman(n,sflag) BOXCAR Cæía säú chæî nháût

Page 117: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 116

Phan Thanh Tao - 2004

w = boxcar(n) BUTTAP Nguyãn máùu loüc tæång tæû Butterworth [z,p,k] = buttap(n) BUTTER Thiãút kãú bäü loüc tæång tæû vaì säú Butterworth [b,a] = butter(n,Wn) [b,a] = butter(n,Wn,'ftype') [b,a] = butter(n,Wn,'s') [b,a] = butter(n,Wn,'ftype','s') [z,p,k] = butter(...) [A,B,C,D] = butter(...) BUTTORD Choün thæï tæû bäü loüc Butterworth [n,Wn] = buttord(Wp,Ws,Rp,Rs) [n,Wn] = buttord(Wp,Ws,Rp,Rs,'s') CHEB1AP Nguyãn máùu bäü loüc tæång tæû Chebyshev loaûi I [z,p,k] = cheb1ap(n,Rp) CHEB1ORD Choün thæï tæû loüc Chebyshev loaûi 1 [n,Wn] = cheb1ord(Wp,Ws,Rp,Rs) [n,Wn] = cheb1ord(Wp,Ws,Rp,Rs,'s') CHEB2AP Nguyãn máùu loüc Chebyshev loaûi II [z,p,k] = cheb2ap(n,Rs) CHEB2ORD Choün thæï tæû loüc Chebyshev loaûi II [n,Wn] = cheb2ord(Wp,Ws,Rp,Rs) [n,Wn] = cheb2ord(Wp,Ws,Rp,Rs,'s') CHEBWIN Cæía säø Chebyshev w = chebwin(n,r) CHEBY1 Thiãút kãú bäü loüc Chebyshev loaûi I [b,a] = cheby1(n,Rp,Wn) [b,a] = cheby1(n,Rp,Wn,'ftype') [b,a] = cheby1(n,Rp,Wn,'s') [b,a] = cheby1(n,Rp,Wn,'ftype','s') [z,p,k] = cheby1(...) [A,B,C,D] = cheby1(...) CHEBY2 Thiãút kãú bäü loüc Chebyshev loaûi II [b,a] = cheby2(n,Rs,Wn) [b,a] = cheby2(n,Rs,Wn,'ftype')

Page 118: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 117

Phan Thanh Tao - 2004

[b,a] = cheby2(n,Rs,Wn,'s') [b,a] = cheby2(n,Rs,Wn,'ftype','s') [z,p,k] = cheby2(...) [A,B,C,D] = cheby2(...) CHIRP Phaït sinh âæåìng cosine táön säú rung y = chirp(t,f0,t1,f1) y = chirp(t,f0,t1,f1,'method') y = chirp(t,f0,t1,f1,'method',phi) CONV2 Têch cháûp 2 chiãöu C = CONV2(A, B) thæûc hiãûn têch cháûp 2 chiãöu cuía caïc ma tráûn A vaì B. Nãúu [ma,na] = size(A) vaì [mb,nb] = size(B) thç size(C) = [ma+mb-1,na+nb-1]. C = CONV2(A,B,'shape') traí vã pháön con cuía têch cháûp 2 chiãöu våïi kêch thæåïc chè âënh båíi 'shape': 'full' - (ngáöm âënh) traí vãö têch cháûp 2 chiãöu âáöy âuí 'same' - traí vãö pháön tám cuía têch cháûp cuìng cåî våïi A 'valid' - chè traí vãö caïc pháön cuía têch cháûp maì âæåüc tênh khäng coï caïc caûnh thãm giaï trë 0, size(C) = [ma-mb+1,na-nb+1] nãúu size(A) > size(B) CONV2 nhanh nháút khi size(A) > size(B) CONVMTX Têch cháûp ma tráûn A = convmtx(c,n) A = convmtx(r,n) Vê duû: h = [1 2 3 2 1]; convmtx(h,7) ans = 1 2 3 2 1 0 0 0 0 0 0 0 1 2 3 2 1 0 0 0 0 0 0 0 1 2 3 2 1 0 0 0 0 0 0 0 1 2 3 2 1 0 0 0 0 0 0 0 1 2 3 2 1 0 0 0 0 0 0 0 1 2 3 2 1 0 0 0 0 0 0 0 1 2 3 2 1 CPLXPAIR Nhoïm caïc säú phæïc thaình caïc càûp liãn håüp y = cplxpair(x) y = cplxpair(x,tol)

Page 119: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 118

Phan Thanh Tao - 2004

CREMEZ Thiãút kãú bäü loüc FIR våïi pha âäü rung phi tuyãún b = cremez(n,f,'fresp') b = cremez(n,f,'fresp',w) b = cremez(n,f,{'fresp',p1,p2,...},w) b = cremez(n,f,a,w) b = cremez(...,'sym') b = cremez(...,'skip_stage2') b = cremez(...,'debug') b = cremez(...,{lgrid}) [b,delta,opt] = cremez(...) CZT Chirp biãún âäøi Z y = czt(x,m,w,a) y = czt(x) DCT Biãún âäøi cosine råìi raûc y = dct(x) y = dct(x,n) ELLIP Tiãút kãú bäü loüc Elliptic (Cauer) [b,a] = ellip(n,Rp,Rs,Wn) [b,a] = ellip(n,Rp,Rs,Wn,'ftype') [b,a] = ellip(n,Rp,Rs,Wn,'s') [b,a] = ellip(n,Rp,Rs,Wn,'ftype','s') [z,p,k] = ellip(...) [A,B,C,D] = ellip(...) ELLIPAP Nguyãn máùu bäü loüc tæång tæû Elliptic [z,p,k] = ellipap(n,Rp,Rs) ELLIPORD Choün thæï tæû bäü loüc Elliptic [n,Wn] = ellipord(Wp,Ws,Rp,Rs) [n,Wn] = ellipord(Wp,Ws,Rp,Rs,'s') FFT Biãún âäøi Fourier nhanh 1 chiãöu y = fft(x) y = fft(x,n) FFT2 Biãún âäøi Fourier nhanh 2 chiãöu Y = fft2(X) Y = fft2(X,m,n) FFTFILT Loüc FIR-FFT bàòng phæång phaïp chäöng thãm y = fftfilt(b,x) y = fftfilt(b,x,n)

Page 120: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 119

Phan Thanh Tao - 2004

FFTSHIFT Sàõp xãúp laûi dæî liãûu xuáút cuía haìm FFT y = fftshift(x) FILTFILT Loüc säú pha Zero y = filtfilt(b,a,x) FILTIC Tçm âiãöu kiãûn âáöu cho caïch caìi âaût bäü loüc biãún âäøi træûc tiãúp daûng II z = filtic(b,a,y,x) z = filtic(b,a,y) FREQS Âaïp æïng táön säú cuía caïc bäü loüc tæång tæû h = freqs(b,a,w) [h,w] = freqs(b,a) [h,w] = freqs(b,a,n) freqs(b,a) FREQSPACE Khäng gian táön säú cho âaïp æïng táön säú f = freqspace(n) f = freqspace(n,'whole') [f1,f2] = freqspace(n) [f1,f2] = freqspace([m n]) [x1,y1] = freqspace(n,'meshgrid') [x1,y1] = freqspace([m n],'meshgrid') FREQZ Âaïp æïng táön säú cuía caïc bäü loüc säú [h,w] = freqz(b,a,n) [h,f] = freqz(b,a,n,Fs) [h,w] = freqz(b,a,n,'whole') [h,f] = freqz(b,a,n,'whole',Fs) h = freqz(b,a,w) h = freqz(b,a,f,Fs) freqz(...)

Page 121: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 120

Phan Thanh Tao - 2004

GRPDELAY Trung bçnh cäüng cuía trãù bäü loüc (nhoïm trãù) [gd,w] = grpdelay(b,a,n) [gd,f] = grpdelay(b,a,n,Fs) [gd,w] = grpdelay(b,a,n,'whole') [gd,f] = grpdelay(b,a,n,'whole',Fs) gd = grpdelay(b,a,w) gd = grpdelay(b,a,f,Fs) grpdelay(b,a) HAMMING Cæía säø Hamming w = hamming(n) w = hamming(n,sflag) HANNING Cæía säø Hanning w = hanning(n) w = hanning(n,sflag) HILBERT Biãún âäøi Hilbert y = hilbert(x) IMPZ Âaïp æïng xung cuía caïc bäü loüc säú [h,t] = impz(b,a) [h,t] = impz(b,a,n) [h,t] = impz(b,a,n,Fs) impz(b,a) impz(...) INTFILT Thiãút kãú bäü loüc FIR näüi suy b = intfilt(r,l,alpha) b = intfilt(r,n,'Lagrange') KAISER Cæía säø Kaiser w = kaiser(n,beta) KAISERORD Æåïc læåüng caïc tham säú cho thiãút kãú bäü loüc FIR våïi cæía säú Kaiser [n,Wn,beta,ftype] = kaiserord(f,a,dev) [n,Wn,beta,ftype] = kaiserord(f,a,dev,Fs) c = kaiserord(f,a,dev,Fs,'cell') LATC2TF Chuyãøn bäü loüc Lattice sang haìm biãún âäøi [num,den] = latc2tf(k,v) [num,den] = latc2tf(k,'iir') num = latc2tf(k,'fir') num = latc2tf(k) LATCFILT

Page 122: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 121

Phan Thanh Tao - 2004

Caìi bäü loüc Lattice vaì lattice-ladder [f,g] = latcfilt(k,x) [f,g] = latcfilt(k,v,x) [f,g] = latcfilt(k,1,x) [f,g,zf] = latcfilt(...,'ic',zi) LEVINSON Âãû quy Levinson-Durbin a = levinson(r,p) REMEZ Thiãút kãú bäüloüc FIR täúi æu Parks-McClellan b = remez(n,f,a) b = remez(n,f,a,w) b = remez(n,f,a,'ftype') b = remez(n,f,a,w,'ftype') b = remez(...,{lgrid}) b = remez(n,f,'fresp',w) b = remez(n,f,'fresp',w,'ftype') b = remez(n,f,{'fresp',p1,p2,...},w) b = remez(n,f,{'fresp',p1,p2,...},w,'ftype') [b,delta] = remez(...) [b,delta,opt] = remez(...) REMEZORD Tênh thæï tæû bäüloüc FIR täúi æu Parks-McClellan [n,fo,ao,w] = remezord(f,a,dev) [n,fo,ao,w] = remezord(f,a,dev,Fs) c = remezord(f,a,dev,Fs,'cell') RESIDUEZ Khai triãùn biãún âäøi z tæìng pháön [r,p,k] = residuez(b,a) [b,a] = residuez(r,p,k) SAWTOOTH Phaït sinh ràng cæa hay tam giaïc soïng x = sawtooth(t) x = sawtooth(t,width) SINC Haìm Sinc y = sinc(x) SQUARE Phaït sinh soïng vuäng x = square(t) x = square(t,duty)

Caïc pheïp biãún âäøi nghëch âaío Fourier

IFFT Nghëch âaío biãún âäøi Fourier råìi raûc IFFT(X) nghëch âaío biãún âäøi Fourier råìi raûc cuía vectå X

Page 123: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 122

Phan Thanh Tao - 2004

IFFT(X,N) nghëch âaío biãún âäøi N-âiãøm IFFT2 Nghëch âaío biãún âäøi Fourier råìi raûc hai chiãöu IFFT2(F) traí vãö nghëch âaío biãún âäøi Fourier råìi raûc hai chiãöu cuía ma tráûn F. Nãúu F laì vectå thç kãút quaí coï cuìng hæåïng IFFT2(F,MROWS,NCOLS) âäün ma tráûn F våïi caïc säú 0 vãö cåî MROWSxNCOLS træåïc khi biãún âäøi ABS Giaï trë tuyãût âäúi vaì âäøi chuäùi sang säú ABS(X) laì giaï trë tuyãût âäúi cuía caïc pháön tæí cuía. Nãúu X phæïc thç ABS(X) laì caïc mäâun cuía caïc pháön tæí cuía X ABS(S), våïi S laì biãún chuäùi MATLAB thç traí vãö caïc giaï trë säúcuía caïc kyï tæû ASCII trong chuäùi. Khäng thay âäøi biãøu hiãûn bãn trong maì chè thay âäøi caïch in ra ANGLE Goïc pha ANGLE(H) traí vãö goïc pha cuía ma tráûn caïc pháön tæí phæïc, âån vë radian UNWRAP UNWRAP Bung goïc pha theo âån vë radian UNWRAP(P) bung caïc goïc pha P bàòng caïch thay âäøi bæåïc nhaíy tuyãût âäúi låïn hån pi sang pháön buì 2*pi cuía chuïng. Våïi caïc ma tráûn thç bung theo tæìng cäüt UNWRAP(P,TOL) duìng dung sai bæåïc nhaíy TOL khaïc våïi ngáöm âënh TOL = pi FFTSHIFT FFTSHIFT chuyãøn sæû trãù thæï 0 vãö tám cuía phán bäú Dëch chuyãøn FFT. Âäúi våïi caïc vectå FFTSHIFT(X) traí vãö mäüt vectå hoaïn âäøi caïc næía traïi vaì phaíi. Våïi ma tráûn, FFTSHIFT(X) hoaïn âäøi goïc 1 vaì 3, 2 vaì 4 FFTSHIFT âæåüc duìng cho FFT, chuyãøn sæû trãù thæï 0 vãö tám cuía phán bäú CPLXPAIR CPLXPAIR Sàõp xãúp caïc säú thaình caïc càûp phæïc liãn håüp Y = CPLXPAIR(X) sàõp xãúp laûi caïc pháön tæí cuía vectå X âãø caïc säú phæïc âæåüüc táûp håüp thaình caïc càûp liãn håüp phuì håüp. Caïc càûp âæåüc sàõp xãúp tàng dáön theo pháön thæûc Caïc pháön tæí thæûc âæåüc âàût sau táút caí caïc càûp phæïc. Y = CPLXPAIR(X,TOL) duìng dung sai tæång âäúi cuía TOL cho cäng viãûc so saïnh. Ngáöm âënh TOL = 100*EPS NEXTPOW2

Page 124: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 123

Phan Thanh Tao - 2004

NEXTPOW2 muî 2 tiãúp theo NEXTPOW2(N) traí vãö P âáöu tiãn maì 2P ≥ |N| (2^P >= abs(N)). Thæåìng duìng âãø tçm muî 2 gáön nháút âäü daìi daîy cho caïc pheïp biãún âäøi Fourier nhanh (FFT) Nãúu X laì vectå thç NEXTPOW2(X) giäúng NEXTPOW2(LENGTH(X))

Page 125: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 124

Phan Thanh Tao - 2004

Caïc haìm læåüng giaïc

SIN SIN(X) laì sin cuía caïc pháön tæí cuía X SINH SINH(X) laì sin hyperbol cuía caïc pháön tæí cuía X ASIN ASIN(X) laì arcsin cuía caïc pháön tæí cuía X. Nãúu våïi pháön tæí naìo âoï maì ABS(x) > 1.0 thç kãút quaí laì phæïc ASINH ASINH(X) laì arcsin hyperbol cuía caïc pháön tæí cuía X COS COS(X) laì cosin cuía caïc pháön tæí cuía X COSH COSH(X) laì cosin hyperbol cuía caïc pháön tæí cuía X ACOS ACOS (X) laì arccos cuía caïc pháön tæí cuía X. Nãúu våïi pháön tæí naìo âoï maì ABS(x) > 1.0 thç kãút quaí laì phæïc ACOSH ACOSH(X) laì arccos hyperbol cuía caïc pháön tæí cuía X TAN TAN(X) laì tang cuía caïc pháön tæí cuía X TANH TANH(X) laì tang hyperbol cuía caïc pháön tæí cuía X ATAN ATAN(X) laì arctang cuía caïc pháön tæí cuía X ATANH ATANH(X) laì arctang hyperbol cuía caïc pháön tæí cuía X SEC SEC(X)=1./SIN(X) SECH SECH(X)1./SINH(X) ASEC ASEC(X) laì arcsec cuía caïc pháön tæí cuía X ASECH ASECH(X) laì arcsec hyperbol cuía caïc pháön tæí cuía X

Page 126: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 125

Phan Thanh Tao - 2004

CSC CSC(X)=1./COS(X) CSCH CSCH(X) =1./COSH(X) ACSC ACSC(X) laì arcsec cuía caïc pháön tæí cuía X ACSCH ACSCH(X) laì arccosec hyperbol cuía caïc pháön tæí cuía X COT COT(X) laì cotang cuía caïc pháön tæí cuía X COTH COTH(X) laì cotang hyperbol cuía caïc pháön tæí cuía X ACOT ACOT(X) laì arccotang cuía caïc pháön tæí cuía X ACOTH ACOTH(X) laì arccotg hyperbol cuía caïc pháön tæí cuía X

Page 127: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 126

Phan Thanh Tao - 2004

Caïc haìm muî vaì logarit

EXP EXP(X) haìm ex LOG LOG(X) laì logarithm tæû nhiãn cuía caïc pháön tæí cuía X. Nãúu X khäng dæång thç kãút quaí phæïc LOG10 LOG10(X) logarithm cå säú 10 cuía caïc pháön tæí cuía X. Nãúu X khäng dæång thç kãút quaí phæïc SQRT SQRT(X) càn bàûc 2 cuía caïc pháön tæí cuía X. Nãúu X<0 thç kãút quaí phæïc

Caïc haìm phæïc

ABS Giaï trë tuyãût âäúi vaì âäøi chuäùi sang säú ABS(X) laì giaï trë tuyãût âäúi cuía caïc pháön tæí cuía. Nãúu X phæïc thç ABS(X) laì caïc mäâun cuía caïc pháön tæí cuía X ABS(S), våïi S laì biãún chuäùi MATLAB thç traí vãö caïc giaï trë säúcuía caïc kyï tæû ASCII trong chuäùi. Khäng thay âäøi biãøu hiãûn bãn trong maì chè thay âäøi caïch in ra ANGLE Goïc pha ANGLE(H) traí vãö goïc pha cuía ma tráûn caïc pháön tæí phæïc, âån vë radian CONJ CONJ(X) laì säú phæïc liãn håüp cuía X IMAG IMAG(X) laì pháön aío cuía X REAL REAL(X) laì pháön thæûc cuía X

Page 128: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 127

Phan Thanh Tao - 2004

Haìm vãö säú nguyãn vaì thæûc

ROUND ROUND(X) laìm troìn caïc pháön tæí cuía X vãö säú nguyãn gáön nháút FIX FIX(X) laìm troìn caïc pháön tæí cuía X våïi säú nguyãn gáön nháút vãö phêa 0 FLOOR FLOOR(X) laìm troìn caïc pháön tæí cuía X våïi säú nguyãn gáön nháút vãö phêa -∞ CEIL CEIL(X) laìm troìn caïc pháön tæí cuía X våïi säú nguyãn gáön nháút vãö phêa +∞ REM REM(x,y) laì pháön coìn laûi cuía pheïp chia x cho y bàòng x - n.*y våïi n = fix(x./y) laì pháön nguyãn cuía thæång x./y SIGN Våïi mäùi pháön tæí cuía X, SIGN(X) traí vãö 1 nãúu pháön tæí låïn hån 0, traí vãö 0 nãúu bàòng 0 vaì traí vãö -1 nãúu nhoí hån 0. Våïi X phæïc , SIGN(X) = X ./ ABS(X)

Caïc ma tráûn cå baín

ZEROS ZEROS(N) laì mäüt ma tráûn cáúp N gäöm caïc säú 0 ZEROS(M,N) hoàûc ZEROS([M,N]) laì mäüt ma tráûn cåî MxN gäöm caïc säú 0 ZEROS(SIZE(A)) cuìng cåî våïi A vaì táút caí âãöu laì caïc säú 0 ONES ONES(N) laì mäüt ma tráûn cáúp N gäöm caïc säú 1 ONES(M,N) hoàûc ONES([M,N]) laì mäüt ma tráûn cåî MxN gäöm caïc säú 1 ONES(SIZE(A)) cuìng cåî våïi A vaì táút caí âãöu laì caïc säú 1 EYE Ma tráûn âån vë EYE(N) laì ma tráûn âån vë cáúp N EYE(M,N) hoàûc EYE([M,N]) laì mäüt ma tráûn cåî MxN gäöm caïc säú 1 trãn

âæåìng cheïo, coìn laûi laì caïc säú 0 EYE(SIZE(A)) cuìng cåî våïi A

Page 129: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 128

Phan Thanh Tao - 2004

RAND Phán bäú âäöng bäü caïc säú vaì caïc ma tráûn ngáùu nhiãn RAND(N) laì ma tráûn cáúp N våïi caïc säú ngáùu nhiãn, thäng thæåìng choün tæì viãûc phán bäú trong khoaíng (0.0,1.0) RAND(M,N) hoàûc RAND([M,N]) laì ma tráûn cåî MxN våïi caïc säú ngáùu nhiãn RAND(SIZE(A)) cuìng cåî våïi A RAND khäng tham säú laì mäüt âaûi læåüng vä hæåïng coï giaï trë thay âäùi RAND('seed') traí vãö giaï trë khåíi taûo hiãûn thåìi cuía bäü phaït sinh ngáùu nhiãn RAND('seed',s) âàût giaï trë khåíi taûo cuía bäü phaït sinh ngáùu nhiãn laì s RAND('seed',0) âàût laûi giaï trë khåíi taûo cuía bäü phaït sinh ngáùu nhiãn RAND('seed',sum(100*clock)) âàût bäü phaït sinh ngáùu nhiãn thay âäøi mäùi luïc mäüt giaï trë Ngáöm âënh, RAND láúy máùu phán bäú âäöng bäü. Haìm RANDN phaït sinh caïc ma tráûn ngáùu nhiãn phán bäú chuáøn RAND vaì RANDN coï caïc caïch phaút sinh riãng, mäùi haìm duìng giaï trë khåíi taûo riãng Caïc phiãn baín træåïc cuía MATLAB cho pheïp RAND('normal') âãø chuyãøn phán bäú âang duìng sang phán bäú chuáøn, RAND('uniform') âãø chuyãøn ngæåüc laûi phán bäú âäöng bäü, vaì RAND('dist') âãø traí vãö mäüt chuäùi chæïa phán bäú âang duìng, hoàûc âäöng bäü ('uniform') hoàûc chuáøn ( 'normal'). MATLAB 4.0 tiãúp tuûc cho pheïp caïc chuyãøn âäøi naìy, nhæng cho ra mäüt khuyãún caïo RANDN Caïc säú vaì caïc ma tráûn ngáùu nhiãn phán bäú chuáøn RANDN(N) laì mäüt ma tráûn vuäng cáúp NxN coï caïc pháön tæí ngáùu nhiãn, choün tæì

phán bäú chuáøn våïi trung bçnh 0.0 vaì phæång sai 1.0 RANDN(M,N) hoàûc RANDN([M,N]) laì ma tráûn cåî MxN våïi caïc pháön tæí ngáùu

nhiãn RANDN(SIZE(A)) cuìng cåî våïi A RANDN khäng tham säú laì mäüt âaûi læåüng vä hæåïng thay âäøi theo tæìng lãûnh goüi RANDN('seed') traí vãö giaï trë khåíi taûo hiãûn thåìi cuía bäü phaït sinh chuáøn RANDN('seed',s) âàût giaï trë khåíi taûo cuía bäü phaït sinh chuáøn vaìo s RANDN('seed',0) âàût giaï trë khåíi taûo vaìo giaï trë ban âáöu RANDN('seed',sum(100*clock)) âàût vaìo mäüt giaï trë khaïc theo tæìng luïc RANDN vaì RAND coï caïc caïch phaút sinh riãng, mäúi haìm duìng giaï trë khåíi taûo

Page 130: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 129

Phan Thanh Tao - 2004

riãng LINSPACE LINSPACE vectå coï khoaíng caïch tuyãún tênh LINSPACE(x1, x2) phaït sinh vectå doìng gäöm 100 âiãøm caïch âãöu tuyãún tênh giæîa

x1 vaì x2 LINSPACE(x1, x2, N) phaït sinh N âiãøm giæîa x1 vaì x2 LOGSPACE LOGSPACE Vectå coï khoaíng caïch lägarit LOGSPACE(d1, d2) phaït sinh vectå doìng gäöm 50 âiãøm caïch âãöu giæîa 10d1 vaì

10d2. Nãúu d2 laì pi thç caïc âiãøm giæîa 10d1 vaì pi LOGSPACE(d1, d2, N) phaït sinh N âiãøm MESHGRID MESHGRID phaït sinh caïc maíng X vaì Y cho caïc hçnh veî 3 chiãöu [X,Y] = MESHGRID(x,y) biãún âäøi miãön giaï trë chè âënh båíi caïc vectå x vaì y sang

caïc maíng X vaì Y âãø duìng cho viãûc tênh caïc haìm hai biãún vaì caïc hçnh veî

màût 3 chiãöu. Caïc doìng cuía maíng xuáút X laì caïc baín sao cuía vectå x vaì caïc

cäüt cuía maíng xuáút Y laì caïc baín sao cuía vectå y Vê duû, âãø tênh haìm x*exp(-x^2-y^2) trãn miãön -2 < x < 2, -2 < y < 2, [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = X .* exp(-X.^2 - Y.^2); mesh(Z) [X,Y] = MESHGRID(x) laì caïch goün cuía [X,Y] = MESHGRID(x,x) [X,Y,Z] = MESHGRID(x,y,z) cho ra maíng neïn 3 chiãöu âãø duìng cho viãûc tênh

caïc haìm 3 biãún vaì caïc hçnh veî khäúi 3 chiãöu

Phán têch ma tráûn

COND Säú âiãöu kiãûn cuía ma tráûn COND(X) laì tè säú cuía giaï trë kyì dë låïn nháút vaì nhoí nháút cuía X, âoï laì säú âiãöu kiãûn theo chuáøn-2 NORM Chuáøn ma tráûn hoàûc vectå Våïi ma tráûn: NORM(X) laì giaï trë kyì dë låïn nháút cuía X, max(svd(X)) NORM(X,2) giäúng NORM(X).

Page 131: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 130

Phan Thanh Tao - 2004

NORM(X,1) laì chuáøn-1 cuía X, täøng cäüt låïn nháút, max(sum(abs((X)))) NORM(X,inf) laì daûng báút âënh cuía X, täøng doìng låïn nháút, max(sum(abs((X')))) NORM(X,'inf') giäúng NORM(X,inf) NORM(X,'fro') laì chuáøn-F, sqrt(sum(diag(X'*X))) NORM(X,P) coï thãø duìng cho ma tráûn X chè nãúu P laì 1, 2, inf hoàûc 'fro' Våïi vectå: NORM(V,P) = sum(abs(V)^P)^(1/P). NORM(V) = norm(V,2). NORM(V,inf) = max(abs(V)). NORM(V,-inf) = min(abs(V)). Trong MATLAB 4.0, nãúu X coï caïc thaình pháön phæïc, z, thç abs(z) = sqrt(z*conj(z)), chæï khäng laì abs(real(z)) + abs(imag(z)), duìng trong caïc phiãn baín træåïc cuía MATLAB RCOND LINPACK æåïc læåüng âiãöu kiãûn thuáûn nghëch RCOND(X) laì æåïc læåüng âiãöu kiãûn thuáûn nghëch cuía X theo chuáøn-1 nháûn âæåüc bàòng caïch æåïc læåüng âiãöu kiãûn LINPACK. Nãúu X coï âiãöu kiãûn täút thç RCOND(X) gáön bàòng 1.0. Nãúu X coï âiãöu kiãûn xáúu thç RCOND(X) gáön bàòng 0.0 RANK Säú doìng hoàûc cäüt âäüc láûp tuyãún tênh K = RANK(X) laì säú giaï trë kyì dë cuía X, låïn hån MAX(SIZE(X)) * NORM(X) * EPS K = RANK(X,tol) laì säú giaï trë kyì dë cuía X, låïn hån tol DET Âënh thæïc DET(X) laì âënh thæïc cuía ma tráûn vuäng X TRACE Täøng caïc pháön tæí trãn âæåìng cheïo TRACE(A) laì täøng caïc pháön tæí trãn âæåìng cheïo cuía A, cuîng laì täøng caïc giaï trë riãng cuía A NULL Khäng gian khäng Z = NULL (A) cå såí træûc chuáøn cuía khäng gian khäng A. Z'*Z = I, A*Z coï caïc pháön tæí khäng âaïng kãø, säú cäüt cuía Z laì säú khuyãút cuía A ORTH Træûc giao Q = ORTH(A) laì cå såí træûc chuáøn cuía âäúi våïi miãön giaï trë cuía A. Q'*Q = I, caïc cäüt cuía Q bung ra nhæ caïc cäüt A vaì säú cäüt cuía Q laì haûng cuía A RREF Thu goün doìng daûng báûc thang

Page 132: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 131

Phan Thanh Tao - 2004

R = RREF(A) cho ra daûng báûc thang thu goün doìng cuía A [R,jb] = RREF(A) cuîng traí vãö mäüt vectå, jb, maì: r = length(jb) laì haûng cuía A, vãö màût thuáût toaïn x(jb) laì caïc biãún trong hãû phæång trçnh tuyãún Ax = b, A(:,jb) laì cå såí cuía A, R(1:r,jb) ma tráûn âån vë cáúp r [R,jb] = RREF(A,TOL) duìng dung sai cho træåïc trong viãûc kiãøm tra haûng Thuáût toaïn naìy boí qua sai säú khi tênh haûng khaïc nhau laì RANK, ORTH vaì NULL

Phæång trçnh tuyãún tênh

pheïp \ vaì / âãø giaíi phæång trçnh tuyãún tênh CHOL Thæìa säú Cholesky CHOL(X) chè duìng âæåìng cheïo vaì tam giaïc trãn cuía X. Tam giaïc dæåïi âæåüc giaí sæí laì chuyãøn vë (liãn håüp phæïc) cuía tam giaïc trãn. Nãúu X xaïc âënh dæång thç R = CHOL(X) cho ra mäüt tam giaïc trãn våïi R'*R = X. Nãúu X khäng xaïc âënh dæång thç mäüt thäng baïo läùi âæåüc in ra. Våïi hai âäúi säú xuáút, [R,p] = CHOL(X) khäng bë läùi. Nãúu X xaïc âënh dæång thç p = 0 vaì R nhæ trãn. Nhæng X khäng xaïc âënh dæång thç p laì mäüüt säú nguyãn dæång vaì R laì ma tráûn tam giaïc trãn báûc q = p-1 våïi R'*R = X(1:q,1:q) LU Taïch nhán tæí bàòng phæång phaïp Gauss [L,U] = LU(X) læu ma tráûn tam giaïc trãn trong U vaì L laì mäüt "ma tráûn tam giaïc dæåïi vãö tám lyï", nghéa laì têch ma tráûn tam giaïc dæåïi vaì ma tráûn hoaïn vë, âãø X = L*U [L,U,P] = LU(X) traí vãö tráûn tam giaïc dæåïi L, ma tráûn tráûn tam giaïc trãn U, vaì ma tráûn hoaïn vë P âãø P*X = L*U Chênh haìm LU(X) traí vãö phuûc vuû xuáút ZGEFA cuía LINPACK INV Nghëch âaío ma tráûn INV(X) nghëch âaío cuía ma tráûn X. Mäüt khuyãún caïo âæåüc in ra nãúu X gáön kyì dë

Page 133: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 132

Phan Thanh Tao - 2004

QR Taïch tam giaïc træûc giao [Q,R] = QR(X) ma tráûn tam giaïc trãn R cuìng cåî våïi X vaì ma tráûn âån nguyãn Q âãø X = Q*R [Q,R,E] = QR(X) cho ra ma tráûn hoaïn vë E , ma tráûn tam giaïc trãn R vaì ma tráûn âån nguyãn Q âãø X*E = Q*R. Cäüt hoaïn vë E âæåüc choün sao cho abs(diag(R)) tàng [Q,R] = QR(X,0) cho ra phán taïch "kêch thæåïc kinh tãú ". Nãúu X coï cåîì mxn våïi m > n thç chè coï n cäüt âáöu cuía Q âæåüc tênh [Q,R,E] = QR(X,0) cho ra phán taïch "kêch thæåïc kinh tãú " trong âoï E laì vectå hoaïn vë âãø Q*R = X(:,E). Cäüt hoaïn vë cuía E âæåüc choün sao cho abs(diag(R)) tàng Chênh QR(X) traí vãö phuûc vuû xuáút ZGEFA cuía LINPACK. TRIU(QR(X)) laì R QRDELETE QRDELETE xoïa mäüt cäüt trong thæìa säú QR Nãúu [Q,R] = qr(A) thæìa säú QR cuía A thç [Q,R] = qrdelete(Q,R,j) âäøi Q vaì R thaình thæìa säú cuía ma tráûn våïi A(:,j) bë xoïa QRINSERT QRINSERT cheìn mäüt cäüt trong thæìa säú QR Nãúu [Q,R] = qr(A) thæìa säú QR cuía A thç [Q,R] = qrinsert(Q,R,j,x) âäøi Q vaì R thaình thæìa säú cuía ma tráûn nháûn âæåüc bàòng caïch cheìn cäüt x vaìo træåïc A(:,j). (Nãúu A coï n cäüt vaì j = n+1, thç x cheìn sau cäüt cuäúi cuìng cuía A) NNLS Bçnh phæång täúi thiãøu khäng ám X = NNLS(A,b) traí vãö vectå X laì nghiãûm A*x = b theo phæång phaïp bçnh phæång täúi thiãøu, thoía maîn x >= 0 Dung sai ngáöm âënh cuía TOL = MAX(SIZE(A)) * NORM(A,1) * EPS âæåüc duìng âãø quyãút âënh khi naìo thç caïc pháön tæí cuía X nhoí hån 0. Coï thãø goüi âeì våïi X = NNLS(A,b,TOL) [X,W] = NNLS(A,b) cuîng traí vãö vectå âäúi ngáùu W våïi w(i) < 0 khi x(i) = 0 vaì w(i) = 0 khi x(i) > 0 PINV Giaí âaío X = PINV(A) cho ra ma tráûn X cuìng cåî våïi A' sao cho A*X*A = A, X*A*X = X ,ì AX vaì XA laì Hermitian. Caïch tênh dæûa vaìo SVD(A) vaì giaï trë kyì dë nhoí hån dung sai âæåüc xem laì 0 Dung sai ngáöm âënh laì MAX(SIZE(A)) * NORM(A) * EPS. Dung sai naìy coï thãø goüi âeì våïi X = PINV(A,tol)

Page 134: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 133

Phan Thanh Tao - 2004

LSCOV Giaíi bçnh phæång beï nháút våïi phæång sai chæa biãút X = LSCOV(A,b,V) traí vãö vectå X maì caïc giaï trë nhoí nháút laì (A*X-b)'*inv(V)*(A*X-b). Nãúu A cåî MxN thç b phaíi laì Mx1 vaì V phaíi laì MxM. Låìi giaíi X seî laì Nx1. Âáy laì baìi toaïn bçnh phæång beï nháút (M > N) våïi phæång sai V. Låìi giaíi âæåüc tçm tháúy maì khäng tênh nghëch âaío V. Låìi giaíi âaûi säú tuyãún tênh cäø âiãøn cho baìi toaïn naìy laì: x = inv(A'*inv(V)*A)*A'*inv(V)*b

Giaï trë riãng vaì giaï trë kyì dë

EIG Giaï trë riãng vaì vectå riãng EIG(X) vectå riãng chæïa caïc giaï trë riãng cuía ma tráûn vuäng X [V,D] = EIG(X) cho ra mäüt ma tráûn âæåìng cheïo D gäöm caïc giaï trë riãng vaì ma tráûn âáöy âuí V maì caïc cäüt laì caïc vectå riãng tæång æïng sao cho X*V = V*D [V,D] = EIG(X,'nobalance') thæûc hiãûn tênh toaïn khäng cho pheïp cán bàòng, âäi luïc cho kãút quaí chênh xaïc hån. Caïc giaï trë riãng vaì vectå riãng täøng quaït EIG(A,B) laì vectå chæïa caïc giaï trë riãng täøng quaït cuía caïc ma tráûn vuäng A vaì B [V,D] = EIG(A,B) cho ra ma tráûn âæåìng cheïo D gäöm caïc giaï trë riãng täøng quaït vaì ma tráûn âáöy âuí V maì caïc cäüt laì caïc vectå riãng sao cho A*V = B*V*D POLY Âa thæïc âàûc træng Nãúu A laì ma tráûn vuäng cáúp N thç POLY(A) laì vectå doìng gäöm N+1 pháön tæí laì caïc hãû säú cuía âa thæïc âàûc træng, DET(lambda*EYE(A) - A) . Nãúu V laì vectå POLY(V) laì vectå chæïa caïc pháön tæí laì caïc hãû säú cuía âa thæïc âàûc træng coï nghiãûm âa thæïc laì caïc pháön tæí cuía V. Våïi caïc vectå thç ROOTS vaì POLY laì caïc haìm âaío cuía nhau ROOTS(POLY(1:20)) phaït sinh vê duû näøi tiãúng cuía Wilkinson POLYEIG POLYEIG laì baìi toaïn giaï trë riãng âa thæïc [X,E] = POLYEIG(A0,A1,..,Ap) giaíi baìi toaïn giaï trë riãng âa thæïc báûc p: (A0 + lambda*A1 + ... + lambda^p*Ap)*x = 0 Nháûp p+1 ma tráûn vuäng báûc n laì A0, A1, ..., Ap. Ma tráûn xuáút cåî nxn*p, X, coï caïc cäüt laì caïc vectå riãng, vaì mäüt vectå âäü daìi n*p, E, coï caïc pháön tæí laì caïc giaï trë riãng for j = 1:n*p lambda = E(j)

x = X(:,j)

Page 135: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 134

Phan Thanh Tao - 2004

% (A0 + lambda*A1 + ... + lambda^p*Ap)*x xáúp xè 0 end Caïc træåìng håüp âàûc biãût: p = 0, polyeig(A), laì baìi toaïn giaï trë riãng chuáøn, eig(A) p = 1, polyeig(A,B), laì baìi toaïn giaï trë riãng täøng quaït, eig(A,-B) n = 1, polyeig(a0,a1,..,ap), cho caïc vä hæåïng a0, ..., ap, laì baìi toaïn âa thæïc chuáøn, roots([ap .. a1 a0]) Nãúu caí hai A0 vaì Ap laì kyì dë thç baìi toaïn thuäüc loaûi táöm thæåìng. Vãö lyï thuyãút thç låìi giaíi vä nghiãûm hoàûc khäng duy nháút. Vãö tênh toaïn thç låìi giaíi coï thãø khäng âuïng. Thæí taûo ra træåìng håüp naìy thç kãút quaí coï thãø laì mäüt khuyãún caïo. Nãúu chè coï mäüt A0 hay Ap laì kyì dë thç baìi toaïn khaï laì hoïc buïa, nhæng vaìi giaï trë riãng coï thãø 0 hoàûc "vä âënh" HESS Daûng Hessenberg Daûng Hessenberg cuía mäüt ma tráûn laì ma tráûn coï caïc säú 0 dæåïi âæåìng cheïo thæï nháút. Nãúu ma tráûn âäúi xæïng hay Hermitian thç daûng laì mäüt daíi bäü ba âæåìng cheïo. [P,H] = HESS(A) cho ra mäüt ma tráûn âån nguyãn P vaì mäüt ma tráûn Hessenberg H våïi A = P*H*P' vaì P'*P = EYE(SIZE(P)) Chênh haìm HESS(A) traí vãö H QZ Giaï trë riãng täøng quaït [AA, BB, Q, Z, V] = QZ(A,B) âäúi våïi caïc ma tráûn vuäng A vaì B, cho ra caïc ma tráûn tam giaïc trãn AA vaì BB, caïc ma tráûn Q vaì Z chæïa caïc chuyãøn vë traïi vaì phaíi sao cho Q*A*Z = AA, vaì Q*B*Z = BB, vaì ma tráûn vectå riãng täøng quaït V Caïc giaï trë riãng täøng quaït laì caïc pháön tæí âæåìng cheïo cuía AA vaì BB âãø A*V*diag(BB) = B*V*diag(AA)

Page 136: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 135

Phan Thanh Tao - 2004

Caïc haìm ma tráûn

EXPM Muî e ma tráûn EXPM(X) laì ma tráûn muî e cuía X. EXPM âæåüc tênh bàòng thuáût toaïn xáúp xè Pade.Màûc duì noï khäng tênh theo caïch naìy: nãúu X coï mäüt táûp âáöy âuí caïc vectå riãng våïi caïc giaï trë riãng tæång æïng D, thç [V,D] = EIG(X) vaì EXPM(X) = V*diag(exp(diag(D)))/V EXP(X) (khäng coï M) thæûc hiãûn trãn tæìng pháön tæí EXPM1 Muî e ma tráûn thäng qua xáúp xè Pade E = EXPM1(A) laì mäüt bäø sung M-file cuía thuáût toaïn bãn trong MATLAB âäúi våïi tênh muî e cuía ma tráûn EXPM2 Muî e ma tráûn thäng qua chuäùi Taylor E = expm2(A) minh hoüa âënh nghéa cäø âiãøn cho tênh muî e ma tráûn. Nhæ mäüt phæång phaïp thæûc haình säú, caïch naìy thæåìng cháûm vaì thiãúu chênh xaïc EXPM3 Muî e ma tráûn thäng qua giaï trë riãng vaì vectå riãng E = expm3(A) minh hoüa mäüt caïch coï thãø âãø tênh muî e ma tráûn. Nhæ mäüt phæång phaïp thæûc haình vãö säú, âäü chênh xaïc âæåüc xaïc âënh båíi âiãöu kiãûn cuía ma tráûn vectå riãng LOGM Lo-ga-rit ma tráûn L = LOGM(A) laì ma tráûn logarit cuía A. Kãút quía phæïc nãúu A coï caïc giaï trë riãng ám. Mäüt khuyãún caïo nãúu expm(L) khäng gáön våïi A [L,esterr] = logm(A) khäng in ra khuyãún caïo, nhæng traí vãö mäüt æåïc læåüng thàûng dæ tæång âäúi, norm(expm(L)-A)/norm(A). Nãúu A laì âäúi xæïng thæûc hay Hermitian phæïc thç âoï laì LOGM(A) Mäüt säú ma tráûn thæûc hoàûc phæïc khäng coï loga, nhæ A = [0 1; 0 0], vaì LOGM khäng thãø cho kãút quaí SQRTM Càn báûc hai ma tráûn S = SQRTM(A) càn báûc hai cuía ma tráûn A Kãút quaí phæïc nãúu A coï giaï trë riãng ám. Mäüt khuyãún caïo nãúu tênh S*S khäng gáön våïi A [S,esterr] = sqrtm(A) khäng in khuyãún caïo naìo caí maì traí vãö æåïc læåüng thàûng dæ tæång âäúi, norm(S*S-A)/norm(A). Nãúu A laì âäúi xæïng thæûc hay Hermitian phæïc thç âoï laì SQRTM(A) Mäüt säú ma tráûn thæûc hoàûc phæïc khäng coï càn báûc hai, nhæ A = [0 1; 0 0], vaì SQRTM khäng thãø cho kãút quaí

Page 137: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 136

Phan Thanh Tao - 2004

FUNM Tênh haìm cuía mäüt ma tráûn F = FUNM(A,'fun') hoàûc F = FUNM('fun',A), våïi âäúi säú ma tráûn A, tênh haìm ma tráûn chè âënh båíi 'fun'. Vê duû, FUNM(A,'sin') laì sin cuía ma tráûn A. Våïi muî, loga vaì càn báûc hai ma tráûn thç, thay vaìo âoï, duìng EXPM(A), LOGM(A) vaì SQRTM(A) FUNM duìng thuáût toaïn khäng væîng chàõc.Nãúu A gáön våïi ma tráûn coï nhiãöu giaï trë riãng vaì vectå riãng thiãúu âiãöu kiãûn thç FUNM coï thãø cho kãút quaí khäng âuïng. [F,ESTERR] = FUNM(A,'fun') khäng in ra thäng baïo naìo caí maì traí vãö mäüt æåïc læåüng sai säú tæång âäúi trong kãút quaí tênh toaïn Nãúu A âäúi xæïng hay Hermitian thç daûng Schur cuía noï laì âæåìng cheïo vaì FUNM coï thãø cho kãút quaí khäng âuïng S = SQRTM(A) vaì L = LOGM(A) duìng FUNM âãø tênh, nhæng chuïng coï thãø âaïng tin cáûy hån bàòng caïch so saïnh S*S vaì EXPM(L) våïi A. E = EXPM(A) duìng mäüt thuáût toaïn hoaìn toaìn khaïc

Caïc biãún vaì hàòng âàûc biãût

ANS Traí låìi gáön nháút (ANSwer) ANS laì biãún âæåüc taûo ra tæû âäüng khi biãøu thæïc khäng âæåüc gaïn cho biãún naìo caí EPS Âäü chênh xaïc säú thæûc EPS laì mäüt biãún cäú âënh coï giaï trë âáöu laì khoaíng caïch tæì 1.0 âãún säú thæûc låïn nháút tiãúp theo. EPS coï thãø âæåüc gaïn laûi giaï trë báút kyì. EPS âæåüc duìng nhæ dung sai cho caïc haìm PINV vaì RANK REALMAX REALMAX Säú thæûc dæång låïn nháút x = realmax laì säú thæûc dæång låïn nháút biãøu diãùn trãn maïy tênh. Moüi säú låïn hån âãöu bë traìn REALMIN REALMIN Säú thæûc dæång nhoí nháút x = realmin laì säú thæûc dæång nhoí nháút vaì âæåüc chuáøn hoïa trãn maïy tênh. Moüi giaï trë nhoí hån âãöu bë traìn dæåïi theo chuáøn IEEE PI 3.1415926535897.... PI = 4*atan(1) = imag(log(-1)) = 3.1415926535897.... I ,J Âån vë aío

Page 138: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 137

Phan Thanh Tao - 2004

Caí hai biãún i vaì j coï giaï trë âáöu laì sqrt(-1) âãø duìng cho säú phæïc. Vê duû, caïc biãøu thæïc 3+2i, 3+2*i, 3+2i, 3+2*j vaì 3+2*sqrt(-1), táút caí âãöu coï cuìng mäüt giaï trë. Tuy nhiãn, caí hai i vaì j coï thãø âæåüc gaïn cho caïc giaï trë khaïc, thæåìng duìng trong caïc voìng làûp FOR vaì laìm caïc chè säú INF Giaï trë báút âënh INF laì mäüt biãún cäú âënh biãøu hiãûn giaï trë báút âënh dæång theo chuáøn säú hoüc IEEE. Inf nháûn âæåüc tæì caïc pheïp toaïn nhæ chia cho 0, nhæ 1.0/0.0, hoàûc traìn, nhæ exp(1000) NAN Khäng laì säú (Not-a-Number) FLOPS Âãúm caïc pheïp toaïn säú thæûc FLOPS traí vãö säú têch luîy caïc pheïp toaïn trãn säú thæûc. FLOPS(0) âàût giaï trë âãúm vãö 0. Noï khäng laì âãúm tuyãût âäúi táút caí caïc pheïp toaïn trãn säú thæûc, nhæng háöu hãút caïc pheïp toaïn quan troüng âãöu âæåüc âãúm. Caïc pheïp cäüng vaì træì laì 1 flop nãúu thæûc vaì 2 nãúu phæïc. Caïc pheïp nhán vaì chia laì 1 flop cho mäùi pheïp nãúu kãút quaí laì thæûc vaì 6 flop nãúu khäng phaíi. Caïc haìm cå baín âãúm 1 nãúu thæûc vaì nhiãöu hån nãúu laì phæïc Vaìi vê duû, nãúu A vaì B laì caïc ma tráûn thæûc vuäng cáúp N, thç A + B âãúm N2 flop, A * B âãúm 2*N3 flop, A ^ 100 âãúm 99*2*N3 flop, LU(A) âãúm thä (2/3)*N^3 flop NARGIN Säú âäúi säú nháûp cho mäüt haìm Bãn caûnh thán haìm do ngæåìi duìng âënh nghéa (UDF), biãún cäú âënh NARGIN biãøu hiãûn säú âäúi säú nháûp duìng âãø goüi haìm, vaì NARGOUT biãøu hiãûn säú âäúi säú xuáút

Page 139: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 138

Phan Thanh Tao - 2004

NARGOUT NARGOUT Säú âäúi säú xuáút cuía mäüt haìm Bãn caûnh thán haìm do ngæåìi duìng âënh nghéa (UDF), biãún cäú âënh NARGIN biãøu hiãûn säú âäúi säú nháûp duìng âãø goüi haìm, vaì NARGOUT biãøu hiãûn säú âäúi säú xuáút COMPUTER COMPUTER hoíi kiãøu maïy tênh COMPUTER traí vãö mäüt chuäùi chæïa tãn maïy âang laìm MATLAB. Caïc maïy coï thãø laì: PCWIN - MS-Windows DEC_RISC - DecStation MAC2 - Macintosh VAX_VMSD - VAX/VMS D_float SUN4 - Sun SPARC VAX_VMSG - VAX/VMS G_float SOL2 - Solaris 2 ALPHA - Dec Alpha HP700 - HP 9000/700 HP300 - HP 9000/300 SGI - Silicon Graphics CRAY - Cray IBM_RS - IBM RS6000 CONVEX - Convex [C,MAXSIZE] = COMPUTER cuîng traí vãö säú nguyãn MAXSIZE chæïa säú täúi âa caïc pháön tæí cho pheïp trong 1 ma tráûn trãn phiãn baín naìy cuía MATLAB ISIEEE Âuïng cho maïy tênh våïi chuáøn säú hoüc IEEE ISIEEE traí vãö 1 trãn caïc maïy tênh våïi chuáøn säú hoüc IEEE vaì 0 trãn caïc maïy tênh khäng theo chuáøn säú hoüc IEEE. Caïc maïy theo chuáøn IEEE laì: IBM PC, háöu hãút caïc maïy traûm cuía UNIX, Macintosh. Caïc maïy khäng theo chuáøn IEEE laì: VAX, Cray ISSTUDENT Âuïng våïi phiãn baín MATLAB daình cho sinh viãn (Student Edition) WHY Cung cáúp caïc traí låìi ngàõn goün cho caïc cáu hoíi báút kyì VERSION Phiãn baín cuía MATLAB VERSION traí vãö mäüt chuäùi chæïa säú phiãn baín MATLAB

Page 140: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 139

Phan Thanh Tao - 2004

Thåìi gian vaì nháût kyì

CLOCK Âäöng häö tæåìng. CLOCK traí vãö vectå doìng gäöm 6 pháön tæí chæïa giåì vaì nháût kyì hiãûn taûi trong daûng tháûp phán: CLOCK = [nàm thaïng ngaìy giåì phuït giáy] Nàm pháön tæí âáöu laì nguyãn. Pháön tæí giáy chênh xaïc âãún vaìi chæî säú sau dáúu cháúm tháûp phán FIX(CLOCK) laìm troìn sang daûng hiãøn thë nguyãn CPUTIME CPUTIME CPU thåìi gian theo âån vë giáy CPUTIME traí vãö thåìi gian CPU theo âån vë giáy âãø duìng båíi MATLAB tæì khi khåíi âáöu vê duû: t=cputime; thao taïc; cputime-t traí vãö thåìi gian cpu duìng cho thao taïc Giaï trë traí vãö coï thãø traìn biãøu hiãûn bãn trong DATE Lëch S = DATE traí vãö mäüt chuäùi chæïa nháût kyì daûng ngaìy-thaïng-nàm (dd-mmm-yy) ETIME Thåìi gian träi qua ETIME(T1,T0) traí vãö thåìi gian träi qua giæîa 2 vectå T1 vaì T0 theo âån vë giáy. Hai vectå phaíi coï âuïng 6 pháön tæí, theo daûng traí vãö båíi CLOCK: T = [Nàm Thaïng Ngaìy Giåì Phuït Giáy] Âáy laì mäüt vê duû duìng ETIME âãø tênh thåìi gian thao taïc: t0 = clock; thao taïc; etime(clock,t0) Læu yï: Nhæ laì pháön bäø sung, noï khäng laìm viãûc qua caïc ngaìy cuäúi thaïng hoàûc nàm. Laì mäüt M-file, vç váûy coï thãø sæía âäøi nãúu cáön TIC Bàõt âáöu cho bäü tênh thåìi gian Daîy lãûnh TIC; thao taïc; TOC in ra thåìi giaûn thæûc hiãûn TOC Âoüc bäü tênh thåìi gian TOC, in thåìi gian träi qua tênh tæì khi duìng TIC t = TOC; læu thåìi gian träi qua trong t, thay cho viãûc in noï ra

Thao taïc trãn ma tráûn

DIAG Taûo måïi hoàûc trêch ra caïc âæåìng cheïo

Page 141: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 140

Phan Thanh Tao - 2004

Nãúu V laì mäüt vectå doìng hoàûc cäüt våïi N pháön tæí thç DIAG(V,K) laì mäüt ma tráûn vuäng cáúp N+ABS(K) våïi caïc pháön tæí cuía V trãn âæåìng cheïo thæï K. K = 0 laì âæåìng cheïo chênh, K > 0 laì trãn âæåìng cheïo chênh vaì K < 0 laì dæåïi âæåìng cheïo chênh. DIAG(V) âån giaín V vaìo âæåìng cheïo chênh. Vê duû, DIAG(-M:M) + DIAG(ONES(2*M,1),1) + DIAG(ONES(2*M,1),-1) cho ra mäüt ma tráûn 3 âæåìng cheïo báûc 2*M+1 Nãúu X laì ma tráûn thç DIAG(X,K) laì vectå cäüt taûo nãn tæì caïc pháön tæí cuía âæåìng cheïo thæï K cuía X. DIAG(X) laì âæåìng cheïo chênh cuía X. DIAG(DIAG(X)) laì mäüt ma tráûn âæåìng cheïo FLIPLR Läün ngæåüc caïc doìng ma tráûn theo hæåïng traïi/phaíi FLIPLR(X) traí vãö X våïi doìng âaío ngæåüc vaì caïc cäüt âäøi theo hæåïng traïi/phaíi X = 1 2 3 thaình 3 2 1 4 5 6 6 5 4 FLIPUD Läün ngæåüc caïc cäüt ma tráûn theo hæåïng trãn/dæåïi FLIPUD(X) traí vãö X våïi cäüt âaío ngæåüc vaì caïc doìng âäøi theo hæåïng trãn/dæåïi Vê duû, X = 1 4 thaình 3 6 2 5 2 5 3 6 1 4 RESHAPE RESHAPE Thay âäøi kêch thæåïc RESHAPE(X,M,N) traí vãö ma tráûn cåî MxN coï caïc pháön tæí âæåüc láúy tæì X theo tæìng cäüt. Mäüt kãút quaí läùi nãúu X khäng coï âuïng M*N pháön tæí RESHAPE(X,[M N]) cuîng laìm viãûc

Page 142: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 141

Phan Thanh Tao - 2004

ROT90 Quay ma tráûn 90o rot90(A) laì quay 90o cuía ma tráûn A. rot90(A,k) laì quay (k*90) o ma tráûn A, k = ±1, ±2, ... Vê duû, A = [1 2 3 B = rot90(A) = [ 3 6 4 5 6 ] 2 5 1 4 ] sau âoï mesh(B) biãøu hiãûn quay theo chiãöu dæång 90o cuía mesh(A) TRIL Tam giaïc dæåïi TRIL(X) laì pháön tam giaïc dæåïi cuía X TRIL(X,K) laì caïc pháön tæí bãn dæåïi âæåìng cheïo thæï K cuía X . K = 0 laì âæåìng cheïo chênh, K > 0 laì trãn âæåìng cheïo chênh vaì K < 0 laì dæåïi âæåìng cheïo chênh TRIU Tam giaïc trãn TRIU(X) laì pháön tam giaïc trãn cuía X TRIU(X,K) laì caïc pháön tæí bãn trãn âæåìng cheïo thæï K cuía X. K = 0 laì âæåìng cheïo chênh, K > 0 laì trãn âæåìng cheïo chênh vaì K < 0 laì dæåïi âæåìng cheïo chênh : láúy chè säú ma tráûn , sàõp xãúp laûi ma tráûn

Caïc haìm coï âäúi säú laì haìm

ODE23 Giaíi hãû phæång trçnh vi phán, phæång phaïp báûc tháúp ODE23 têch phán hãû phæång trçnh vi phán thæåìng bàòng caïch duìng cäng thæïc Runge-Kutta báûc 2 vaì 3 [T,Y] = ODE23('yprime', T0, Tfinal, Y0) têch phán hãû phæång trçnh vi phán thæåìng mä taí båíi tãûp M-file YPRIME M, trãn khoaíng tæì T0 âãún Tfinal, våïi âiãöu kiãûn âáöu Y0 [T, Y] = ODE23(F, T0, Tfinal, Y0, TOL, 1) duìng dung sai TOL vaì hiãøn thë traûng thaïi trong khi tênh têch phán Âäúi säú nháûp: F - Chuäùi chæïa tãn cuía mä taí baìi toaïn cuía ngæåìi duìng Goüi: yprime = fun(t,y) våïi F = 'fun' t - Thåìi gian (vä hæåïng) y - Vectå cäüt låìi giaíi yprime - Vectå âaûo haìm traí vãö; yprime(i) = dy(i)/dt t0 - Giaï trë âáöu cuía t

Page 143: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 142

Phan Thanh Tao - 2004

tfinal- Giaï trë cuäúi cuía t y0 - Giaï trë âáöu cuía vectå cäüt tol - Âäü chênh xaïc muäún duìng (Ngáöm âënh: tol = 1.e-3) trace - Nãúu khaïc 0 thç in ra mäùi bæåïc (Ngáöm âënh: trace = 0) Âäúi säú xuáút: T - Âiãøm thåìi gian têch phán traí vãö (vectå cäüt) Y - Låìi giaíi traí vãö, mäùi vectå cäüt låìi giaíi trãn mäüt giaï trë tout (giaï trë xuáút trong t) Kãút quaí coï thãø âæåüc hiãøn thë båíi: plot(tout, yout) ODE23P ODE23P Giaíi caïc phæång trçnh vi phán bàòng phæång phaïp báûc tháúp vaì hiãøn thë hçnh veî. Têch phán mäüt hãû phæång trçnh vi phán thæåìng bàòng caïch duìng cäng thæïc Runge-Kutta báûc 2 vaì 3 vaì veî caïch tênh thåìi gian cuía 2 hoàûc 3 pháön tæí âáöu cuía låìi giaíi ODE23P('FUN', T0, Tf, Y0) phaït sinh mäüt hçnh veî màût phàóng 2 hoàûc 3 pha cuía låìi giaíi hãû phæång trçnh vi phán mä taí båíi tãûp M-file YPRIME.M trãn khoíang T0 âãïn Tf vaì duìng âiãöu kiãûn âáöu Y0 Træåïc khi goüi ODE23P, thiãút láûp giåïi haûn caïc truûc thêch håüp våïi axis([y1min y1max y2min y2max]); hold hoàûc axis([y1min y1max y2min y2max y3min y3max]); hold Räöi goüi ODE23P('FUN',t0,tfinal,y0) våïi FUN - Tãn haìm xaïc âënh phæång trçnh vi phán yprime = fun(t,y) våïi t - Thåìi gian (vä hæåïng) y - Vectå cäüt låìi giaíi yprime - Vectå cäüt âaûo haìm; yprime(i) = dy(i)/dt t0 - Giaï trë âáöu cuía t tfinal- Giaï trë cuäúi cuía t y0 - Giaï trë âáöu cuía vectå cäüt tol - Âäü chênh xaïc muäún duìng (Ngáöm âënh: tol = 1.e-3)

Page 144: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 143

Phan Thanh Tao - 2004

ODE45 Giaíi caïc phæång trçnh vi phán phæång phaïp báûc cao ODE45 Têch phán mäüt hãû phæång trçnh vi phán thæåìng bàòng caïch duìng cäng thæïc Runge-Kutta báûc 4 vaì 5 [T,Y] = ODE45('yprime', T0, Tfinal, Y0) têch phán hãû phæång trçnh vi phán thæåìng mä taí båíi tãûp M-file YPRIME M, trãn khoaíng tæì T0 âãún Tfinal, våïi âiãöu kiãûn âáöu Y0 [T, Y] = ODE45(F, T0, Tfinal, Y0, TOL, 1) duìng dung sai TOL vaì hiãøn thë traûng thaïi trong khi tênh têch phán Âäúi säú nháûp: F - Chuäùi chæïa tãn cuía mä taí baìi toaïn cuía ngæåìi duìng Goüi: yprime = fun(t,y) våïi F = 'fun' t - Thåìi gian (vä hæåïng) y - Vectå cäüt låìi giaíi yprime - Vectå âaûo haìm traí vãö; yprime(i) = dy(i)/dt t0 - Giaï trë âáöu cuía t tfinal- Giaï trë cuäúi cuía t y0 - Giaï trë âáöu cuía vectå cäüt tol - Âäü chênh xaïc muäún duìng (Ngáöm âënh: tol = 1.e-3) trace - Nãúu khaïc 0 thç in ra mäùi bæåïc (Ngáöm âënh: trace = 0) Âäúi säú xuáút: T - Âiãøm thåìi gian têch phán traí vãö (vectå cäüt) Y - Låìi giaíi traí vãö, mäùi vectå cäüt låìi giaíi trãn mäüt giaï trë tout (giaï trë xuáút trong t) Kãút quaí coï thãø âæåüc hiãøn thë båíi: plot(tout, yout) QUAD Tênh giaï trë säú cuía mäüt têch phán, phæång phaïp báûc tháúp Q = QUAD('F',A,B) xáúp xè têch phán cuía F(X) tæì A âãún B sai säú tæång âäúi 1e-3. 'F' laì chuäùi chæïa tãn haìm. Haìm F phaíi traí vãö mäüt vectå caïc giaï trë xuáút nãúu caïc giaï trë nháûp laì vectå Q = QUAD(F,A,B,TOL) têch phán sai säú TOL Q = Inf âæåüc traí vãö nãúu gàûp phaíi âãû quy, biãøu hiãnû têch phán kyì dë Q = QUAD(F,A,B,TOL,TRACE) têch phán sai säú TOL vaì láön vãút caïc æåïc læåüng haìm våïi mäüt âiãøm cuía haìm bë tênh têch phán QUAD duìng phäúi håüp quy tàõc âãû quy Simpson Q = QUAD('F',A,B,TOL,TRACE,P1,P2,...) cho pheïp caïc hãû säú P1, P2, ... âæåüc truyãön træûc tiãúp vaìo haìm F: G = F(X,P1,P2,...). Âãø duìng giaï trë ngáöm âënh cho TOL hoàûc TRACE thç coï thãø truyãön vaìo ma tráûn räùng ([])

Page 145: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 144

Phan Thanh Tao - 2004

QUAD8 Tênh giaï trë säú cuía mäüt têch phán, phæång phaïp báûc cao Q = QUAD8('F',A,B) xáúp xè têch phán cuía F(X) tæì A âãún B sai säú tæång âäúi 1e-3. 'F' laì chuäùi chæïa tãn haìm. Haìm F phaíi traí vãö mäüt vectå caïc giaï trë xuáút nãúu caïc giaï trë nháûp laì vectå Q = QUAD8(F,A,B,TOL) têch phán sai säú TOL Q = Inf âæåüc traí vãö nãúu gàûp phaíi âãû quy, biãøu hiãnû têch phán kyì dë Q = QUAD8(F,A,B,TOL,TRACE) têch phán sai säú TOL vaì láön vãút caïc æåïc læåüng haìm våïi mäüt âiãøm cuía haìm bë tênh têch phán QUAD8 duìng phäúi håüp quy tàõc âãû quy Newton Cotes 8 panel QUAD8('F',A,B,TOL,TRACE,P1,P2,...) cho pheïp caïc hãû säú P1, P2, ... âæåüc truyãön træûc tiãúp vaìo haìm F: G = F(X,P1,P2,...). Âãø duìng giaï trë ngáöm âënh cho TOL hoàûc TRACE thç coï thãø truyãön vaìo ma tráûn räùng ([]) FMIN Cæûc tiãøu haìm mäüt biãún FMIN('F',x1,x2) tçm giaï trë x laì cæûc tiãøu âëa phæång cuía F(x) khoaíng x1 < x < x2. 'F' laì chuäùi chæïa tãn haìm muûc tiãu cáön tçm cæûc tiãøu. FMIN('F',x1,x2,OPTIONS) duìng mäüt vectå caïc tham säú âiãöu khiãøn. Nãúu OPTIONS(1) khaïc 0 thç caïc bæåïc trung gian trong låìi giaíi âæåüc hiãøn thë; ngáöm âënh OPTIONS(1) = 0. OPTIONS(2) laì dung sai cuäúi âäúi våïi x; ngáöm âënh bàòng 1.e-4. OPTIONS(14) laì säú låïn nháút cuía caïc bæåïc; ngáöm âënh OPTIONS(14) = 500. Caïc thaình pháön khaïc cuía OPTIONS khäng âæåüc duìng nhæ caïc tham säú âiãöu khãøn nháûp båíi FMIN FMIN('F',x1,x2,OPTIONS,P1,P2,...) cung cáúp thãm 10 âäúi säú âãø truyãön cho haìm muûc tiãu, F(X,P1,P2,...) Vê duû: fmin('cos',3,4) tênh taûi pi âãún vaìi chæî säú tháûp phán fmin('cos',3,4,[1,1.e-12]) hiãûn caïc bæåïc láúy âãø tênh taûi pi âãún 12 chæî säútháûp phán FMINS Cæûc tiãøu haìm nhiãöu biãún FMIN('F',X0) tçm vectå x laì cæûc tiãøu âëa phæång cuía F(x) gáön våïi giaï trë âáöu X0. 'F' laì chuäùi chæïa tãn haìm muûc tiãu cáön tçm cæûc tiãøu. F(x) phaíi laì haìm láúy giaï trë vä hæåìng cuía âäúi säú vectå. FMIN('F',x1,x2,OPTIONS) duìng mäüt vectå caïc tham säú âiãöu khiãøn. Nãúu OPTIONS(1) khaïc 0 thç caïc bæåïc trung gian trong låìi giaíi âæåüc hiãøn thë; ngáöm âënh OPTIONS(1) = 0. OPTIONS(3) laì dung sai cuäúi âäúi våïi F(x); ngáöm âënh bàòng 1.e-4. OPTIONS(14) laì säú låïn nháút cuía caïc bæåïc; ngáöm âënh OPTIONS(14) = 500. Caïc thaình pháön khaïc cuía OPTIONS khäng âæåüc duìng nhæ caïc tham säú âiãöu khiãøn nháûp båíi FMIN

Page 146: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 145

Phan Thanh Tao - 2004

FMIN('F',x1,x2,OPTIONS,P1,P2,...) cung cáúp thãm 10 âäúi säú âãø truyãn cho haìm muûc tiãu, F(X,P1,P2,...) FMINS duìng phæång phaïp tçm âån FZERO Tçm giaï trë 0 cuía haìm 1 biãún FZERO(F,X) Tçm giaï trë 0 cuía haìm f(x). 'F' laì chuäùi chæïa tãn haìm muûc tiãu traí vãö giaï trë thæûc cuía mäüt âäúi säú. X laì giaï trë âoaïn ban âáöu. Giaï trë traí vãö gáön våïi âiãøm maì haìm F thay âäøi. Vê duû, FZERO('sin',3) laì pi. Læu yï dáúu nhaïy âån quanh sin. Thäng thæåìng caïc haìm âæåüc âënh nghéa trong tãûp M-file Mäüt âäúi säú tuìy choün thæï ba âàût dung sai tæång âäúi cho viãûc kiãøm tra häüi tuû. Coï mäüt âäúi säú tuìy choün thæï tæ âãø in vãút cuía caïc bæåïc FPLOT Veî âäö thë mäüt haìm FPLOT(FNAME,LIMS) veî âäö thë haìm chè âënh båíi biãún chuäùi FNAME giæîa caïc giåïi haûn trãn truûc x chè âënh båíi LIMS = [XMIN XMAX].LIMS = [XMIN XMAX YMIN YMAX] cho caïc giåïi haûn trãn truûc y vaì laì tuìy choün Haìm FNAME phaíi phuì håüp våïi chuáøn tæìng cäüt cuía MATLAB. Vê duû, nãúu FNAME laì haìm biãøu hiãûn båíi f = [f1(x) f2(x)]thç nháûp ‘[x1 x2 x3]', haìm traí vãö ma tráûn _f1(x1)_f2(x1) f(x) =_f1(x2)_f2(x2) _f1(x3)_f3(x3) Caïch khaïc, FNAME coï thãø laì chuäùi thay âäøi våïi biãún x, nhæ 'sin(x)', 'diric(x,10)' hoàûc '[sin(x),cos(x)]'. FPLOT cháúp nháûn 2 âäúi säú tuìy choün laì MARKER vaì TOL. MARKER laì chuäùi chè âënh kiãøu âaïnh dáúu duìng trong âäö thë. Kiãøu ngáöm âënh laì '-'. Thãm vaìo kiãøu veî chuáøn, FPLOT coìn cháúp nháûn '-+', '-x', '-o', '-*' (hoàûc '+-', 'x-', 'o-', vaì '*-'). TOL laì dung sai tæång âäúi. Ngáöm âënh laì 2e-3. Säú cæûc âaûi caïc bæåïc cuía x laì (1/TOL)+1 [X,Y] = fplot(FNAME,LIMS,...) traí vãö abscissae vaì caïc toüa âäü duìng âãø veîâäö thë FNAME trong vectå cäüt X vaì caïc cäüt cuía ma tráûn Y Vê duû: fplot('sin',[0 4*pi]) fplot('sin(x)',[0 4*pi],'-+') fplot('[sin(x),cos(x)]',[0 4*pi],'-x') fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi],'-o') fplot('tan',[-2*pi 2*pi -2*pi 2*pi],'-*') fplot('[tan(x),sin(x),cos(x)]',[-2*pi 2*pi -2*pi 2*pi]) fplot('sin(1 ./ x)', [0.01 0.1],1e-3)

Page 147: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 146

Phan Thanh Tao - 2004

MATLAB laì mäüt ngän ngæî láûp trçnh

SCRIPT Caïc tãûp nguyãn baín M-file Mäüt tãûp nguyãn baín laì tãûp bãn ngoaìi coï näüi dung laì daîy caïc lãûnh cuía MATLAB. Bàòng caïch âaïnh vaìo tãn tãûp thç caïc lãûnh trong âoï âæåüc thæûc hiãûn tuáön tæû. Tãûp nguyãn baín phaíi coï tãn måí räüng ".m" vaì thæåìng goüi laì tãûp "M-file" FUNCTION Tãûp haìm M-file Caïc tãûp måïi coï thãø thãm vaìo MATLAB nãúu chuïng âæåüc taûo nhæ caïc haìm âaî coï. Caïc lãûnh vaì haìm chæïa haìm måïi phaíi âàût trong tãûp truìng tãn haìm måïi vaì tãn måí räng laì '.m'. Doìng âáöu tiãn cuía tãûp phaíi laì doìng âënh nghéa cuï phaïp cho haìm måïi. Vê duû, tãûp STAT.M trãn âéa coï näüi dung: function [mean,stdev] = stat(x) n = length(x); mean = sum(x) / n; stdev = sqrt(sum((x - mean).^2)/n); âënh nghéa haìm STAT âãø tênh trë trung bçnh vaì âäü lãûch chuáøn cuía mäüt vectå . Caïc biãún bãn trong haìm laì caïc biãún cuûc bäü EVAL Thæûc hiãûn chuäùi kyï tæû chæïa biãøu thæïc MATLAB EVAL(s), s laì mäüt chuäùi, thç MATLAB thæûc hiãûn chuäùi nhæ mäüt biãøu thæïc hoàûc mäüt lãûnh EVAL(s1,s2) cho khaí nàng bàõt läùi. Noï thi haình chuäùi s1 vaì traí vãö nãúu thao taïc thaình cäng. Nãúu thao taïc bë läùi thç chuäùi s2 âæåüc æåïc læåüng træåïc khi traí vãö [X,Y,Z,...] = EVAL(s) traí vãö caïc âäúi säú xuáút tæì biãøu thæïc trong chuäùi s Caïc chuäùi nháûp vaìo EVAL thæåìng âæåüc taûo ra bàòng caïch näúi caïc chuäùi con vaì caïc biãún bãn trong càûp ngoàûc vuäng. Vê duû: Phaït sinh daîy ma phæång coï tãn tæì M1 âãún M12: for n = 1:12 eval(['M' num2str(n) ' = magic(n)']) end Chaûy mäüt tãûp nguyãn baín M-file. Caïc chuäùi taûo nãn caïc doìng cuía ma tráûn phaíi cuìng âäü daìi D = ['odedemo ' 'quaddemo' 'fitdemo ']; n = input('Select a demo number: '); eval(D(n,:)) Âoüc vaì xæí lyï caïc tãûp coï tãn data1.dat, data2.dat, ... k = 0; while 1 k = k+1; datak = ['data' int2str(k)];

Page 148: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 147

Phan Thanh Tao - 2004

filename = [datak '.dat']; if ~exist(filename), break, end eval(['load ' filename]); X = eval(datak); % Xæí lyï dæî liãûu ma tráûn X end FEVAL Æåïc læåüng haìm Nãúu F laì mäüt chuäùi chæïa tãn haìm (thæåìng âënh nghéa trong mäüt M-file), thç FEVAL(F,x1,...,xn) æåïc læåüng haìm âoï våïi caïc âäúi säú âaî cho. Vê duû, F = 'foo', FEVAL(F,9.64) giäúng nhæ foo(9.64) FEVAL thæåìng âæåüc duìng bãn trong caïc haìm láúy tãn caïc caïc haìm khaïc laìm âäúi säú GLOBAL Âënh nghéa caïc biãún toaìn cuûc GLOBAL X Y Z âënh nghéa X, Y, vaì Z trong phaûm vi toaìn cuûc. Thäng thæåìng mäùi haìm cuía MATLAB, âënh nghéa bàòng M-file, coï caïc biãún cuûc bäü riãng cuía noï, chuïng âæåüc phán biãût våïi caïc biãún cuía caïc haìm khaïc vaì cuía caïc haìm trong vuìng laìm viãûc cå såí vaì caïc nguyãn baín khäng laì haìm Tuy nhiãn, nãúu mäüt säú haìm, coï thãø trong vuìng laìm viãûc cå såí, maì táút caí âãöu khai baïo mäüt tãn naìo âoï laì GLOBAL thç táút caí chuïng âãöu âæåüc phán bäú mäüt baín sao cuía biãún âoï. Moüi lãûnh gaïn cho biãún âoï åí mäüt haìm thç coï thãø duìng trong táút caí caïc haìm khaïc coï khai baïo noï laì GLOBAL Vãö phong caïch láûp trçnh thç caïc biãún toaìn cuûc âãöu laì chæî hoa, nhæng khäng bàõt buäüc NARGCHK NARGCHK Kiãøm tra säú âäúi säú nháûp NARGCHK (low,high,number) traí vãö thäng baïo läùi nãúu number khäng phaíi giæîa low vaì high. Nãúu váûy thç traí vãö ma tráûn räùng LASTERR LASTERR thäng baïo läùi cuäúi cuìng LASTERR('') âàût laûi haìm LASTERR âãø traí vãö ma tráûn räùng cho âãún khi xaíy ra läùi tiãúp theo. LASTERR thæåìng duìng trong viãûc kãút håüp hai âäúi säú trong daûng cuía EVAL: EVAL('try','catch'). 'catch' coï thãø xem xeït chuäùi LASTERR âãø xaïc âënh coï gáy ra läùi vaì láúy hoaût âäüng tæång æïng

Âiãöu khiãøn luäöng

IF Thi haình lãûnh coï âiãöu kiãûn Daûng chung cuía cáu lãûnh IF laì: IF variable, statements, END

Page 149: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 148

Phan Thanh Tao - 2004

Caïc cáu lãûnh statements âæåüc thi haình nãúu pháön thæûc cuía biãún variable coï táút caí caïc pháön tæí khaïc khäng. Biãún thæåìng duìng kãút quaí cuía caïc toaïn tæí quan hãû laì ==, <, >, <=, >=, hay ~= Vê duû: if i==j A(i,j) = 2; elsif abs (i-j) == 1 A(i,j) = -1; else A(i,j) = 0; end ELSE Duìng våïi IF ELSEIF ELSEIF Duìng våïi IF nhæng khäng cáön END nhæng ELSE IF thç phaíi coï END END Kãút thuïc caïc cáu lãûnh FOR, WHILE vaì IF. Khäng coï END thç FOR, WHILE vaì IF chåì nháûp thãm. Mäùi END âæåüc gheïp càûp våïi FOR, WHILE, IF gáön nháút maì chæa coï càûp âãø kãút thuïc phaûm vi cuía lãûnh FOR Cáu lãûnh làûp coï chè âënh säú láön làûp. Daûng chung cuía lãûnh FOR laì: FOR variable = expr, statement, ..., statement END Caïc cäüt cuía biãøu thæïc expr âæåüc læu vaìo biãún tæìng bæåïc vaì caïc lãûnh âæåüc thi haình, Biãøu thæïc thæåìng coï daûng X:Y, trong âoï caïc cäüt cuía noï laì caïc vä hæåïng âån. Vaìi vê duû (giaí sæí N âaî âæåüc gaïn mäüt giaï trë räöi) for i=1:n, for j=1:n, A(i,j) = 1/(i+j-1); end end for s = 1.0: -0.1: 0.0, end caïc bæåïc cuía s thay âäøi -0.1 (giaím) for E = eye(N), ... end âàût E vaìo caïc vectå âån vë N chiãöu WHILE Cáu lãûnh làûp våïi säú láön làûp khäng xaïc âënh Daûng chung cuía lãûnh WHILE laì: WHILE variable, statement, ..., statement, END Caïc lãûnh statement, ..., statement âæåüc thi haình trong khi biãún coï táút caí caïc pháön tæí cuía variable khaïc khäng. Vê duû (giaí sæí A âaî âæåüc âënh nghéa): E = 0*A; F = E + eye (E); N = 1;

Page 150: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 149

Phan Thanh Tao - 2004

while norm(E+F-E,1) > 0, E = E + F; F = A*F/N; N = N + 1; end BREAK Kãút thuïc viãûc thæûc hiãûn mäüt voìng làûp. Nãúu täø håüp caïc voìng làûp thç BREAK chè thoaït khoíi lãûnh làûp bãn trong nháút RETURN Traí vãö lãûnh goüi haìm ERROR Hiãøn thë thäng baïo vaì boí qua haìm ERROR('MSG') hiãøn thë vàn baín MSG vaì taûo ra läùi thoaït trong mäüt M-file. Nãúu chuäùi laì ma tráûn räùng thç khäng hoaût âäüng INPUT Nhàõc ngæåìi duìng nháûp dæî liãûu INPUT('prompt:') cho mäüt cáu nhàõc 'prompt:' vaì chåì ngæåìi duìng nháûp tæì baìn phêm. Dæî liãûu nháûp coï thãø laì mäüt biãøu thæïc MATLAB, noï âæåüc tênh, duìng caïc biãún trong vuìng laìm viãûc, vaì laì kãút quaí traí vãö cuía haìm INPUT(' prompt:','s') cho mäüt cáu nhàõc 'prompt:' vaì chåì ngæåìi duìng nháûp tæì baìn phêm. Dæî liãûu nháûp âaïnh vaìo khäng âæåüc tênh toaïn; caïc kyï tæû traí vãö âån giaín nhæ mäüt chuäùi kyï tæû cuía MATLAB

Page 151: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 150

Phan Thanh Tao - 2004

KEYBOARD KEYBOARD goüi baìm phêm nãúu laì tãûp nguyãn baín. Khi âàût trong tãûp M-file, KEYBOARD ngæng thi haình tãûp vaì traí âiãöu khiãøn vãö baìn phêm. Âàûc biãût laì âæåüc biãøu hiãûn bàòng dáúu nhàõc keïp. Caïc biãún coï thãø âæåüc xem xeït hay thay âäøi - moüi lãûnh MATLAB âãöu håüp lãû. Chãú âäü baìn phêm kãút thuïc khi vaìo lãûnh RETURN (nghéa laì âaïnh vaìo 6 chæî R-E-T-U-R-N vaì áún phêm ENTER). Âiãöu khiãøn traí vãö lãûnh goüi M-file MENU Phaït sinh mäüt menu caïc læûa choün cho ngæåìi duìng nháûp K = MENU('Choose a color','Red','Blue','Green') hiãûn trãn maìn hçnh ----- Choose a color ----- 1) Red 2) Blue 3) Green Choün mäüt säú Säú nháûp båíi ngæåìi duìng âæåüc traí vãö. Säú låïn nháút caïc âãö muûc laì 32 PAUSE Taûm dæìng PAUSE chåìì ngæåìi duìng áún phêm báút kyì PAUSE(n) taûm dæìng n giáy PAUSE OFF biãøu hiãûn moüi lãûnh PAUSE hoàûc PAUSE(n) khäng thæûc hiãûn. Lãûnh naìy âãø caïc nguyãn baín chaûy tæû âäüng PAUSE ON ngæåüc laûi UIMENU UIMENU taûo menu giao diãûn ngæåìi duìng UIMENU('PropertyName1',value1,'PropertyName2',value2,...) taûo menu trãn menu bar åí trãn âènh cuía cæía säø hçnh aính hiãûn thåìi vaì traí vãö mäüt theí cho noï UIMENU(H,...) taûo mäüt menu måïi våïi H laì cha. H phaíi laì mäüt theí hçnh aính hoàûc menu. Nãúu H laì theí hçnh aính thç UIMENU menu trãn menu bar åí trãn âènh cuía cæía säø. Nãúu H laì mäüt theí menu trãn menu bar thç menu måïi laì menu tháúp hån âãö muûc cha trãn menu bar Caïc âàûc tênh cuía menu coï thãø âæåüc âàût åí luïc taûo ra bàòng caïch duìng tæìng càûp âäúi säú PropertyName/PropertyValue trong UIMENU, hoàûc thay âäøi sau âoï bàòng caïch duìng lãûnh SET Thæûc hiãûn GET(H) âãø xem danh saïch caïc âàûc tênh cuía UIMENU vaì caïc giaï trë hiãûn thåìi cuía noï Thæûc hiãûn SET(H) âãø xem danh saïch caïc âàûc tênh cuía UIMENU vaì caïc giaï trë håüp lãû

Page 152: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 151

Phan Thanh Tao - 2004

UICONTROL UICONTROL taûo âiãöu khiãøn giao diãûn ngæåìi duìng UICONTROL ('PropertyName1',value1,'PropertyName2',value2,...) taûo âiãöu khiãøn giao diãûn ngæåìi duìng trong cæía säø hçnh aính hiãûn thåìi vaì traí vãö mäüt theí cho noï Caïc âàûc tênh cuía menu coï thãø âæåüc âàût åí luïc taûo ra bàòng caïch duìng tæìng càûp âäúi säú PropertyName/PropertyValue trong UICONTROL, hoàûc thay âäøi sau âoï bàòng caïch duìng lãûnh SET. Thæûc hiãûn GET(H) âãø xem danh saïch caïc âàûc tênh cuía UICONTROL vaì caïc giaï trë hiãûn thåìi cuía noï. Thæûc hiãûn SET(H) âãø xem danh saïch caïc âàûc tênh cuía UICONTROL vaì caïc giaï trë håüp lãû

Haìm vãö âa thæïc

ROOTS Tçm caïc nghiãûm cuía âa thæïc ROOTS(C) tênh nghiãûm cuía âa thæïc coï caïc hãû säú laì caïc pháön tæí cuía vectå C. Nãúu C coï N+1 pháön tæí thç âa thæïc laì C(1)*X^N + ... + C(N)*X + C(N+1) POLY Âa thæïc âàûc træng Nãúu A laì ma tráûn vuäng cáúp N, thç POLY(A) laì vectå doìng gäöm N+1 pháön tæí laì caïc hãû säú cuía âa thæïc âàûc træng, DET(lambda*EYE(A) - A) . Nãúu V laì vectå, thç POLY(V) laì vectå coï caïc pháön tæí laì caïc hãû säú cuía âa thæïc coï caïc nghiãûm trong V . Våïi caïc vectå, ROOTS vaì POLY laì caïc haìm ngæåüc nhau vãö thæï tæû, chia tè lãû vaì sai säú ROOTS(POLY(1:20)) phaït sinh vê duû näøi tiãúng cuía Wilkinson POLYVAL POLYVAL Æåïc læåüng âa thæïc Nãúu p laì mäüt vectå âäü daìi d+1 coï caïc pháön tæí laì caïc hãû säú cuía mäüt âa thæïc, thç y = POLYVAL(p,x) laì giaï trë cuía âa thæïc tênh taûi x y = p(1)*x^d + p(2)*x^(d-1) + ... + p(d)*x + p(d+1) Mãúu X laì mäüt ma tráûn hay vectå , thç âa thæïc âæåüc æåïc læåüng taûi táút caí caïc âiãøm trong X [y,delta] = POLYVAL(p,x,S) duìng giaï trë xuáút tuìy choün phaït sinh båíi POLYFIT âãø âaïnh giaï caïc sai säú, y +/- delta. Nãúu caïc sai säú trong säú liãûu nháûp vaìo POLYFIT âäüc láûp våïi biãún hàòng, thç y +/- delta chæïa êt nháút 50% caïc giaï trë dæû âoaïn

Page 153: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 152

Phan Thanh Tao - 2004

POLYVALM POLYVALM Æåïc læåüng âa thæïc ma tráûn Nãúu V laì vectå coï caïc pháön tæí laì caïc hãû säú cuía âa thæïc, thç POLYVALM(V,X) laì giaï trë cuía âa thæïc taûi âäúi säú ma tráûn X. Xem POLYVAL våïi caïch tênh âa thæïc trong træåìng håüp âäúi säú thæåìng hoàûc maíng RESIDUE RESIDUE Tênh khai triãøn tæìng pháön hay thàûng dæ [R,P,K] = RESIDUE(B,A) tçm thàûng dæ, cæûc vaì hæåïng cuía khai triãøn tæìng pháön cuía chia âa thæïc, B(s) vaì A(s). Nãúu khäng coï nghiãûm keïp, B(s) R(1) R(2) R(n) ---- = -------- + -------- + ... + -------- + K(s) A(s) s - P(1) s - P(2) s - P(n) Caïc vectå B vaì A laì caïc hãû säú cuía caïc âa thæïc theo luîy thæìa thoaïi cuía s. Thàûng dæ traí vãö trong vectå cäüt R, caïc vë trê cæûc trong vectå cäüt P, vaì caïc hæåïng trong vectå doìng K. Säú caïc cæûc laì n = length(A)-1 = length(R) = length(P) Vectå hãû säú hæåïng laì räùng nãúu length(B) < length(A); ngæåüc laûi thç length(K) = length(B)-length(A)+1 Nãúu P(j) = ... = P(j+m-1) laì mäüt cæûc cuía multplicity m, thç khai triãøn bao gäöm caïc haûng tæí thuäüc daûng R(j) R(j+1) R(j+m-1) _ -------- + ------------ + ... + ------------ s - P(j) (s - P(j))^2 (s - P(j))^m [B,A] = RESIDUE(R,P,K), våïi 3 âäúi säú nháûp vaì 2 âäúi säú xuáút, chuyãøn khai triãøn phán säú tæìng pháön thaình caïc âa thæïc våïi caïc hãû säú trong B vaì A. Khuyãún caïo: Vãö màût säú, khai triãøn phán säú caïc âa thæïc laì biãøu hiãûn cuía mäüt baìi toaïn yãúu. Nãúu âa thæïc thæïc máùu, A(s), gáön âa thæïc coï nghiãûm bäüi, thç caïc thay âäøi nhoí trong säú liãûu, kãø caí sai säú, coï thãø laìm thay âäøi låïn trong caïc cæûc vaì thàûng dæ kãút quaí. Caïc cäng thæïc cuía baìi toaïn laìm cho viãûc duìng caïch biãøu diãùn cæûc träúng hoàûc 0 laì thêch håüp hån POLYFIT POLYFIT Khåïp âæåìng cong âa thæïc POLYFIT(x,y,n) tçm caïc hãû säú cuía âa thæïc p(x) báûc n âãø khåïp säú liãûu, p(x(i)) ~= y(i), theo phæång phaïp bçnh phæång beï nháút [p,S] = POLYFIT(x,y,n) traí vãö caïc hãû säú âa thæïc p vaì ma tráûn S âãø duìng våïi POLYVAL âãø cho ra caïc æåïc læåüng sai säú trong caïc dæû âoaïn. Nãúu caïc sai säú trong säú liãûu, y, âäüc láûp våïi biãún

Page 154: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 153

Phan Thanh Tao - 2004

hàòng, thç POLYVAL seî cho ra caïc giåïi haûn sai säú chæïa êt nháút 50% cuía dæû âoaïn

Page 155: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 154

Phan Thanh Tao - 2004

POLYDER POLYDER Âaûo haìm âa thæïc POLYDER(P) traí vãö âaûo haìm cuía âa thæïc coï caïc hãû säú laì caïc pháön tæí cuía vectå P POLYDER(A,B) traí vãö âaûo haìm cuía âa thæïc A*B. [Q,D] = POLYDER(B,A) traí vãö âaûo haìm cuía âa thæïc thæång B/A, biãøu diãùn thaình Q/D CONV Têch cháûp vaì nhán âa thæïc C = CONV(A, B) têch cháûp caïc vectå A vaì B. Vectå kãút quaí coï âäü daìi LENGTH(A)+LENGTH(B)-1. Nãúu A vaì B laì caïc vectå laì caïc hãû säú cuía âa thæïc, thç têch cháûp chuïng tæång âæång nhán hai âa thæïc DECONV Taïch cháûp vaì chia âa thæïc [Q,R] = DECONV(B,A) taïch cháûp caïc A ra B. Kãút quaí traí vãö trong vectå Q vaì pháön dæ trong vectå R âãø B = conv(Q,A) + R Nãúu A vaì B laì caïc vectå laì caïc hãû säú cuía âa thæïc, thç taïch cháûp tæång âæång våïi chia âa thæïc. Kãút quaí chê B cho A âæåüc thæång Q vaì dæ R

Näüi suy säú liãûu

INTERP1 INTERP1 näüi suy säú liãûu 1 chiãöu (tra cæïu baíng) YI = INTERP1(X,Y,XI) traí vãö vectå YI chæïa caïc pháön tæí tæång æïng våïi caïc pháön tæí trong XI vaì xaïc âënh båíi pheïp näüi suy bãn trong caïc vectå X vaì Y Pheïp näüi suy cuìng thao taïc nhæ " tra cæïu baíng ". Mä taí trong caïc säú haûng " tra cæïu baíng ", "baíng" laì [X,Y] vaì INTERP1 " caïc tra cæïu" laì caïc pháön tæí cuía XI trong X, vaì, dæûa vaìo caïc vë trê cuía chuïng, caïc giaï trë traí vãö YI näüi suy bãn trong caïc pháön tæí cuía Y INTERP1 thæûc hiãûn xuáút nhiãöu giaï trë tra cæïu baíng nãúu Y laì ma tráûn. Nãúu Y laì ma tráûn coï length(X) doìng, vaì N cäüt, thç INTERP1 traí vãö ma tráûn YI cåî length(XI)xN chæïa nhiãöu kãút quaí xuáút cuía tra cæïu baíng Ngáöm âënh, INTERP1 duìng näüi suy tuyãún tênh YI = INTERP1(X,Y,XI,'method') chè âënh caïc phæång phaïp khaïc Caïc phæång phaïp coï thãø laì: 'linear' - näüi suy tuyãún tênh 'spline' - näüi suy spline láûp phæång 'cubic' - näüi suy láûp phæång Táút caí caïc phæång phaïp näüi suy âoìi hoíi X phaíi laì âån âiãûu. Phæång phaïp láûp phæång 'cubic' cuîng âoìi hoíi caïc âiãøm trong X phaíi caïch âãöu Vê duû, phaït sinh âæåìng cong hçnh sin thä vaì näüi suy trãn mäüt hoaình âäü täút hån:

Page 156: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 155

Phan Thanh Tao - 2004

x = 0:10; y = sin(x); xi = 0:.25:10; yi = interp1(x,y,xi); plot(x,y,'o',xi,yi) INTERP2 INTERP2 näüi suy säú liãûu 2 chiãöu (tra cæïu baíng) ZI = INTERP2(X,Y,Z,XI,YI) traí vãö ma tráûn ZI chæïa caïc pháön tæí tæång æïng våïi caïc pháön tæí cuía XI vaì YI vaì xaïc âënh bàòng pheïp näüi suy bãn trong haìm 2 chiãöu mä taí båíi caïc ma tráûn X, Y, vaì Z. Caïc giaï trë bãn ngoaìi miãön traí vãö NaN. X coï thãø laì mäüt vectå doìng, trong træåìng håüp naìy âæåüc giaí thiãút aïp duûng vaìo caïc cäüt cuía Z. Tæång tæû, Y coï thãø laì vectå cäüt vaì caïc pháön tæí cuía noï âæåüc giaí thiãút aïp duûng qua caïc doìng cuía Z. Pheïp näüi suy cuìng thao taïc nhæ "table lookup". Mä taí trong caïc säú haûng " tra cæïu baíng ", "baíng" laì TAB = [NaN,Y; X,Z] vaì INTERP2 "caïc tra cæïu " laì caïc pháön tæí cuía XI trong X, YI trong Y, vaì, dæûa vaìo vë trê cuía chuïng, caïc giaï trë traí vãö ZI näüi suy bãn trong caïc pháön tæí cuía Z Ngáöm âënh, INTERP2 duìng pheïp näüi suy song tuyãún tênh ZI = INTERP2(X,Y,Z,XI,YI,'method') chè âënh phæång phaïp khaïc Caïc phæång phaïp coï thãø laì: 'linear' or 'bilinear' - näüi suy song tuyãún tênh 'cubic' or 'bicubic' - näüi suy song láûp phæång 'nearest' - näüi suy cáûn gáön nháút Táút caí caïc pheïp näüi suy âãöu âoìi hoíi X vaì Y laì âån âiãûu vaì læåïi vuäng (nãúu chuïng âæåüc taûo ra bàòng caïch duìng MESHGRID). Khoaíng caïch biãún âäøi âæåüc xæí lyï bàòng aïnh xaû caïc giaï trë âaî cho trong X,Y,XI, vaì YI vaìo mäüt miãön giaï trë caïch âãöu træåïc khi näüi suy INTERPFT INTERPFT Näüi suy 1 chiãöu bàòng caïch duìng phæång phaïp FFT (biãún âäøi Fourier nhanh) Y = INTERPFT(X,N) traí vãö vectå Y âäü daìi N nháûn âæåüc bàòng caïch näüi suy trong biãøn âäøi Fourier cuía X. Giaí sæí x(t) laì haìm tuáön hoaìn theo t våïi chu kyì p, taûo máùu tai caïc âiãøm caïch âãöu, X(i) = x(T(i)) våïi T(i) = (i-1)*p/M, i = 1:M, M = length(X). Räöi y(t) laì mäüt haìm tuáön hoaìn khaïc cuìng chu kyì vaì Y(j) = y(T(j)) våïi T(j) = (j-1)*p/N, j = 1:N, N = length(Y). Nãúu N laì mäüt bäüi nguyãn cuía M, thç Y(1:N/M:N) = X Nãúu X laì mäüt ma tráûn, pheïp näüi suy âæåüc thæûc hiãûn theo tæìng cäüt INTERPFT, khäng tham säú, laì mäüt chæång trçnh máùu

Page 157: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 156

Phan Thanh Tao - 2004

GRIDDATA GRIDDATA Læåïi dæî liãûu ZI = GRIDDATA(X,Y,Z,XI,YI) traí vãö ma tráûn ZI chæïa caïc pháön tæí tæång æïng våïi caïc pháön tæí cuía caïc ma tráûn XI vaì YI, vaì âæåüc xaïc âënh bàòng pheïp näüi suy bãn trong haìm 2 chiãöu mä taí båíi caïc vectå (X,Y,Z ) -- thäng thæåìng laì khäng âäöng bäü. XI coï thãø laì vectå doìng, trong træåìng håüp naìy noï chè âënh mäüt ma tráûn våïi caïc cäüt hàòng. Tæång tæû, YI coï thãø laì vectå cäüt vaì noï chè âënh mäüt ma tráûn våïi caïc doìng [XI,YI,ZI] = GRIDDATA(X,Y,Z,XI,YI) traí vãö XI vaì YI taûo nãn caïch naìy, âoï laì giäúng caïc ma tráûn traí vãö båíi MESHGRID. GRIDDATA duìng phæång phaïp khoaíng caïch âaío

Näüi suy Spline

SPLINE Pheïp näüi suy säú liãûu spline láûp phæång Caïc vectå säú liãûu cho træåïc X vaì Y, vaì mäüt vectå hoaình âäü måïi XI, haìm YI = SPLINE(X,Y,XI) duìng pheïp näüi suy spline láûp phæång âãø tçm vectå YI tæång æïng våïi XI. Âáy laì mäüt vê duû âãø phat sinh âæåìng cong hçnh sin thä, räöi näüi suy trãn mäüt hoaình âäü täút hån: x = 0:10; y = sin(x); xi = 0:.25:10; yi = spline(x,y,xi); plot(x,y,'o',xi,yi) PP = spline(x,y) traí vãö daûng-pp cuía pheïp näüi suy spline láûp phæång, âãø sau âoï duìng våïi ppval, v.v... PPVAL Æåïc læåüng âa thæïc tæìng maính v = ppval(pp,xx) traí vãö giaï trë pp cuía haìm pp taûi xx

Haìm vãö xáu chæî

STRINGS STRINGS Caïc chuäùi kyï tæû trong MATLAB X = 'Any Ch' laì mäüt vectå coï caïc thaình pháön cuía noï laì maî ASCII cuía caïc kyï tæû. Âäü daìi cuía X laì säú kyï tæû. Mäüt dáúu nhaïy trong chuäùi âæåüc biãøu hiãûn bàòng 2 dáúu nhaïy X = REAL(X) âàût vectå vaìo maî ASCII daûng tháûp phán. X = SETSTR(X) âàût ngæåüc laûi mäüt chuäùi. ISSTR(X) kiãøm tra X laì mäüt biãún chuäùi Vaìo lãûnh "help strfun" cho danh saïch caïc haìm xæí lyï chuäùi ABS Láúy giaï trë tuyãût âäúi vaì chuyãøn chuäùi sang säú

Page 158: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 157

Phan Thanh Tao - 2004

ABS(X) laì giaï trë tuyãût âäúi cuía caïc pháön tæí cuía X. Nãúu X phæïc thç ABS(X) laì mäâun cuía caïc pháön tæí cuía X. Nãúu S laì biãún chuäùi MATLAB thç ABS(S) traí vãö caïc giaï trë säú ASCII tháûp phán cuía caïc kyï tæû trong chuäùi. Khäng thay âäùi biãøu hiãûn bãn trong maì chè thay âäøi caïch in ra SETSTR Xem caïc giaï trë säú laì chuäùi X = SETSTR(X) coï thãø duìng cho caïc vectå chæïa caïc säú nguyãn tæì 0 âãún 255 âãø biãøu hiãûn maî ASCII cho vàn baín. Haìm traí vãö vectå âæåüc hiãøn thë nhæ vàn baín chæï khäng laì caïc säú nguyãn ISSTR Âuïng nãúu laì chuäùi ISSTR(S) traí vãö 1 nãúu laì chuäùi vàn baín, ngæåüc laûi traí vãö 0 BLANKS Mäüt chuäùi gäöm caïc kyï tæû träúng BLANKS(n) laì mäüt chuäùi gäöm n kyï tæû träúng. Duìng våïi DISP, nhæ DISP(['x' BLANKS(20) 'y']) DISP(BLANKS(n)') di chuyãøn con troí xuäúng n doìng DEBLANK DEBLANK Xoïa caïc kyï tæû träúng åí cuäúi mäüt chuäùi DEBLANK(S) Xoïa caïc kyï tæû träúng åí cuäúi mäüt chuäùi vaì moüi kyï tæû null trong chuäùi S. Kyï tæû null laì mäüt kyï tæû coï trë tuyãût âäúi bàòng 0 STR2MAT STR2MAT Taûo daûng ma tráûn vàn baín tæì caïc chuäùi riãng biãût S = STR2MAT(T1,T2,T3,..) taûo ma tráûn S chæïa caïc chuäùi vàn baín T1,T2,T3,... laì caïc doìng. Tæû âäüng thãm mäùi chuäùi caïc kyï tæû träúng nhàòm taûo ra mäüt ma tráûn håüp lyï. Coï thãø duìng âãún 10 chuäùi âãø taûo S. Mäùi tham säú vàn baín, Ti, coï thãø chênh noï laì mäüt ma tráûn chuäùi. Caïch naìy cho pheïp taûo ra caïc ma tráûn chuäùi låïn tuìy yï EVAL Thæûc hiãûn chuäùi chæïa biãøu thæïc MATLAB EVAL(s), våïi s laì mäüt chuäùi, laìm cho MATLAB thæûc hiãûn nhæ mäüt biãøu thæïc hoàûc mäüt lãûnh EVAL(s1,s2) cung cáúp khaí nàng bàõt läùi. Noï thæûc hiãûn s1 vaì traí vãö nãúu thao taïc thaình cäng. Nãúu thao taïc bë läùi thç s2 âæåüc æåïc læåüng træåïc khi traí vãö. Nghé nhæ lãûnh EVAL('try','catch') [X,Y,Z,...] = EVAL(s) traí vãö caïc âäúi säú xuáút tæì biãøu thæïc trong chuäùi s. Caïc chuäùi nháûp vaìo EVAL thæåìng âæåüc taûo ra bàòng caïch näúi caïc chuäùi con vaì caïc biãún bãn trong càûp ngoàûc vuäng. Vê duû: Phaït sinh mäüt daîy ma tráûn coï tãn tæì M1 âãún M12:

Page 159: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 158

Phan Thanh Tao - 2004

for n = 1:12 , eval(['M' num2str(n) ' = magic(n)']) , end Chaûy mäüt tãûp M-file nguyãn baín. Caïc chuäùi taûo nãn caïc doìng cuía ma tráûn D phaíi cuìng âäü daìi D = ['odedemo ' 'quaddemo' 'fitdemo ']; n = input('Select a demo number: '); eval(D(n,:)) Âoüc vaì xæí lyï caïc tãûp data1.dat, data2.dat, ... k = 0; while 1 k = k+1; datak = ['data' int2str(k)]; filename = [datak '.dat']; if ~exist(filename), break, end eval(['load ' filename]); X = eval(datak); % Xæí lyï dæî liãûu trong ma tráûn X end STRCMP So saïnh chuäùi STRCMP(S1,S2) traí vãö 1 nãúu S1 vaì S2 giäúng nhau vaì ngæåüc laûi thç traí vãöì 0 FINDSTR FINDSTR Tçm mäüt chuäùi trong chuäùi khaïc K = FINDSTR(S1,S2) traí vãö caïc chè säú bàõt âáöu cuía moüi xuáút hiãûn S2 trong S1 Vê duû: s = 'How much wood would a woodchuck chuck?'; findstr(s,'a') traí vãö 21 findstr(s,'wood') traí vãö [10 23] findstr(s,'Wood') traí vãö [] findstr(s,' ') traí vãö [4 9 14 20 22 32] UPPER Chuyãøn chuäùi sang chæî hoa A = upper(a) chuyãøn moüi kyï tæû thæåìng trong A thaình kyï tæû hoa tæång æïng, caïc kyï tæû khaïc khäng thay âäøi LOWER Chuyãøn chuäùi sang chæî thæåìng b = lower(A) chuyãøn moüi kyï tæû hoa trong A thaình kyï tæû thæåìng tæång æïng, caïc kyï tæû khaïc khäng thay âäøi ISLETTER ISLETTER âuïng nãúu laì chæî caïi Våïi mäüt chuäùi S, thç ISLETTER(S) laì 1 cho caïc chæî caïi, coìn laûi laì 0 ISSPACE

Page 160: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 159

Phan Thanh Tao - 2004

ISSPACE âuïng nãúu laì kyï tæû träúng, sang doìng, vãö âáöu doìng, tab, tab âæïng, hay sang trang. Våïi chuäùi S, thç ISSPACE(S) laì1 cho caïc kyï tæû träúng vaì 0 cho kyï tæû khaïc STRREP STRREP tçm vaì thay thãú chuäùi S = STRREP(S1,S2,S3) thay thãú S2 trong S1 våïi chuäùi måïi S3 Vê duû: s1='This is a good example'; strrep(s1,'good','great') traí vãö 'This is a great example' strrep(s1,'bad','great') traí vãö 'This is a good example' strrep(s1,'','great') traí vãö 'This is a good example' STRTOK Tçm dáúu hiãûu trong chuäùi (dáúu hiãûu laì kyï tæû khäng laì chæî caïi hay säú) STRTOK(S,D) traí vãö dáúu hiãûu âáöu tiãn trong S âæåüc âaïnh dáúu båíi D. Noï cuîng coï caïc traí vãö tuìy choün laì pháön coìn laûi cuía chuäùi gäúc. D laì mäüt maíng caïc kyï tæû dáúu hiãûu. Nãúu khäng cho dáúu hiãûu thç giaí thiãút laì kyï tæû träúng NUM2STR NUM2STR Chuyãøn säú sang chuäùi T = NUM2STR(X) chuyãøn säú vä hæåïng X sang chuäùi biãøu hiãûn trong T våïi khoaíng 4 chæî säú vaì coï mäüt pháön muî nãúu cáön. Haìm naìy thæåìng duìng âãø âaïnh nhaîn trong caïc hçnh veî våïi caïc lãûnh TITLE, XLABEL, YLABEL vaì TEXT. Mäüt âäúi säú tuìy choün coï thãø cho âãø biãøu hiãûn mäüt âäü chênh xaïc thay âäøi T = NUM2STR(X,PREC) chuyãøn säú vä hæåïng X sang chuäùi våïi mäüt âäü chênh xaïc täúi âa chè âënh båíi PREC

Page 161: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 160

Phan Thanh Tao - 2004

INT2STR INT2STR Chuyãøn säú nguyãn sang chuäùi S = INT2STR(N) chuyãøn säú nguyãn vä hæåïng N sang chuäùi STR2NUM STR2NUM chuyãøn chuäùi sang säú X = STR2NUM(S) chuyãøn chuäùi S, nãn laì bãøu hiãûn kyï tæû ASCII cuía mäüt giaï trë säú, sang säú cuía MATLAB. Chuäùi coï thãø chæïa caïc chæî säú, dáúu cháúm tháûp phán, mäüt dáúu dáùn âáöu laì + hoàûc -, mäüt chæî 'e' cho muî cuía 10, vaì 'i' cho âån vë phæïc STR2NUM chuyãøn ma tráûn chuäùi sang ma tráûn säú Vê duû A = ['1 2' str2num(A) => [1 2;3 4] '3 4'] Nãúu chuäùi S khäng laì biãøu hiãûn cuía ma tráûn hoàûc säú thêch håüp thç STR2NUM(S) traí vãö ma tráûn räùng HEX2NUM HEX2NUM IEEE chuyãøn säú daûng tháûp luûc phán sang daûng säú thæûc keïp HEX2NUM(S), våïi S laì chuäùi 16 kyï tæû chæïa säú daûng hex thç traí vãö säú thæûc keïp chuáøn IEEE Nãúu êt hån 16 kyï tæû thç âæåüc thãm vaìo bãn phaíi våïi caïc säú 0 Vê duû HEX2NUM('400921fb54442d18') traí vãö Pi HEX2NUM('bff') traí vãö -1 Caïc NaN, inf vaì caïc säú hæîu tè tênh âuïng HEX2DEC HEX2DEC Chuyãøn säú daûng hex sang daûng tháûp phán HEX2DEC(D) traí vãö säú daûng hex D trong daûng tháûp phán. Vê duû HEX2DEC('12B') vaì HEX2DEC('12b') caí hai traí vãö 299 DEC2HEX DEC2HEX Chuyãøn säú tháûp phán sang daûng hex DEC2HEX(D) traí vãö säú nguyãn tháûp phán D åí daûng hex. Vê duû, DEC2HEX(2748) traí vãö 'ABC' SPRINTF SPRINTF Ghi dæî liãûu coï daûng thæïc vaìo mäüt chuäùi [S,ERRMSG] = SPRINTF(FORMAT,A,...) âënh daûng dæî liãûu trong ma tráûn A (vaì trong moüi âäúi säú ma tráûn thãm næîa), dæåïi âiãöu khiãøn chè âënh trong chuäùi âënh daûng FORMAT, vaì traí vãö noï trong biãún chuäùi S cuía MATLAB. ERRMSG laì âäúi säú tuìy choün âãø traí vãö mäüt chuäùi thäng baïo läùi nãúu coï vaì mäüt ma tráûn räùng nãúu khäng läùi SPRINTF giäúng nhæ FPRINTF ngoaûi træì traí vãö dæî liãûu trong biãún chuäùi chæï khäng ghi vaìo tãûp. FORMAT laì mäüt chuäùi chæïa caïc chè âënh chuyãøn kiãøu cuía ngän ngæî C. Caïc chè âënh chuyãøn kiãøu bao gäöm kyï tæû %, cåì, træåìng âäü räüng vaì säú chæî

Page 162: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 161

Phan Thanh Tao - 2004

säú tháûp phán, chè âënh kiãøu con, vaì caïc kyï tæû chuyãøn kiãøu d, i, o, u, x, X, f, e, E, g, G, c, vaì s. Xem giaïo trçnh C âãø coï âáöy âuí chi tiãút. SPRINTF nhæ trong ANSI C våïi mäüt säú caïc ngoaûi lãû vaì måí räüng, Bao gäöm: 1. Nãúu MATLAB khäng chuyãøn âæåüc chênh xaïc keïp sang kiãøu chè âënh thç daûng e âæåüc sæí duûng. Phaíi chuyãøn kiãøu roî raìng caïc giaï trë khäng nguyãn cuía MATLAB sang giaï trë nguyãn nãúu muäún duìng chè âënh chuyãøn kiãøu nguyãn nhæ d vaì láúy caïch xæí lyï cuía ANSI C 2. Caïc chè âënh kiãøu con khäng chuáøn sau âáy âæåüc cung cáúp cho caïc kyï tæû chuyãøn kiãøu o, u, x, vaì X t - Kiãøu cå baín cuía C laì thæûc chæï khäng phaíi laì nguyãn khäng dáúu b - Kiãøu cå baín cuía C laì thæûc keïp chæï khäng phaíi laì nguyãn khäng dáúu Vê duû, âãø in ra daûng hex mäüt giaï trë thæûc keïp duìng mäüt daûng nhæ '%bx' SPRINTF khaïc våïi haìm truìng tãn trong C mäüt âiãöu quan troüng laì - noï "vectå hoïa" våïi træåìng håüp A laì vä hæåïng. Chuäùi âënh daûng âæåüc cuäün voìng qua caïc pháön tæí cuía A cho âãún khi táút caí caïc pháön tæí âæåüc duìng hãút. Räöi noï cuäün voìng theo caïch tæång tæû maì khäng bàõt âáöu laûi qua moüi âäúi säú ma tráûn tiãúp theo Vê duû, lãûnh S = sprintf('rho is %5.3f',(1+sqrt(5))/2) cho ra chuäùi S = 'rho is 1.618' SSCANF Âoüc chuäùi dæåïi âiãöu khiãøn coï daûng thæïc [A,COUNT,ERRMSG,NEXTINDEX] = SSCANF(S,FORMAT,SIZE) âoüc dæî liãûu tæì biãún chuäùi MATLAB S, chuyãøn kiãøu dæûa vaìo chuäùi âënh daûng FORMAT, vaì traí vãö trong ma tráûn A. COUNT laì mäüt âäúi säú xuáút tuìy choün âãø traí vãö säú pháön tæí âoüc thaình cäng. ERRMSG laì mäüt âäúi säú xuáút tuìy choün âãø traí vãö mäüt chuäùi thäng baïo läùi nãúu coï läùi hoàûc mäüt ma tráûn räùng nãúu khäng läùi. NEXTINDEX laì mäüt âäúi säú tuìy choün chè âënh mäüt hoàûc nhiãöu hån säú kyï tæû queït trong S. SSCANF giäúng nhæ FSCANF ngoaûi træì âoüc dæî liãûu trong biãún chuäùi MATLAB chæï khäng âoüc tæì tãûp. SIZE laì tuìy choün; noï âàût mäüt giåïi haûn vaìo säú pháön tæí coï thãø queït tæì chuäùi; nãúu khäng chè âënh thç âæåüc xem laì toaìn bäü chuäùi; nãúu coï thç caïc giaï trë håüp lyï laì: N âoüc nhiãöu nháút N pháön tæí vaìo mäüt vectå cäüt inf âoüc âãún cuäúi chuäùi [M,N] âoüc nhiãöu M * N pháön tæí láúp âáöy êt nháút mäüt ma tráûn MxN, theo thæï tæû cäüt. N coï thãø laì inf, nhæng M thç khäng. Nãúu ma tráûn A coï kãút

Page 163: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 162

Phan Thanh Tao - 2004

quaí chè tæì caïch duìng caïc chuyãøn kiãøu vaì SIZE khäng coï daûng [M,N] thç traí vãö mäüt vectå doìng. FORMAT laì mäüt chuäùi chæïa caïc chè âënh chuyãøn kiãøu cuía ngän ngæî C. Caïc chè âënh chuyãøn kiãøu bao gäöm kyï tæû %, boí læûa choün * vaì træåìng âäü räüng, vaì caïc kyï tæû chuyãøn kiãøu d, i, o, u, x, e, f, g, s, c, vaì [. . .] (táûp queït). Toaìn bäü ANSI C cung cáúp caïc kyï tæû chuyãøn kiãøu naìy âãø duìng trong MATLAB. Xem giaïo trçnh C âãø coï âáöy âuí chi tiãút. Nãúu mäüt kyï tæû chuyãøn kiãøu âæåüc duìng thç viãûc âoüc pháön tæí coï thãø duìng cho nhiãöu pháön tæí cuía ma tráûn MATLAB, mäùi pháön tæí læu mäüt kyï tæû. Viãûc hoìa träün caïc chè âënh chuyãøn kyï tæû vaì säú laìm cho ma tráûn kãút quaí laì säú vaì moüi láön âoüc caïc pháön tæí biãøu hiãûn bàòng caïc giaï trë ASCII cuía chuïng, mäùi kyï tæû æïng våïi mäüt pháön tæí cuía ma tráûn. Queït cho âãún hãút chuäùi nãúu NEXTINDEX låïn hån kêch thæåïc cuía S. SSCANF khaïc våïi haìm truìng tãn trong C åí chäù quan troüng laì: noï "vectå hoïa " âãø traí vãö mäüt âäúi säú ma tráûn. Chuäùi âënh daûng âæåüc cuäün voìng qua chuäùi cho âãún hãút hoàûc säú dæî liãûu chè âënh båíi SIZE âæåüc chuyãøn hãt. Vê duû, caïc lãûnh S = '2.7183 3.1416'; A = sscanf(S,'%f') âoüc mäüt vectå gäöm 2 pháön tæí xáúp xè e vaì pi

Âäö hoüa X-Y cå baín

PLOT Veî caïc vectå hoàûc ma tráûn PLOT(X,Y) veî vectå Y theo X. nãúu X hoàûc Y laì ma tráûn thç vectå âæåüc veî theo caïc doìng hoàûc cäüt cuía ma tráûn våïi hæåïng tàng theo chè säú PLOT(Y) veî caïc cäüt cuía Y theo chè säú. Nãúu Y phæïc thç PLOT(Y) tæång âæång PLOT(real(Y),imag(Y)). Trong táút caí caïc caïch duìng khaïc cuía PLOT thç pháön aío âæåüc boí qua. Caïc kiãøu âæåìng vaì maìu veî khaïc nhau coï thãø nháûn âæåüc våïi lãûnh PLOT(X,Y,S) våïi S laì 1, 2 hoàûc 3 chuäùi kyï tæû taûo nãn tæì caïc kyï tæû sau: y vaìng . âiãøm m têm o dáúu troìn c xanh thiãn thanh x dáúu x r âoí + cäüng g xanh luûc - âàûc b xanh dæång * sao w tràõng : cháúm

Page 164: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 163

Phan Thanh Tao - 2004

k âen -. cháúm gaûch -- gaûch Vê duû, plot (X,Y,'c+') veî dáúu cäüng maìu thiãn thanh åí mäùi âiãøm dæî liãûu PLOT(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...) täø håüp caïc hçnh veî xaïc âënh båíi bäü ba (X,Y,S), våïi X vaìY laì caïc vectå hoàûc ma tráûn vaì S laì chuäùi. Vê duû, plot (X,Y,'y-',X,Y,'go') veî hai láön dæî liãûu, våïi âæåìng vaìng cuìng våïi voìng troìn xanh luûc åí mäùi âiãøm. Lãûnh PLOT nãúu khäng chè âënh maìu thç âæåüc tæû âäüng duìng âàûc tênh ColorOrder cuía truûc. Ngáöm âënh ColorOrder âæåüc liãût kã trong baíng trãn âäúi våïi hãû maìu maì coï ngáöm âënh mäüt âæåìng laì maìu vaìng vaì nhiãöu âæåìng thç cuäün voìng qua 6 maìu âáöu träng baíng. Våïi hãû âån sàõc thç PLOT cuäün voìng qua âàûc tênh LineStyleOrder cuía truûc. PLOT traí vãö mäüt vectå cäüt caïc theí cuía caïc âäúi tæåüng LINE,mäùi theí mäüt doìng. Caïc càûp X,Y hoàûc bäü ba X,Y,S coï thãø theo sau laì caïc càûp tham säú/giaï trë âãø chè âënh caïc âàûc tênh thãm næîa cuía caïc âæåìng LOGLOG Veî hçnh bàòng caïch chia truûc loga LOGLOG(...) giäúng PLOT(...), ngoaûi træì duìng caïch chia logarit cho caí hai truûc XY SEMILOGX SEMILOGX veî hçnh bàòng caïch chia truûc baïn loga SEMILOGX(...) giäúng PLOT(...), ngoaûi træì chia truûc logarit (cå säú 10) duìng cho truûc X SEMILOGY SEMILOGY veî hçnh bàòng caïch chia truûc baïn loga SEMILOGY(...) giäúng PLOT(...), ngoaûi træì chia truûc logarit (cå säú 10) duìng cho truûc Y FILL Tä âa giaïc 2 chiãöu FILL(X,Y,C) tä âa giaïc 2 chiãöu xaïc âënh båíi caïc vectå X vaì Y våïi maìu chè âënh båíi C. Caïc âènh cuía âa giaïc chè âënh båíi caïc càûp thaình pháön cuía X vaì Y. Nãúu cáön, thç âoïng âa giaïc bàòng caïch näúi âènh cuäúi våïi âènh âáöu. Nãúu C laì mäüt chuäùi kyï tæû âån choün tæì danh saïch 'r','g','b', 'c','m','y','w','k', hoàûc mäüt bäü ba vectå doìng RGB, [r g b], thç âa giaïc âæåüc tä våïi hàòng maìu chè âënh. Nãúu C laì mäüt vectå cuìng âäü daìi nhæ X vaì Y thç caïc pháön tæí cuía noï âæåüc chia truûc båíi CAXIS vaì duìng nhæ chè säú trong COLORMAP hiãûn haình âãø chè âënh caïc maìu åí caïc âènh; maìu bãn trong âa giaïc nháûn âæåüc bàòng näüi suy song tuyãún tênh trong caïc maìu âènh Nãúu X vaì Y laì caïc ma tráûn cuìng cåî thç veî mäùi âa giaïc uïng våïi mäüt cäüt. Trong træåìng håüp naìy,

Page 165: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 164

Phan Thanh Tao - 2004

C laì vectå doìng våïi caïc maìu âa giaïc "beût", vaì C laì mäüt ma tráûn våïi caïc maìu cho âa giaïc “näüi suy ”. Nãúu hoàûc X hoàûc Y laì ma tráûn vaì thaình pháön khaïc laì mäüt vectå cäüt cuìng säú doìng thç âäúi säú vectå cäüt âæåüc làûp âãø cho ra mäüt ma tráûn coï kêch thæåïc âoìi hoíi FILL(X1,Y1,C1,X2,Y2,C2,...) laì mäüt caïch khaïc vãö chè âënh tä nhiãöu vuìng FILL âàût âäúi tæåüng PATCH laì FaceColor coï âàûc tênh 'nãön', 'näüi suy', hay maìu chè âënh tuìy thuäüc vaìo giaï trë cuat ma tráûn C. FILL traí vãö mäüt vectå cäüt caïc theí chè âãún caïc âäúi tæåüng PATCH, mäùi theí mäüt maính. Bäü ba X,Y,C coï thãø theo sau laì caïc càûp tham säú/giaï trë âãø chè âënh caïc âàûc tênh thãm cho caïc maính. FILL khäng âaïp æïng cho âàûc tênh truûc NextPlot

Caïc lãûnh âäö thë X-Y âàûc biãût

POLAR Veî âäö thë trong hãû toüa âäü cæûc POLAR(THETA, RHO) taûo mäüt âäö thë bàòng caïch duìng caïc toüa âäü cæûc cuía goïc THETA, âån vë radian, baïn kênh RHO POLAR(THETA,RHO,S) duìng chè âënh kiãøu âæåìng veî trong chuäùi S Xem lãûnh PLOT âãø biãút caïc kiãøu âæåìng veî håüp lãû BAR Veî biãøu âäö thanh âæïng BAR(Y) veî mäüt biãøu âäö cuía caïc pháön tæí cuía vectå Y BAR(X,Y) veî mäüt biãøu âäö cuía caïc pháön tæí cuía vectå Y taûi caïc vë trê chè âënh trong vectå X. Caïc giaï trë cuía X phaíi theo thæï tæû tàng dáön. Nãúu caïc giaï trë cuía X khäng chia âãöu thç viãûc choün caïc khoaíng khäng âäúi xæïng qua mäùi âiãøm dæî liãûu. Thay vaìo âoï, caïc thanh âæåüc veî åí giæîa caïc giaï trë X kãö nhau. Caïc âáöu muït âæåüc cháúp nháûn âån giaín theo caïc khoaíng trong cho caïc khoaíng ngoìai cáön thiãút Nãúu X vaì Y laì hai ma tráûn cuìng cåî thç veî mäùi biãøu âäö æïng våïi mäüt cäüt [XX,YY] = BAR(X,Y) khäng veî mäüt biãøu âäö maì láúy giaï trë traí vãö cuía caïc vectå X vaì Y âãø PLOT(XX,YY) laì lãûnh veî biãøu âäö Xem thãm STAIRS, HIST BAR(X,'linetype') hoàûc BAR(X,Y,'linetype') duìng kiãøu âæåìng veî chè âënh laì linetype. Xem PLOT âãø biãút thãm chi tiãút STEM Veî daîy dæî liãûu råìi raûc STEM(Y) veî daîy dæî liãûu Y nhæ dáy âæïng theo truûc x kãút thuïc våïi voìng troìn nhoí taûi caïc giaï trë

Page 166: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 165

Phan Thanh Tao - 2004

STEM(X,Y) veî daîy dæî liãûu Y taûi caïc giaï trë chè âënh trong X. Coï mäüt âäúi säú chuäùi tuìy choün cuäúi cuìng laì kiãøu âæåìng veî cho caïc dáy. Nhæ STEM(X,Y,'-.') hoàûc STEM(Y,':')

Page 167: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 166

Phan Thanh Tao - 2004

STAIRS Biãøu âäö báûc thang (biãøu âäö khäng coï caïc âæåìng bãn trong) STAIRS(Y) veî biãøu âäö báûc thang cuía caïc pháön tæí cuía vectå Y STAIRS(X,Y) veî biãøu âäö báûc thang cuía caïc pháön tæí cuía vectå Y taûi caïc vë trê chè âënh båíi X. Caïc gaïi trë cuía X phaíi theo thæï tæû tàng dáön vaì caïch âãöu [XX,YY] = STAIRS(X,Y) khäng veî mäüt biãøu âäö maì láúy giaï trë traí vãö cuía caïc vectå X vaì Y âãø PLOT(XX,YY) laì lãûnh veî biãøu âäö ERRORBAR ERRORBAR veî âäö thë våïi caïc thanh sai säú ERRORBAR(X,Y,L,U,SYMBOL) veî biãøu âäö cuía vectå Y theo X våïi caïc thanh sai säú chè âënh båíi caïc vectå L vaì U. The vectors X,Y, L vaì U phaíi cuìng âäü daìi. Nãúu X,Y, L vaì U laì caïc ma tráûn thç mäùi cäüt cho ra mäüt doìng riãng biãût. Caïc thanh sai säú âæåüc veî caïch U(i) åí trãn vaì L(i) åí dæåïi mäùi âiãøm trong (X,Y) âãø mäùi thanh coï âäü daìi L(i) + U(i). SYMBOL laì mäüt chuäùi âãø âiãöu khiãøn kiãøu âæåìng, caïc kyï hiãûu vaì maìu cho hçnh veî X-Y ERRORBAR(X,Y,L) veî Y theo X våïi mäüt thanh sai säú âäúi xæïng Y coï âäü daìi 2*L(i) ERRORBAR(Y,L) veî Y våïi thanh sai säú [Y-L Y+L] Vê duû, x = 1:10; y = sin(x); e = std(y)*ones(size(x)); errorbar(x,y,e) veî caïc thanh sai säú âäúi xæïng theo âäü lãûch chuáøn âån vë HIST Veî biãøu âäö HIST(Y) veî mäüt biãøu âäö gäöm 10 âiãøm caïch âãöu giæîa caïc giaï trë nhoí nháút vaì låïn nháút trong Y, trçnh baìy sæû phán bäú cuía caïc pháön tæí trong vectå Y HIST(Y,N), våïi N laì mäüt âaûi læåüng vä hæåïng, duìng N âiãøm HIST(Y,X), våïi X laì vectå, veî mäüt biãøu âäö duìng caïc âiãøm chi âënh trong X [N,X] = HIST(...) khäng veî biãøu âäö maì traí vãö caïc vectå X vaì N âãø lãûnh BAR(X,N) veî biãøu âäö ROSE Veî biãøu âäö hoa häöng hay biãøu âäö goïc ROSE(THETA) veî biãøu âäö goïc cho caïc goïc trong THETA. Caïc goïc trong vectå THETA phaíi chè âënh theo âån vë radian ROSE(THETA,N) våïi N laì âaûi læåüng vä hæåïng, duìng N âiãøm caïch âãúu tæì 0 âãún 2*PI. Ngáöm âënh N = 20

Page 168: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 167

Phan Thanh Tao - 2004

ROSE(THETA,X) våïi X laì vectå, veî biãøu âäö bàòng chaïch duìng caïc âiãøm chè âënh trong X [T,R] = ROSE(...) khäng veî maì traí vãö caïc vectå T vaì R âãø POLAR(T,R) veî biãøu âäö COMPASS COMPASS veî biãøu âäö compa COMPASS(Z) veî mäüt biãøu âäö compa âãø hiãøn thë goïc vaì mäâun cuía caïc pháön tæí phæïc cuía Z laì caïc muîi tãn xuáút phaït tæì gäúc COMPASS(X,Y) tæång âæång COMPASS(X+i*Y). Noï hiãøn thë goïc vaì mäâun cuía caïc pháön tæí cuía 2 ma tráûn X vaì Y COMPASS(Z,'S') vaì COMPASS(X,Y,'S') duìng kiãøu âæåìng 'S' våïi 'S' laì kiãøu håüp lãû nhæ trong lãûnh PLOT FEATHER FEATHER veî biãøu âäö läng chim FEATHER(Z) veî âäö thë âãø hiãøn thë goïc vaì mäâun cuía caïc pháön tæí phæïc cuía Z laì caïc muîi tãn xuáút phaït tæì caïc âiãøm caïch âãöu doüc theo mäüt truûc âæïng FEATHER(X,Y) tæång âæång FEATHER(X+i*Y). Noï hiãøn thë hçnh veî läng chim cho caïc goïc vaì mäâun cuía caïc pháön tæí cuía 2 ma tráûn X vaì Y FEATHER(Z,'S') vaì FEATHER(X,Y,'S') duìng kiãøu âæåìng 'S' våïi 'S' laì kiãøu håüp lãû nhæ trong lãûnh PLOT FPLOT Veî mäüt haìm FPLOT(FNAME,LIMS) veî haìm chè âënh båíi biãún chuäùi FNAME giæîa caïc giåïi haûn trãn truûc x chè âënh båíi LIMS = [XMIN XMAX]. LIMS = [XMIN XMAX YMIN YMAX] cho caïc giåïi haûn tuìy choün trãn truûc y. Haìm FNAME nãn laì haìm phuì håüp våïi chuáøn cäüt cuía MATLAB. Vê duû, nãúu FNAME laì haìm biãøu hiãûn båíi f = [f1(x) f2(x)], thç våïi giaï trë nháûp [x1 x2 x3]', haìm seî traí vãö ma tráûn _f1(x1)_f2(x1) f(x) =_f1(x2)_f2(x2) _f1(x3)_f3(x3) Màût khaïc, FNAME coï thãø laì chuäùi æåïc læåüng våïi biãún x, nhæ 'sin(x)', 'diric(x,10)' hoàûc '[sin(x),cos(x)]' FPLOT nháûn 2 tham säú tuy choün, MARKER vaì TOL. MARKER laì mäüt chuäùi chè âënh kiãøu âaïnh dáúu duìng trong hçnh veî. Ngáöm âënh kiãøu laì '-'. Thãm vaìo caïc kiãøu veî chuáøn, FPLOT cháúp nháûn '-+', '-x', '-o', '-*' (hoàûc '+-', 'x-', 'o-', vaì '*-'). TOL laì dung sai tæång âäúi. Ngáöm âënh laì 2e-3. Säú låïn nháút cuía caïc bæåïc trong x laì (1/TOL)+1 [X,Y] = fplot(FNAME,LIMS,...) traí vãö caïc hoaình âäü tung âäüü duìng âãø veî FNAME trong vectå cäüt X vaì trong caïc cäüt cuía ma tráûn Y Vê duû:

Page 169: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 168

Phan Thanh Tao - 2004

fplot('sin',[0 4*pi]) ; fplot('sin(x)',[0 4*pi],'-+') ; fplot('[sin(x),cos(x)]',[0 4*pi],'-x') fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi],'-o') fplot('tan',[-2*pi 2*pi -2*pi 2*pi],'-*') fplot('[tan(x),sin(x),cos(x)]',[-2*pi 2*pi -2*pi 2*pi]) fplot('sin(1 ./ x)', [0.01 0.1],1e-3) COMET Veî âäö thë våïi buït veî hoaût âäüng nhæ sao chäøi trong 2 chiãöu COMET(Y) hiãøn thë mäüt hçnh veî comet cuía vectå Y COMET(X,Y) hiãøn thë mäüt hçnh veî comet cuía vectå Y theo X COMET(X,Y,p) duìng comet âäü daìi p*length(Y). Ngáöm âënh p = 0.10 Chênh lãûnh COMET laì mäüt chæång trçnh máùu Vê duû: t = -pi:pi/200:pi; comet(t,tan(sin(t))-sin(tan(t)))

Chuï giaíi trãn âäö thë

TITLE Ghi tiãu âãö cho caïc hçnh veî 2 vaì 3 chiãöu TITLE('text') thãm doìng vàn baín åí âènh caïc truûc hiãûn thåìi TITLE('text','Property1',PropertyValue1,'Property2',PropertyValue2,...) âàût caïc giaï trë cuía caïc âàûc tênh chè âënh cuía tiãu âãö XLABEL Âaïnh nhaîn truûc X cho caïc hçnh veî 2 vaì 3 chiãöu XLABEL('text') thãm doìng vàn baín bãn caûnh truûc X cuía caïc truûc hiãûn thåìi XLABEL('text', 'Property1', PropertyValue1, 'Property2', PropertyValue2,...) âàût caïc giaï trë cuía caïc âàûc tênh chè âënh cuía nhaîn truûc x YLABEL Âaïnh nhaîn truûc Y cho caïc hçnh veî 2 vaì 3 chiãöu YLABEL('text') thãm doìng vàn baín bãn caûnh truûc X cuía caïc truûc hiãûn thåìi YLABEL('text', 'Property1', PropertyValue1, 'Property2', PropertyValue2,...) âàût caïc giaï trë cuía caïc âàûc tênh chè âënh cuía nhaîn truûc y TEXT Thãn vàn baín vaìo hçnh veî hiãûn thåìi TEXT(X,Y,'string') thãm vàn baín trong càûp dáúu nhaïy vaìo vë trê (X,Y) trãn caïc truûc hiãûn thåìi, våïi (X,Y) laì caïc âån vë cuía hçnh veî hiãûn thåìi.

Page 170: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 169

Phan Thanh Tao - 2004

Nãúu X vaì Y laì caïc vectå, TEXT ghi caïc vàn baín åí táút caí caïc vë trê chè âënh. Nãúu 'string' laì mäüt maíng cuìng säú doìng våïi âäü daìi cuía X vaì Y, TEXT âaïnh dáúu mäùi âiãøm våïi caïc doìng tæång æïng cuía maíng 'string' TEXT(X,Y,Z,'string') thãm vàn baín trong hãû toüa âäü 3 chiãöu TEXT traí vãö mäüt vectå cäüt gäöm caïc theí chè âãún caïc âäúi tæåüng TEXT, mäùi theí mäüt âäúi tæåüng vàn baín. Caïc âäúi tæåüng TEXT laì con cuía caïc âäúi tæåüng AXES. Càûp X,Y (bäü ba X,Y,Z cho 3 chiãöu) coï thãø theo sau båíi caïc càûp tham säú/giaï trë chè âënh caïc âàûc tênh thãm cuía vàn baín. Càûp X,Y (bäü ba X,Y,Z cho 3 chiãöu) coï thãø boí qua toaìn bäü, vaì táút caí caïc chè âënh âàûûc tênh bàòng caïch duìng caïc càûp tham säú/giaï trë. Thæûc hiãûn GET(H), våïi H laì theí vàn baín âãø xem danh saïch caïc âäúi tæåüng vàn baín vaì giaï trë håüp lãû cuía chuïng GTEXT Âàût vàn baín vaìo hçnh veî 2 chiãöu bàòng caïch duìng chuäüt GTEXT('string') hiãøn thë cuía säø âäö thë, âæa ra con troí chuäüt, vaì chåì áún nuït chuäüt hoàûc áún phêm. Con troí chuäüt coï thãø thay âäøi vë trê bàòng chuäüt (hoàûc bàòng caïc phêm muîi tãn trãn vaìi loaûi maïy). Khi áún nuït chuäüt hoàûc áún phêm báút kyì thç vàn baín âæa vaìo âäö thë taûi vë trê âæåüc choün GRID Veî caïc âæåìng læåïi cho caïc hçnh veî 2 vaì 3 chiãöu GRID ON thãm caïc âæåìng læåïi vaìo caïc truûc hiãûn thåìi GRID OFF tàõt caïc âæåìng læåïi GRID, chênh lãûnh naìy láût traûng thaïi hiãûn læåïi GRID âàût caïc âàûc tênh XGrid, YGrid, vaì ZGrid cuía caïc truûc hiãûn thåìi

Caïc lãûnh veî âæåìng vaì tä vuìng

PLOT3 Veî caïc âæåìng vaì âiãøm trong khäng gian 3 chiãöu PLOT3() tæång tæû 3 chiãöu cuía PLOT() PLOT3(x,y,z), våïi x, y vaì z laì 3 vectå cuìng âäü daìi, veî mäüt âæåìng trong khäng gian 3 chiãöu qua caïc âiãøm coï toüa âäü laì caïc pháön tæí cuía x, y vaì z PLOT3(X,Y,Z), våïi X, Y vaì Z laì 3 ma tráûn cuìng cåî, veî nhiãöu âæåìng nháûn âæåüc tæì caïc cäüt tæång æïng cuía X, Y vaì Z. Caïc kiãøu âæåìng khaïc nhau, dáúu hiãûu veî vaì maìu coï thãø nháûn âæåüc våïi PLOT3(X,Y,Z,s), s laì mäüt chuäùi gäöm 1, 2 hoàûc 3 kyï tæû láúy tæì caïc kyï tæû nhæ trong lãûnh PLOT

Page 171: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 170

Phan Thanh Tao - 2004

PLOT3(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3,s3,...) täø håüp caïc hçnh veî xaïc âënh båíi caïc bäü bäún (x,y,z,s), våïi caïc tham säú xi, yi vaì zi laì caïc vectå hoàûc ma tráûn vaì caïc si laì caïc chuäùi Vê duû: Mäüt âæåìng xoàõn äúc: t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t); PLOT3 traí vãö mäüt vectå cäüt caïc theí chè âãún caïc âäúi tæåüng LINE, mäùi theí mäüt doìng. Bäü ba X,Y,Z, hoàûc bäü bäún X,Y,Z,S coï thãø tiãúp theo laì caïc càûp tham säú/giaï trë âãø chè âënh caïc âàûc tênh thãm cuía caïc âæåìng FILL3 Veî vaì tä mäüt âa giaïc 3 chiãöu trong khäng gian 3 chiãöu FILL3(X,Y,Z,C) tä âa giaïc 3 chiãöu xaïc âënh båíi caïc vectå X, Y vaì Z våïi maìu chè âënh båíi C. Cac âènh cuía âa giaïc âæåüc chè âënh båíi caïc bäü ba caïc thaình pháön cuía X, Y vaì Z. Nãúu cáön thç âa giaïc âæåüc kheïp kên bàòng caïch näúi âènh cuäúi våïi âènh âáöu tiãn. Nãúu C laì mäüt kyï tæû âån choün tæì 'r','g','b', 'c','m','y','w','k', hoàûc mäüt bäü 3 vectå doìng RGB, [r g b], thç âa giaïc âæåüc tä våïi caïc hàòng maìu chè âënh. Nãúu C laì mäüt vectå cuìng âäü daìi X, Y vaì Z, thç caïc pháön tæí cuía noï âæåüc chia båíi CAXIS vaì duìng nhæ chè säú cuía COLORMAP hiãû thåìi âãø chè âënh caïc maìu åí mäùi âènh; maìu bãn trong âa giaïc nháûn âæåüc tæì pheïp näüi suy song tuyãún tênh trong caïc maìu âènh Nãúu X, Y vaì Z laì caïc ma tráûn cuìng cåî thç veî mäùi âa giaïc æïng våïi mäüt cäüt. Trong træåìng håüp naìy, C laì mäüt vectå doìng cho caïc maìu cuía âa giaïc “ nãön", vaì C laì ma tráûn cho caïc maìu âa giaïc “ näüi suy" Nãúu mäüt trong X, Y hoàûc Z laì ma tráûn, vaì caïc tham säú khaïc laì caïc vectå cäüt cuìng säú doìng, thç caïc âäúi säú vectå cäüt âæåüc taïi taûo âãø cho ra caïc ma tráûn coï kêch thæåïc håüp lãû FILL3(X1,Y1,Z1,C1,X2,Y2,Z2,C2,...) laì mäüt caïch khaïc âãø chè âënh tä nhiãöu vuìng FILL3 âàût âäúi tæåüng PATCH âàûc tênh FaceColor laì ' flat', 'interp', hoàûc mäüt chè âënh maìu phuû thuäüc vaìo giaï trë cuía ma tráûn C. FILL3 traí vãö mäüt vectå cäüt gäöm caïc theí chè âãøn caïc âäúi tæåüng PATCH, mäùi theí mäüt maính. Bäü bäún X,Y,Z,C coï thãø tiãúp theo laì caïc càûp tham säú/giaï trëâãø chè âënh caïc âàûc tênh thãm næîa cuía caïc maính. FILL3 khäng tæång æïng våïi âàûc tênh truûc cuía NextPlot

Page 172: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 171

Phan Thanh Tao - 2004

COMET3 Veî âäö thë våïi buït veî hoaût âäüng nhæ sao chäøi trong 3 chiãöu COMET3(Z) hiãøn thë mäüt hçnh veî comet 3 chiãöu cuía vectå Z COMET3(X,Y,Z) hiãøn thë mäüt hçnh veî comet 3 chiãöu cuía âæåìng cong qua caïc âiãøm [X(i),Y(i),Z(i)] COMET3(X,Y,Z,p) duìng comet âäü daìi p*length(Z). Ngáöm âënh p = 0.1 COMET3, chênh lãûnh naìy laì chæång trçnh máùu Vê duû: t = -pi:pi/500:pi; comet3(sin(5*t),cos(3*t),t)

Veî âæåìng mæïc vaì caïc hçnh veî khaïc 2 chiãöu cuía dæî liãûu 3 chiãöu

CONTOUR CONTOUR veî âæåììng mæïc CONTOUR(Z) laì mäüt hçnh veî âæåìng mæïc cuía ma tráûn Z xem caïc giaï trë cuía Z laì chiãöu cao trãn mäüt màût phàóng CONTOUR(X,Y,Z), våïi X vaì Y laì caïc vectå, chè âënh X vaì Y laì caïc truûc duìng trãn hçnh veî CONTOUR(Z,N) vaì CONTOUR(X,Y,Z,N) veî N âæåìng mæïc, âeì lãn caïc giaï trë ngáöm âënh mäüt caïch tæû âäüng. CONTOUR(Z,V) vaì CONTOUR(X,Y,Z,V) veî caïc âæåìng mæïc âäü daìi LENGTH(V) taûi caïc giaï trë chè âënh trong vectå V CONTOUR(...,'linetype') veî våïi maìu vaì kiãøu âæåìng chè âënh, nhæ lãûnh PLOT C=CONTOUR(...) traí vãö ma tráûn C nhæ trçnh baìy trong lãûnh CONTOURC vaì duìng båíi CLABEL [C,H] = CONTOUR(...) traí vãö vectå cäüt H gäöm caïc theí chè âãún caïc âäúi tæåüng LINE, mäùi theí mäüt âæåìng CONTOUR3 CONTOUR3 veî âæåìng mæïc 3chiãöu CONTOUR3(Z) veî caïc âæåìng mæïc cuía Z trong 3 chiãöu CONTOUR3(Z,N) veî N âæåìng mæïc trong 3 chiãöu. Ngáöm âënh N=10 CONTOUR3(X,Y,Z) hoàûc CONTOUR3(X,Y,Z,N) duìng caïc ma tráûn X vaì Y âã í xaïc âënh giåïi haûn cuía caïc truûc C = CONTOUR3(...) traí vãö ma tráûn âæåìng mæïc C nhæ trong lãûnh CONTOURC [C,H] = CONTOUR3(...)traí vãö vectå cäüt H gäöm caïc theí chè âãún caïc âäúi tæåüng LINE, mäùi theí mäüt âæåìng

Page 173: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 172

Phan Thanh Tao - 2004

CLABEL Thãm caïc nhaîn âæåìng mæïc vaìo hçnh veî âæåìng mæïc CLABEL(CS) thãm nhaîn âäü cao vaìo hçnh veî âæåìng mæïc hiãûn thåìi bàòng caïch duìng cáúu truïc CS xuáút tæì phuûc vuû CONTOUR. Caïc vë trê âaïnh nhaîn âæåüc choün mäüt caïch ngáùu nhiãn. Vê duû: cs = contour(rand(10)); clabel(cs) CLABEL(CS,V) âaïnh caïc nhaîn âuïng âæåìng mæïc âoï våïi caïc báûc cho trong vectå V. Ngáöm âënh thç hoaût âäüng naìy âaïnh nhaîn cho táút caí caïc âæåìng mæïc âaî biãút CLABEL(CS,'manual') âàût caïc nhaîn âæåìng mæïc taûi caïc vë trê áún chuäüt. ÁÚn <ENTER> âãø kãút thuïc viãûc âaïnh nhaîn. Duìng thanh träúng (phêm space bar) âãø vaìo caïc âæåìng mæïc vaì caïc phêm muîi tãn âãø di chuyãøn con troí chuäüt nãúu khäng duìng âæåüc chuäüt CONTOURC CONTOURC Tênh âæåìng mæïc CONTOURC tênh ma tráûn âæåìng mæïc C âãø duìng CONTOUR veî âæåìng mæïc C = CONTOURC(Z) tênh ma tráûn âæåìng mæïc cho mäüt hçnh veî âæåìng mæïc cuía ma tráûn Z bàòng caïch xem caïc giaï trë trong Z laì âäü cao trãn hçnh veî C = CONTOURC(X,Y,Z), våïi X vaì Y laì caïc vectå, chè âënh X vaì Y laì caïc truûc âãø Ø tênh âæåìng mæïc CONTOURC(Z,N) vaì CONTOURC(X,Y,Z,N) tênh N âæåìng mæïc, âeì lãn caïc giaï trë ngáöm âënh mäüt caïch tæû âäüng CONTOURC(Z,V) vaì CONTOURC(X,Y,Z,V) tênh LENGTH(V) âæåìng mæïc taûi caïc giaï trë chè âënh trong vectå V Ma tráûn âæåìng mæïc C laì ma tráûn 2 doìng cuía caïc âæåìng mæïc. Mäùi âoaûn veî liãn tiãúp chæïa giaï trë cuía âæåìng mæïc, säú càûp veî (x,y), vaì veî chênh caïc càûp Caïc âoaûn liãn tiãúp näúi nhau nhæ C = [level1 x1 x2 x3 ... level2 x2 x2 x3 ...; pairs1 y1 y2 y3 ... pairs2 y2 y2 y3 ...] PCOLOR Veî giaí maìu (baíng kiãøm tra) PCOLOR(C) laì mäüt hçnh veî giaí maìu hay laì " baíng kiãøm tra " cuía ma tráûn C. Caïc giaï trë cuía caïc pháön tæí cuía C chè âënh maìu trãn mäùi ä cuía hçnh veî. Trong chãú âäü âàût boïng ngáöm âënh, 'faceted’, mäùi ä coï mäüt hàòng maìu vaì doìng vaì cäüt cuäúi cuía C khäng âæåüc duìng. Våïi boïng näüi suy, 'interp', mäùi ä coï maìu laì kãút quaí tæì pheïp näüi suy song tuyãún tênh cuía maìu åí bäún âènh vaì táút caí caïc pháön tæí cuía C âãöu âæåüc duìng. Caïc pháön tæí låïn nháút vaì nhoí nháút cuía C âæåüc gaïn cho caïc maìu âáöu vaì cuäúi cho trong baíng maìu; caïc maìu cho caïc pháön tæí coìn laûi trong C âæåüc xaïc âënh båíi baíng - tçm bãn trong pháön coìn laûi cuía baíng maìu

Page 174: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 173

Phan Thanh Tao - 2004

PCOLOR(X,Y,C), våïi X vaì Y laì caïc vectå vaì ma tráûn, taûo ra mäüt hçnh veî giaí maìu trãn læåïi xaïc âënh båíi X vaì Y. X vaì Y coï thãø xaïc âënh læåïi cho mäüt "âéa ” chàóng haûn. PCOLOR thæûc sæû laì SURF våïi hçnh aính cuía noï âàût træûc tiãúp lãn trãn PCOLOR traí vãö mäüt theí chè âãún âäúi tæåüng SURFACE QUIVER QUIVER veî âäü rung (hay täúc âäü) QUIVER(X,Y,U,V) veî caïc vectå täúc âäü våïi caïc thaình pháön (u,v) taûi caïc âiãøm (x,y). Caïc ma tráûn X,Y,U,V phaíi cuìng cåî vaì chæïa caïc vë trê tæång æïng våïi caïc thaình pháön täúc âäü (X vaì Y cuîng coï thãø laì caïc vectå chè âënh mäüt læåïi âäöng bäü). QUIVER tæû âäüng phán bäú caïc vectå täúc âäü cho phuì håüp bãn trong læåïi QUIVER(U,V) veî caïc vectå täúc âäü taûi caïc âiãøm caïch âãöu trong màût phàóng x-y QUIVER(X,Y,S) hay QUIVER(X,Y,U,V,S,...) tæû âäüng phán bäú caïc vectå täúc âäü cho phuì håüp bãn trong læåïi räöi nhán chuïng våïi S. Duìng S=0 âãø veî caïc vectå täúc âäü maì khäng tæû âäüng phán bäú QUIVER(...,STYLE) duìng hçnh veî våïi kiãøu veî âæåìng chè âënh båíi chuäùi STYLE cho caïc vectå täúc âäü. Âæa vaìo mäüt dáúu '>' trong STYLE âãø veî caïc âáöu muîi tãn trong caïc vectå täúc âäü Xem PLOT våïi caïc kiãøu veî âæåìng H = QUIVER(...) traí vãö vectå gäöm caïc theí âæåìng Vê duû: [x,y] = meshgrid(-2:.2:2,-1:.15:1); z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.15); contour(x,y,z), hold on quiver(x,y,px/5,py/5), hold off, axis image

Caïc lãûnh veî bãö màût vaì læåïi

MESH Màût læåïi 3 chiãöu MESH(X,Y,Z,C) veî læåïi tham säú maìu xaïc âënh båíi 4 âäúi säú ma tráûn. Âiãøm xem âæåüc chè âënh båíi VIEW. Caïc nhaîn truûc âæåüc xaïc âënh båíi miãön giaï trë cuía X, Y vaì Z, hoàûc båíi caìi âàût hiãûn thåìi cuía AXIS. Viãûc chia maìu âæåüc xaïc âënh båíi miãön giaï trë cuía C, hoàûc båíi caìi âàût hiãûn thåìi cuía CAXIS. Caïc giaï trë maìu âaî chia âæåüc duìng nhæ caïc chè säú cho COLORMAP hiãûn thåìi MESH(X,Y,Z) duìng C = Z, vç váûy maìu âæåüc cán xæïng våïi âäü cao cuía læåïi MESH(x,y,Z) vaì MESH(x,y,Z,C), våïi 2 âäúi säú vectå thay 2 âäúi säú ma tráûn âáöu tiãn, phaíi coï length(x) = n vaì length(y) = våïi [m,n] = size(Z). Trong træåìng håüp naìy, caïc âènh cuía cuía caïc âæåìng læåïi laì caïc bäü ba (x(j), y(i), Z(i,j)). Læu yï

Page 175: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 174

Phan Thanh Tao - 2004

ràòng x tæång æïng våïi caïc cäüt cuía Z vaì y tæång æïng våïi caïc doìng MESH(Z) vaì MESH(Z,C) duìng x = 1:n vaì y = 1:m. Trong træåìng håüp naìy, chiãöu cao, Z, laì mäüt haìm giaï trë âån, xaïc âënh trãn mäüt læåïi hçnh hoüc chæî nháût MESH traí vãö mäüt theí chè âãún mäüt âäúi tæåüng SURFACE AXIS, CAXIS, COLORMAP, HOLD, SHADING vaì VIEW âàût hçnh aính, caïc truûc, vaì caïc âàûc tênh bãö màût âãø aính hæåíng viãûc hiãøn thë læåïi MESHC Täø håüp lãûnh veî MESH/CONTOUR MESHC(...) giäúng nhæ MESH(...) ngoaûi træì mäüt hçnh veî âæåìng mæïc âæåüc veî bãn dæåïi læåïi. Vç CONTOUR khäng xæí lyï dæî liãûu kyì dë, nãn phuûc vuû naìy chè laìm viãûc âäúi våïi caïc bãö màût xaïc âënh trãn læåïi chæî nháût. Caïc ma tráûn hoàûc vectå X vaì Y chè xaïc âënh caïc giåïi haûn truûc MESHZ Veî læåïi 3 chiãöu våïi màût phàóng chiãúu MESHZ(...) giäúng nhæ MESH(...) ngoaûi træì mäüt màût chiãúu âæåüc veî bãn dæåïi Phuûc vuû naìy chè laìm viãûc âäúi våïi caïc bãö màût âæåüc xaïc âënh trãn mäüt læåïi chæî nháût. caïc ma tráûn X vaì Y chè xaïc âënh caïc giåïi haûn truûc SURFACE SURFACE taûo caïc âäúi tæåüng bãö màût báûc tháúp SURFACE(X,Y,Z,C) thãm màût trong X,Y,Z,C vaìo caïc truûc hiãûn thåìi SURFACE(X,Y,Z) duìng C = Z, vç váûy cán xæïng våïi âäü cao bãö màût Xem SURF âãø coï âáöy âuí caïc daûng khaïc nhau maì X,Y,Z,C coï thãø láúy SURFACE traí vãö mäüt theí chè âãún mäüt âäúi tæåüng SURFACE. Caïc âäúi tæåüng SURFACE laì con cuía caïc âäúi tæåüng AXES Caïc âäúi säú cho SURFACE coï thãø theo sau laì caïc càûp tham säú/giaï trë âãø chè âënh caïc âàûc tênh thãm cho màût. Caïc âäúi säú X,Y,Z,C cho SURFACE coï thãø boí qua toaìn bäü, vaì táút caí caïc âàût tênh chè âënh bàòng caïch duìng caïc càûp tham säú/giaï trë AXIS, CAXIS, COLORMAP, HOLD, SHADING vaì VIEW âàût caïc âàûc tênh hçnh aính, caïc truûc, vaì màût coï hiãûu læûc cho viãûc hiãøn thë cuía SURFACE Thæûc hiãûn GET(H), våïi H laì mäüt theí màût, âãø xem danh saïch caïc âàûc tênh âäúi tæåüng màût vaì caïc giaï trë hiãûn thåìi cuía chuïng. Thæûc hiãûn SET(H) âãø xem danh saïch caïc âàûc tênh vaì caïc giaï trë âàûc tênh håüp lãû cuía âäúi tæåüng màût SURF Veî màût 3 chiãöu

Page 176: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 175

Phan Thanh Tao - 2004

SURF(X,Y,Z,C) veî màût coï tham säú maìu xaïc âënh båíi 4 âäúi säú ma tráûn. Âiãøm xem âæåüc chè âënh båíi VIEW. Caïc nhaîn truûc âæåüc xaïc âënh båíi miãön giaï trë cuía X, Y vaì Z, hoàûc båíi caìi âàût hiãûn thåìi cuía AXIS. Viãûc chia maìu âæåüc xaïc âënh båíi miãön giaï trë cuía C, hoàûc båíi caìi âàût hiãûn thåìi cuía CAXIS. Caïc giaï trë maìu âaî chia âæåüc duìng nhæ caïc chè säú cho COLORMAP hiãûn thåìi. Mä hçnh boïng âæåüc âàût båíi SHADING SURF(X,Y,Z) duìng C = Z, vç váûy maìu âæåüc cán xæïng våïi âäü cao cuía læåïi SURF(x,y,Z) vaì SURF(x,y,Z,C), våïi 2 âäúi säú vectå thay 2 âäúi säú ma tráûn âáöu tiãn, phaíi coï length(x) = n vaì length(y) = våïi [m,n] = size(Z). Trong træåìng håüp naìy, caïc âènh cuía cuía caïc maính bãö màût laì caïc bäü ba (x(j), y(i), Z(i,j)). Læu yï ràòng x tæång æïng våïi caïc cäüt cuía Z vaì y tæång æïng våïi caïc doìng SURF(Z) vaì SURF(Z,C) duìng x = 1:n vaì y = 1:m. Trong træåìng håüp naìy, chiãöu cao, Z, laì mäüt haìm giaï trë âån, xaïc âënh trãn mäüt læåïi hçnh hoüc chæî nháût SURF traí vãö mäüt theí chè âãún mäüt âäúi tæåüng SURFACE AXIS, CAXIS, COLORMAP, HOLD, SHADING vaì VIEW âàût hçnh aính, caïc truûc, vaì caïc âàûc tênh bãö màût âãø aính hæåíng viãûc hiãøn thë læåïi SURFC Täø håüp lãûnh veî SURF/CONTOUR SURFC(...) giäúng SURF(...) ngoaûi træì mäüt âæåìng mæïc âæåüc veî bãn dæåïi bãö màût Vç CONTOUR khäng xæí lyï dæî liãûu kyì dë, nãn phuûc vuû naìy chè laìm viãûc âäúi våïi caïc bãö màût xaïc âënh trãn læåïi chæî nháût. Caïc ma tráûn hoàûc vectå X vaì Y chè xaïc âënh caïc giåïi haûn truûc SURFL Veî màût 3 chiãöu coï âäü saïng SURFL(...) giäúng nhæ SURF(...) ngoaûi træì veî bãö màût våïi caïc âäü saïng tæì mäüt nguäön saïng. SURFL(Z), SURFL(X,Y,Z), SURFL(Z,S), vaì SURFL(X,Y,Z,S) táút caí âãöu håüp lãû. Nãúu coï chè âënh S, thç 3 vectå S = [Sx,Sy,Sz] chè âënh hæåïng nguäön saïng. S cuîng coï thãø chè âënh trong hãû toüa âäü maìu, S = [AZ,EL]. Boïng hçnh dæûa vaìo täø håüp caïc kiãøu âäü saïng khuãúch taïn, phaín chiãúu vaì bao quanh. Giaï trë ngáöm âënh cho S laì 450 cuìng chiãöu kim âäöng häö tæì hæåïng xem hiãûn thåìi. Duìng CLA, HOLD ON, VIEW(AZ,EL), SURFL(...), HOLD OFF âãø veî màût coï âäü saïng våïi hæåïng quan saït (AZ,EL). Phán bäú tæång âäúi âãø coï âäü saïng chung quanh(ka), khuãúch taïn(kd) , phaín chiãúu(ks) vaì âäü trong suäút (spread ) coï thãø âæåüc âàût båíi 5 âäúi säú SURFL(X,Y,Z,S,K) våïi K=[ka,kd,ks,spread]

Page 177: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 176

Phan Thanh Tao - 2004

Dæûa vaìo thæï tæû caïc âiãøm trong caïc ma tráûn X,Y, vaì Z âãø xaïc âënh bãn trong vaì bãn ngoaìi cuía caïc bãö màût tham säú. Thæí lãûnhSURFL(X',Y',Z') nãúu baûn khäng thêch kãút quaí cuía haìm naìy. Do caïch tênh caïc vectå chuáøn cuía bãö màût, nãn SURFL âoìi hoíi caïc ma tráûn êt nháút laì báûc 3

Page 178: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 177

Phan Thanh Tao - 2004

WATERFALL WATERFALL veî thaïc næåïc WATERFALL(...) giäúng nhæ MESH(...) ngoaûi træì caïc âæåìng cäüt cuía læåïi khäng âæåüc veî - do âoï cho ra mäüt hçnh veî “ thaïc næåïc ”. Âãø phán têch dæî liãûu theo hæåïng cäüt, duìng WATERFALL(Z') hoàûc WATERFALL(X',Y',Z') SLICE Veî caïc maính slice SLICE(X,Y,Z,V,XI,YI,ZI,N) veî caïc maính slice doüc theo caïc màût x, y, hoàûc z taûi caïc vë trê chè âënh båíi båíi caïc bäü ba (xi,yi,zi). N säú cäüt trong maíng V cåî MxNxP SLICE(V,XI,YI,ZI,N) giaí sæí X = 1:N, Y = 1:M, Z = 1:P. Vê duû, âãø æåïc læåüng haìm x*exp(-x^2-y^2-z^2) trãn miãön giaï trë -2 < x < 2, -2 < y < 2, - 2 < z < 2, [x,y,z] = meshgrid(-2:.2:2, -2:.25:2, -2:.16:2); v = x .* exp(-x.^2 - y.^2 - z.^2); % V is 17-by-21-by-26 slice(x,y,z,v,[-1.2 .8 2],2,[-2 -.2],21) SLICE traí vãö mäüt vectå gäöm caïc theí chè âãún caïc âäúi tæåüng SURFACE

Caïch thãø hiãûn hçnh aính

VIEW Chè âënh âiãøm quan saït âäö thë 3 chiãöu VIEW(AZ,EL) vaì VIEW([AZ,EL]) âàût goïc quan saït tæì hçnh veî 3 chiãöu hiãûn thåìi. AZ laì goïc phæång vë hay laì âäü quay ngang vaì EL laì âäü náng cao (caí hai theo âån vë âäü). Goïc phæång vë quay theo truûc z, caïc giaï trë dæång biãøu hiãûn viãûc quay ngæåüc chiãöu kim âäöng häö cuía âiãøm xem. Caïc giaï trë dæång cuía goïc náng æïng våïi di chuyãøn lãn trãn âäúi tæåüng, ám di chuyãøn xuäúng tháúp VIEW([X Y Z]) âàût goïc xem trong hãû toüa âäü Âãö-caïc. Mäâun caïc vectå X,Y,Z âæåüc boí qua Vaìi vê duû: AZ = -37.5, EL = 30 laì xem 3 chiãöu ngáöm âënh AZ = 0, EL = 90 2-D laì xem 2 chiãöu ngáöm âënh AZ = EL = 0 nhçn træûc tiãúp lãn cäüt âáöu cuía ma tráûn AZ = 180 laì màût sau ma tráûn VIEW(2) âàût ngáöm âënh xem 2 chiãöu, AZ = 0, EL = 90 VIEW(3) âàût ngáöm âënh xem 3 chiãöu, AZ = -37.5, EL = 30 [AZ,EL] = VIEW traí vãö goïc phæång vë vaì goïc náng hiãûn thåìi VIEW(T) nháûn mäüt ma tráûn biãún âäøi báûc 4, nhæ caïc pheïp phäúi caính phaït sinh båíi VIEWMTX T = VIEW traí vãö ma tráûn biãún âäøi täøng báûc 4 hiãûn thåìi

Page 179: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 178

Phan Thanh Tao - 2004

VIEWMTX VIEWMTX Phaït sinh caïc ma tráûn biãún âäøi quan saït A=VIEWMTX(AZ,EL) traí vãö ma tráûn biãún âäøi træûc giao báûc 4, A, duìng âãø chiãúu caïc vectå 3 chiãöu lãn bãö màût 2 chiãöu. Duìng cuìng goïc phæång vë vaì goïc náng nhæ VIEW, âàûc biãût, AZ vaì EL phaíi theo âån vë âäü. Traí vãö cuìng ma tráûn biãún âäøi nhæ caïc lãûnh _VIEW(AZ,EL) _A = VIEW nhæng khäng thay âäøi VIEW hiãûn thåìi A=VIEWMTX(AZ,EL,PHI) traí vãö ma tráûn biãún âäøi phäúi caính báûc 4 duìng âãø chiãúu caïc vectå 3 chiãöu lãn bãö màût 2 chiãöu. PHI laì goïc træång cuía khäúi chuáøn (âån vë âäü) vaì âiãöu khiãøn sæû âäü lãûch phäúi caính: _PHI = 00 laì pheïp chiãúu træûc giao _PHI = 100 giäúng camera _PHI = 250 nhæ tháúu kênh thæåìng _PHI = 600 nhæ tháúu kênh goïc räüng Ma tráûn A coï thãø duìng âãø dàût pheïp biãøn âäøi quan saït bàòng lãûnh VIEW(A) A=VIEWMTX(AZ,EL,PHI,XC) traí vãö ma tráûn biãún âäøi phäúi caính bàòng caïch duìng XC laì âiãøm âêch bãn trong khäúi. XC=[xc,yc,zc] chè âënh âiãøm (xc,yc,zc) trong khäúi chuáøn. Giaï trë ngáöm âënh laì âiãøm gáön khäúi chuáøn nháút, XC = 0.5+sqrt(3)/2*[cos(EL)*sin(AZ),-cos(EL)*cos(AZ),sin(EL)] HIDDEN Âàût chãú âäü xoïa âæåìng áøn cuía læåïi HIDDEN ON báût chãú âäü xoïa âæåìng áøn cuía læåïi hiãûn haình HIDDEN OFF tàõt chãú âäü xoïa âæåìng áøn vç váûy coï thãø tháúy qua læåïi hiãûn haình Chênh lãûnh HIDDEN láût traûng thaïi xoïa âæåìng áøn SHADING SHADING âàût chãú âäü boïng hçnh SHADING âiãöu khiãøn maìu boïng cuía caïc âäúi tæåüng SURFACE vaì PATCH. Caïc âäúi tæåüng SURFACE vaì PATCH âæåüc taûo ra båíi caïc haìm SURF, MESH, PCOLOR, FILL, vaì FILL3. SHADING FLAT âàût boïng cuía âäö hoüa hiãûn haình vaìo nãön SHADING INTERP âàût boïng vaìo pheïp näüi suy SHADING FACETED âàût boïng vaìo âa diãûn vaì laì ngáöm âënh. Boïng nãön laì hàòng theo tæìng maính; mäùi âoaûn cuía âæåìng læåïi hay maính bãö màût coï mäüt maìu hàòng xaïc âënh båíi giaï trë maìu åí mäùi âáöu muït cuía mäùi âoaûn hoàûc goïc cuía mäùi maính coï chè säú nhoí nháút trong caïc chè säú. Boïng näüi suy, coìn goüi laì boïng, laì song tuyãún tênh theo tæìng maính; maìu trong mäùi âoaûn hoàûc caïc maính

Page 180: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 179

Phan Thanh Tao - 2004

khaïc nhau laì tuyãún tênh vaì våïi caïc giaï trë cuäúi hoàûc goïc. Boïng âa diãûn laì boïng nãön âeì lãn caïc âæåìng læåïi âen. Boïng naìy thæåìng coï hiãûu læûc nháút vaì laì ngáöm âënh SHADING laì mäüt tãûp M-file âãø âàût caïc âàûc tênh EdgeColor vaì FaceColor cuía táút caí caïc âäúi tæåüng SURFACE trong caïc truûc hiãûn thåìi. Noï âàût vaìo caïc giaï trë âuïng âàõn phuû thuäüc vaìo caïc âäúi tæåüng SURFACE âæåüc biãøu hiãûn bàòng caïc læåïi hay màût Caïc haìm AXIS , CAXIS , COLORMAP nhæ trong plotxy

Caïc âäúi tæåüng 3 chiãöu

CYLINDER CYLINDER Phaït sinh hçnh truû [X,Y,Z] = CYLINDER(R,N) taûo hçnh truû dæûa vaìo bäü phaït sinh âæåìng cong trong vectå R.. Vectå R chæïa caïc baïn kênh taûi caïc âiãøm caïch âãöu doüc theo âäü cao âån vë cuía hçnh truû. Hçnh truû coï N âiãøm quanh chu vi. SURF(X,Y,Z) hiãøn thë hçnh truû [X,Y,Z] = CYLINDER(R), vaì [X,Y,Z] = CYLINDER ngáöm âënh N = 20 vaì R = [1 1] Viãûc boí qua caïc âäúi säú xuáút laìm cho hçnh truû âæåüc hiãøn thë våïi lãûnh SURF vaì khäng traí vãö SPHERE Phaït sinh hçnh cáöu [X,Y,Z] = SPHERE(N) phaït sinh 3 ma tráûn cáúp (n+1) âãø SURF(X,Y,Z) cho ra hçnh cáöu âån vë [X,Y,Z] = SPHERE duìng N = 20 SPHERE(N) vaì lãûnh SPHERE veî hçnh cáöu nhæ lãûnh SURFACE vaì khäng traí vãö gç caí

Âiãöu khiãøn maìu

COLORMAP COLORMAP Âàût baíng maìu tra cæïu COLORMAP(MAP) âàût baíng maìu cuía hçnh aính hiãûn thåìi vaìo MAP COLORMAP('default') âàût baíng maìu cuía hçnh aính hiãûn thåìi vaìo giaï trë màûc âënh laì HSV MAP = COLORMAP láúy baíng maìu hiãûn thåìi. Caïc giaï trë trong âoaûn [0,1] Mäüt ma tráûn baíng maìu coï thãø coï säú doìng báút kyì, nhæng phaíi coï âuïng 3 cäüt. Mäùi doìng âæåüc thäng dëch thaình mäüt maìu, våïi pháön tæí âáöu chè âënh âäü saïng cuía maìu âoí, thæï 2 cho maìu xanh luûc , vaì 3 cho maìu xanh dæång. Âäü saïng coï thãø âæåüc chè âënh trãn âoaûn [0,1] Vê duû, [0 0 0] laì hoaìn toaìn âen, [1 1 1] laì tràõng, [1 0 0] laì âoí, [.5 .5 .5] laì xaïm, vaì [127/255 1 212/255] laì ngoüc dæång. Caïc âäúi tæåüng

Page 181: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 180

Phan Thanh Tao - 2004

âäö hoüa duìng giaí maìu -- laì caïc âäúi tæåüng SURFACE vaì PATCH, âæåüc taûo ra båíi caïc haìm MESH, SURF, vaì PCOLOR -- aïnh xaû mäüt ma tráûn maìu, C, coï caïc giaï trë trong miãön [Cmin, Cmax], vaìo mäüt maíng caïc chè säú k, trong miãön [1, m]. Caïc giaï trë Cmin vaì Cmax laì min(min(C)) vaì max(max(C)), hoàûc laì chè âënh båíi CAXIS. AÏnh xaû laì tuyãún tênh, våïi Cmin aïnh xaû sang chè säú 1 vaì Cmax aïnh xaû sang chè säú m. Sau âoï caïc chè säú âæåüc duìng våïi baíng maìu âãø xaïc âënh maìu tæång æïng våïi mäùi pháön tæí cuía ma tráûn. Xem CAXIS âãø biãút thãm chi tiãút. Vaìo lãûnh HELP COLOR âãø xem mäüt säú caïc baíng maìu thäng duûng. COLORMAP laì mäüt M-file âãø âàût thuäüc tênh baíng maìu cuía hçnh aính hiãûn thåìi CAXIS Chia truûc giaí maìu CAXIS(V), våïi V laì vectå 2 pháön tæí [cmin cmax], âàût caïch chia truûc thuí cäng giaí maìu cho caïc âäúi tæåüng SURFACE vaì PATCH taûo ra båíi caïc lãûnh nhæ MESH, PCOLOR, vaì SURF. cmin vaì cmax âæåüc gaïn vaìo caïc maìu âáöu vaì cuäúi cuía baíng maìu hiãûn thåìi. Caïc maìu cho PCOLOR vaì SURF âæåüc xaïc âënh båíi baíng tra cæïu trong miãön naìy. Caïc giaï trë ngoaìi miãön âæåüc xeïn bàòng caïch taûo ra chuïng mäüt caïch roî raìng. CAXIS('auto') âàût caïch chia truûc ngæåüc vãö miãön giaï trë tæû âäüng. Chênh haìm CAXIS traí vãö vectå doìng gäöm 2 pháön tæí [cmin cmax] âang coï hiãûu læûc. CAXIS laì mäüt M-file âãø âàût caïc âàûc tênh truûc CLim vaì CLimMode SHADING SHADING Chãú âäü maìu cuía boïng SHADING âiãöu khiãøn maìu boïng cuía caïc âäúi tæåüng SURFACE vaì PATCH. Caïc âäúi tæåüng SURFACE vaì PATCH âæåüc taûo ra båíi caïc haìm SURF, MESH, PCOLOR, FILL, vaì FILL3 SHADING FLAT âàût boïng cuía hçnh veî hiãûn thåìi vaìo nãön SHADING INTERP âàût boïng vaìo näüi suy SHADING FACETED âàût boïng nhiãöu màût, vaì laì ngáöm âënh Boïng nãön laì hàòng tæìng maính; mäùi âoaûn thàóng cuía læåïi hoàûc maính màût coï mäüt hàòng maìu âæåüc xaïc âënh båíi giaï trë maìu taûi âáöu muït cuía âoaûn hoàûc goïc cuía maính coï chè säú nhoí nháút. Boïng näüi suy coìn goüi laì boïng Gouraud, laì song tuyãún tênh tæìng maính; maìu trãn mäùi âoaûn hoàûc mäùi maính khaïc våïi caïc giaï trë åí âáöu muït hoàûc goïc theo caïch tênh tuyãún tênh hoàûc näüi suy. Boïng nhiãöu màût laì boïng nãön våïi caïc âæåìng læåïi âen âeì lãn. Âáy thæåìng laì caïch hiãûu læûc nháút vaì laì màûc âënh. SHADING laì mäüt M-file âãø âàût caïc âàûc tênh EdgeColor vaì FaceColor cuía táút caí caïc âäúi tæåüng SURFACE trong caïc truûc hiãûn thåìi. Noï âàût chuïng

Page 182: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 181

Phan Thanh Tao - 2004

vaìo caïc giaï trë âuïng âàõn phuû thuäüc vaìo caïc âäúi tæåüng SURFACE laì læåïi hay màût

Caïc baíng maìu

HSV Baíng maìu HSV (Saïng-Âáûm-Giaï trë) HSV(M) traí vãö ma tráûn cåî Mx3 chæïa mäüt baíng maìu HSV HSV, cuìng âäü daìi våïi baíng maìu hiãûn thåìi. Mäüt baíng maìu HSV khaïc thaình pháön maìu sàõc vãö mä hçnh HSV. Caïc maìu bàõt âáìu våïi maìu âoí, âãún vaìng, xanh luûc, thiãn thanh, xanh dæång, têm, vaì tråíí vãö âoí. Baíng maìu hæîu êch âàûc biãût cho viãûc hiãøn thë caïc chæïc nàng coï chu kyì Vê duû, âãø âàût laûi baíng maìu cuía hçnh aính hiãûn thåìi: colormap(hsv) GRAY Baíng maìu chia truûc xaïm tuyãún tênh GRAY(M) traí vãö mäüt ma tráûn Mx3 chæïa mäüt baíng maìu chia truûc xaïm tuyãún tênh GRAY, cuìng âäü daìi våïi baíng maìu hiãûn thåìi Vê duû, âãø âàût laûi baíng maìu cuía hçnh aính hiãûn thåìi: colormap(gray) HOT Baíng maìu Âen-Âoí-Vaìng-Tràõng (Black-red-yellow-white) HOT(M) traí vãö mäüt ma tráûn cåî Mx3 chæïa mäüt baíng maìu "hot" HOT, cuìng âäü daìi våïi baíng maìu hiãûn thåìi Vê duû, âãø âàût laûi baíng maìu cuía hçnh aính hiãûn thåìi: colormap(hot) COOL Taûo daïng cuía baíng maìu thiãn thanh vaì têm COOL(M) traí vãö mäüt ma tráûn cåî Mx3 chæïa mäüt baíng maìu "cool" COOL, cuìng âäü daìi våïi baíng maìu hiãûn thåìi Vê duû, âãø âàût laûi baíng maìu cuía hçnh aính hiãûn thåìi: colormap(cool) BONE Chia truûc xaïm våïi mäüt baíng maìu pha mäüt êt xanh dæång BONE(M) traí vãö mäüt ma tráûn cåî Mx3 chæïa mäüt baíng maìu "bone" BONE, cuìng âäü daìi våïi baíng maìu hiãûn thåìi Vê duû, âãø âàût laûi baíng maìu cuía hçnh aính hiãûn thåìi: colormap(bone)

Page 183: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 182

Phan Thanh Tao - 2004

COPPER Baíng maìu maû âäöng tuyãún tênh COPPER(M) traí vãö mäüt ma tráûn cåî Mx3 chæïa mäüt baíng maìu "copper" COPPER, cuìng âäü daìi våïi baíng maìu hiãûn thåìi Vê duû, âãø âàût laûi baíng maìu cuía hçnh aính hiãûn thåìi: colormap(copper) PINK Caïc boïng tuìng lam nhaût cuía baíng maìu häöng PINK(M) traí vãö mäüt ma tráûn cåî Mx3 chæïa mäüt baíng maìu "pink" PINK, cuìng âäü daìi våïi baíng maìu hiãûn thåìi Vê duû, âãø âàût laûi baíng maìu cuía hçnh aính hiãûn thåìi: colormap(pink) PRISM Baíng maìu coï caïc maìu làng kênh PRISM(M) traí vãö mäüt ma tráûn cåî Mx3 chæïa caïch duìng làûp 6 maìu: âoí, da cam, vaìng, xanh luûc, xanh dæång, têm violet. Giaï trë màûc âënh cuía M laì âäü daìi cuía baíng maìu hiãûn thåìi PRISM, khäng coï tham säú nháûp hoàûc xuáút, thay âäøi caïc maìu cuía caïc âäúi tæåüng báút kyì trong caïc truûc hiãûn thåìi sang maìu làng kênh. Caïch naìy âàûc biãût hæîu êch âäúi våïi mäüt hçnh veî CONTOUR contour(data,20) prism Caïc maìu trong baíng PRISM cuîng âæåüc âæa ra giäúng nhæ baíng HSV. Tuy nhiãn, PRISM duìng làûp caïc baíng sao cuía 6 maìu, ngæåüc laûi HSV thay âäøi caïc maìu cuía noï mäüt caïch mæåüt maì JET Biãún thãø cuía HSV JET(M), mäüt biãún thãø cuía HSV(M), laì baíng maìu duìng våïi hçnh aính âen tuyãön NCSA JET, cuìng âäü daìi våïi baíng maìu hiãûn thåìi. Duìng COLORMAP(JET). FLAG Baíng maìu träün âoí, tràõng, xanh dæång FLAG(M) traí vãö mäüt ma tráûn cåî Mx3 chæïa mäüt baíng maìu "flag". Viãûc tàng M laìm tàng sæû näøi häüt cuía baíng FLAG, cuìng âäü daìi våïi baíng maìu hiãûn thåìi Vê duû, âãø âàût laûi baíng maìu cuía hçnh aính hiãûn thåìi: colormap(flag)

Caïc haìm baíng maìu liãn quan

COLORBAR COLORBAR Hiãøn thë thanh maììu (thæåïc maìu) COLORBAR('vert') thãm mäüt thæåïc maìu âæïng vaìo caïc truûc hiãûn thåìi

Page 184: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 183

Phan Thanh Tao - 2004

COLORBAR('horiz') thãm mäüt thæåïc maìu ngang COLORBAR(H) âàût thanh maìu vaìo hãû toüa âäü H. Thanh maìu seî nàòm ngang nãúu hãû H coï chiãöu räüng låïn hån chiãöu cao (trong hãû toüa âäü chuáøn) COLORBAR khäng tham säú thç hoàûc laì thãm mäüt thæåïc maìu âæïng, hoàûc laì cáûp nháût mäüt thanh maìu âaî coï H = COLORBAR(...) traí vãö mäüt theí chè âãún caïc truûc thanh maìu HSV2RGB HSV2RGB Chuyãøn HSV sang RGB M = HSV2RGB(H) chuyãøn mäüt baíng maìu HSV sang mäüt baíng maìu RGB. Mäùi baíng maìu laì mäüt ma tráûn coï säú doìng báút kyì vaì coï âuïng 3 cäüt, vaì caïc pháön tæí trong âoaûn [0, 1]. Caïc cäüt trong ma tráûn nháûp, H, biãøu hiãûn H-S-V tæång æïng. Caïc cäüt cuía ma tráûn kãút quaí, M, biãøu hiãûn cæåìng âäü cuía R-G-B tæång æïng Nhæ H(:,1), âäü saïng, biãún thiãn tæì 0 âãún 1, thç maìu kãút quaí biãún thiãn tæì âoí sang vaìng, xanh luûc, thiãn thanh, xanh dæång vaì têm, âen sang âoí. Khi H(:,2), âäü âáûm, laì 0, thç caïc maìu khäng âáûm; âån giaín chuïng coï boïng xaïm. Khi H(:,2) laì 1, thç caïc maìu cæûc âáûm; chuïng khäng chæïa thaình pháön tràõng. Khi H(:,3), giaï trë maìu, biãún thiãn tæì 0 âãún 1, thç tàng âäü saïng Baíng maìu ngáöm âënh, HSV, laì hsv2rgb([h s v]) våïi h laì mäüt biãún thiãn tuyãún tênh tæì 0 âãún 1 vaì caí hai s vaì v âãöu laì 1 RGB2HSV RGB2HSV Chuyãøn âäøi RGB sang HSV H = RGB2HSV(M) chuyãøn mäüt baíng maìu RGB sang mäüt baíng maìu HSV. Mäùi baíng laì mäüt ma tráûn coï säú doìng báút kyì vaì coï âuïng 3 cäüt, vaì caïc pháön tæí trong âoaûn [0, 1]. Caïc cäüt cuía ma tráûn nháûp, M, biãøu hiãûn cæåìng âäü cuía R-G-B tæång æïng. Caïc cäüt cuía ma tráûn xuáút ,H , biãøu hiãûn H-S-V tæång æïng CONTRAST CONTRAST Chia truûc xaïm baíng maìu âãø tàng âäü tæång phaín cuía hçnh aính CMAP = CONTRAST(X,M) traí vãö mäüt baíng maìu chia truûc xaïm, laì mäüt ma tráûn cåî Mx3 våïi 3 cäüt âäöng nháút, âãø IMAGE(X) COLORMAP(CMAP) coï mäüt biãøu âäö chê tè lãû phán bäú thä âäöng âãöu. Nãúu boí qua M thç duìng âäü daìi màûc âënh laì 64

Page 185: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 184

Phan Thanh Tao - 2004

BRIGHTEN BRIGHTEN Baíng maìu saïng hoàûc täúi BRIGHTEN(beta) thay baíng maìu hiãûn thåìi mäüt baíng maìu xaïm hoàûc täúi gäöm cå baín caïc maìu giäúng nhau. Baíng maìu saïng hån nãúu 0 < beta ≤ 1 vaì täúi hån nãúu -1 ≤ beta < 0 BRIGHTEN(beta), sau âoï BRIGHTEN(-beta) phuûc häöi baíng maìu gäúc map = BRIGHTEN(beta) traí vãö mäüt phiãn baín saïng hoàûc täúi cuía baíng maìu âang duìng maì khäng thay âäøi caïch hiãøn thë newmap = BRIGHTEN(map,beta) traí vãö mäüt phiãn baín saïng hoàûc täúi cuía baíng maìu chè âënh maì khäng thay âäøi caïch hiãøn thë SPINMAP SPINMAP Xoay baíng maìu SPINMAP quay troìn baíng maìu khoaíng 3 giáy SPINMAP(T) quay troìn baíng maìu khoaíng T giáy SPINMAP(inf) laì mäüt voìng làûp vä haûn, ngàõt våïi phêm <^C> SPINMAP(T,inc) duìng âäü tàng chè âënh. Ngáöm âënh thç inc = 2, vç váûy inc = 1 laì mäüt caïch quay cháûm hån , inc = 3 laì nhanh hån, inc = -2 laì theo hæåïng khaïc, ... Âãø traïnh veî laûinhiãöu láön, goüi set(gcf,'sharecolors','no') RGBPLOT RGBPLOT Veî baíng maìu RGBPLOT(MAP) veî mäüt baíng maìu, nghéa laì mäüt ma tráûn cåî mx3 laì âäúi säú nháûp tæång æïng cho COLORMAP. Ba cäüt cuía ma tráûn âæåüc veî trong 3 âæåìng âoí, xanh luûc, vaì xanh dæång

Caïc mä hçnh saïng

SURFL Màût coï boïng 3 chiãöu våïi âäü saïng SURFL(...) giäúng SURF(...) ngoaûi træì veî màût våïi âäü saïng tæì mäüt nguäön saïng. SURFL(Z), SURFL(X,Y,Z), SURFL(Z,S), vaì SURFL(X,Y,Z,S) táút laì âãöu håüp lãû. Nãúu coï chè âënh S, thç vectå 3 chiãöu S = [Sx,Sy,Sz] âãø chè âënh hæåïng cuía nguäön saïng. Cuîng coï thãø chè âënh S trong hãû toüa âäü cáöu, S = [AZ,EL]. Boïng cuía aính dæûa vaìo täø håüp caïc mä hçnh saïng vãö âäü khuãúch taïn, âäü phaín chiãúu vaì âäü toía saïng. Giaï trë ngáöm âënh cho S laì 45o theo chiãöu dæång tênh tæì hæåïng quan saït hiãûn taûi.Duìng CLA, HOLD ON, VIEW(AZ,EL), SURFL(...), HOLD OFF âãø veî veî màût chiãúu våïi hæåïng quan saït (AZ,EL). Âãø nháûn âæåüc tè lãû khaïc nhau vãö âäü phuí saïng, âäü phaín chiãúu vaì hãû säú

Page 186: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 185

Phan Thanh Tao - 2004

toaí coï thãø duìng SURFL(X,Y,Z,S,K) våïi K=[ka,kd,ks,spread]. Dæûa vaìo thæï tæû cuía caïc âiãøm trong caïc ma tráûn X,Y, vaì Z âãø xaïc âënh caïc màût nàòm bãn trong hay bãn ngoaìi. Thæí SURFL(X',Y',Z') nãúu khäng thêch duìng kãút quaí naìy. Âãø tênh âæåüc caïc phaïp vectå cuía caïc màût thç SURFL âoìi hoíi cáúp cuía caïc ma tráûn êt nháút laì 3 SPECULAR SPECULAR Âäü phaín chiãúu R = SPECULAR(Nx,Ny,Nz,S,V) traí vãö âäü phaín chiãúu cuía mäüt màût coï caïc thaình pháön cuía phaïp vectå laì [Nx,Ny,Nz]. S vaì V âënh hæåïng nguäön saïng hæåïng nhçn tæång æïng. Chuïng coï thãø laì caïc vectå 3 chiãöu [x,y,z] hoàûc caïc vectå 2 chiãöu [Az, El] våïi Az laì goïc phæång vë vaì El laì goïc náng trong hãû toüa âäü cæûc. Phaín chiãúu maûnh nháút khi phaïp vectå theo hæåïng (S+V)/2, våïi S laì hæåïng nguäön vaì V laì hæåïng nhçn. Thaình pháön toía saïng cuía màût coï thãø âæåüc chè âënh bàòng caïch thãm mäüt tham säú thæï 6 laì SPECULAR (Nx,Ny,Nz,S,V,spread) DIFFUSE DIFFUSE Âäü khuãúch taïn R = DIFFUSE(Nx,Ny,Nz,S) traí vãö âäü khuãúch taïn cuía mäüt màût coï caïc thaình pháön cuía phaïp vectå laì [Nx,Ny,Nz]. S laì mäüt vectå 3 chiãöu âãø xaïc âënh hæåïng nguäön saïng. S cuîng coï thãø laì mäüt vectå 2 chiãöu S = [Az,El] âënh hæåïng hæåïng goïc phæång vë vaì goïc náng. Âënh luáût Lambert: R = cos(theta) våïi theta laì goïc giæîa phaïp vectå cuía màût vaì nguäön saïng SURFNORM SURFNORM Caïc phaïp vectå cuía màût 3 chiãöu [Nx,Ny,Nz] = SURFNORM(X,Y,Z) traí vãö caïc thaình pháön cuía phaïp vectå cuía màût 3 chiãöu coï caïc thaình pháön laì (X,Y,Z). Phaïp vectå chuáøn hoïa coï âäü daìi 1 [Nx,Ny,Nz] = SURFNORM(Z) traí vãö caïc thaình pháön cuía phaïp vectå cuía màût Z Khäng coï âäúi säú xuáút bãn traïi thç SURFNORM(X,Y,Z) hoàûc SURFNORM(Z) veî màût våïi caïc phaïp vectå veî ra tæì noï. Caïc phaïp vectå cuía màût Caïc phaïp vectå cuía màût traí vãö dæûa vaìo caïch âiãöu chènh song láûp phæång dæî liãûu. Duìng SURFNORM(X',Y',Z') âãø âaío hæåïng caïc phaïp vectå

Taûo cæía säø hçnh aính vaì caïc âiãöu khiãøn

FIGURE FIGURE taûo caïc hçnh aính (caïc cæía säø âäö thë) Chênh lãûnh FIGURE måí mäüt hçnh aính måïi (cæía säø âäö thë), vaì traí vãö mäüt theí nguyãn

Page 187: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 186

Phan Thanh Tao - 2004

FIGURE(H) taûo mäüt hçnh aính thæï H trãn hçnh aính hiãûn taûi cuía daîy lãûnh PLOT. Nãúu hçnh aính H chæa coï thç mäüt hçnh aính måïi âæåüc taûo ra bàòng caïch duìng theí hçnh aính âáöu tiãn coï thãø coï GCF traí vãö theí cuía hçnh aính hiãûn taûi. Thæûc hiãûn GET(H) âãø xem danh saïch caïc âàûc tênh cuía caïc hçnh aính vaì caïc giaï trë hiãûn taûi cuía chuïng. Thæûc hiãûn SET(H) âãø xem danh saïch caïc âàûc tênh cuía caïc hçnh aính vaì caïc giaï trë håüp lãû cuía chuïng GCF Láúy theí hçnh aính hiãûn thåìi H = GCF traí vãö theí cuía thçnh aính hiãûn thåìi . Hçnh aính hiãûn thåìi laì hçnh aính maì caïc lãûnh veî nhæ PLOT, TITLE, SURF, ... cho ra. Duìng lãûnh FIGURE âãø thay âäøi hçnh aính hiãûn taûi sang hçnh aính khaïc, hoàûc âãøí taûo ra mäüt hçnh aính måïi CLF Xoïa hçnh aính CLF xoïa táút caí caïc âäúi tæåüng trãn hçnh aính hiãûn taûi CLF RESET xoïa moüi thæï vaì cuîng âàût laûi caïc âàûc tênh cuía hçnh aính vaìo caïc giaï trë ngáöm âënh, træì vë trê CLOSE Âoïng cæía säø chè âënh CLOSE(H) âoïng cæía säø coï theí H Chênh lãûnh CLOSE âoïng cæía säø hçnh aính hiãûn taûi CLOSE âoïng cæía säø khäng âiãöu kiãûn vaì khäng nhàõc cäng nháûn CLOSE('name') âoïng cæía säø coï tãn chè âënh CLOSE ALL âoïng táút caí caïc cæía säø âang måí

Taûo caïc truûc vaì caïc âiãöu khiãøn

SUBPLOT SUBPLOT taûo truûc coï tiãu âãö SUBPLOT (m,n,p), hoàûc PLOT (mnp), phán cæía säø hçnh aính thaình mäüt ma tráûn cåî mxn caïc truûc nhoí, choün truûc thæï p cho âäö thë hiãûn taûi, vaì traí vãö theí truûc. Caïc truûc âæåüc âãúm doüc theo doìng trãn âènh cuía cæía säø hçnh aính, räöi doìng thæï 2, .... Vê duû, SUBPLOT(2,1,1), PLOT(income) SUBPLOT(2,1,2), PLOT(outgo) Veî âäö thë income åí næía trãn cæía säø vaì outgo åí næía dæåïi SUBPLOT(m,n,p), nãúu truûc âaî coï thç taûo ra truûc hiãûn taûi SUBPLOT(H), våïi H laì mäüt theí truûc thç âáy laì caïch khaïc âãø taûo ra mäüt truûc hiãûn taûi cho

Page 188: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 187

Phan Thanh Tao - 2004

daîy caïc lãûnh veî âäö thë SUBPLOT('position',[left bottom width height]) taûo truûc åí vë trê chè âënh. Nãúu chè âënh roî raìng cho SUBPLOT thç truûc måïi seî âeì lãn truûc cuî vaì truûc cuî bë xoïa. Vê duû , lãûnh SUBPLOT(1,1,1) xoïa táút caí caïc truûc nhoí hån trong cæía säø hçnh aính vaì taûo ra mäüt truûc måïi âáöy âuí AXES Taûo truûc åí vë trê báút kyì AXES('position', RECT) måí mäüt truûc åí vë trê chè âënh vaì traí vãö theí cuía noï RECT = [left, bottom, width, height] chè âënh vë trê vaì kêch thæåïc cuía caûnh cuía häüp caïc truûc, tæång âäúi so våïi goïc dæåïi bãn traïi cuía cæía säø hçnh aính , vaì theo caïc âån vë chuáøn våïi (0,0) laì goïc dæåïi bãn traïi vaì (1.0,1.0) laì goïc trãn bãn phaíi Chênh lãûnh AXES taûo ra truûc cæía säø âáöy âuí vaì traí vãö theí cuía noï AXES(H) taûo ra truûc hiãûn taûi våïi theí H GCA Láúy theí truûc hiãûn taûi H = GCA traí vãö theí cuía truûc hiãûn taûi. Truûc hiãûn taûi laì truûc maì caïc lãûnh âäö hoüa nhæ PLOT, TITLE, SURF, ... veî ra. Duìng lãûnh AXES hoàüc SUBPLOT âãø thay âäøi truûc hiãûn taûi sang truûc khaïc hoàûc taûo ra truûc måïi CLA Xoïa truûc CLA xoïa táút caí caïc âäúi tæåüng (âæåìng, vàn baín, hçnh aính, caïc màût, caïc maính) cuía truûc hiãûn taûi CLA RESET xoïa moüi thæï vaì cuîng âàût laûi caïc âàûc tênh cuía truûc vaìo caïc giaï trë ngáöm âënh , træì vë trê AXIS Veî truûc coï chia truûc AXIS([XMIN XMAX YMIN YMAX]) âàût chia tè lãû trãn caïc truûc x vaì y trãn hçnh veî hiãûn taûi AXIS([XMIN XMAX YMIN YMAX ZMIN ZMAX]) âàût chia tè lãû trãn caïc truûc x, y vaì z trãn hçnh veî 3 chiãöu hiãûn taûi AXIS('auto') âæa tè lãû chia truûc vãö giaï trë màûc âënh, chãú âäü tæû âäüng, våïi mäùi âäö thë thç xmin = min(x), xmax = max(x), ... V = AXIS traí vãö vectå doìng chæïa tè lãû chia cuía âäö thë hiãûn taûi. Nãúu âäö thë hiãûn taûi 2 chiãöu thç V coï 4 thaình pháön; Nãúu âäö thë hiãûn taûi 3 chiãöu thç V coï 6 thaình pháön AXIS(AXIS) âæa chia tè lãû vãö caïc giåïi haûn hiãûn taûi, nãúu HOLD laì ON thç daîy caïc âäö thë duìng cuìng giåïi haûn AXIS('ij') âàût MATLAB vaìo chãú âäü "ma tráûn" cuía noï. Gäúc toüa âäü åí goïc trãn bãn traïi. Truûc i

Page 189: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 188

Phan Thanh Tao - 2004

âæïng vaì âaïnh säú tæì trãn xuäúng. Truûc j ngang vaì âaïnh säú tæì traïi qua phaíi AXIS('xy') âàût MATLAB chãú âäü truûc ngáöm âënh laì hãû toüa âäü “ Âãö-caïc ”. Gäúc toüa âäü åí goïc trãn bãn traïi. Truûc x ngang vaì âaïnh säú tæì traïi qua phaíi. Truûc y âæïng vaì âaïnh säú tæì dæåïi lãn AXIS('equal') thay âäøi kêch thæåïc häüp truûc âãø x vaì y bàòng nhau. Lãûnh naìy laìm cho lãûnh PLOT(SIN(X),COS(X)) träng nhæ hçnh troìn thay cho hçnh oval AXIS('square') taûo häüp truûc vuäng AXIS('image'), våïi caïc hçnh aính, taûo tè lãû phán giaíi nhæ hçnh aính AXIS('normal') phuûc häöi häüp truûc hiãûn taûi vãö kêch thæåïc âáöy âuí vaì xoïa moüi haûn chãú trãn caïc âån vë chia tè lãû. Lãûnh naìy phuûc häöi hiãûu læûc AXIS('square') vaì AXIS('equal') AXIS('image') âàt tè lãû phán giaíi vaì caïc giåïi haûn truûc sao cho hçnh aính trong caïc truûc hiãûn taûi coï caïc âiãøm aính hçnh vuäng AXIS('off') tàõt táút caí caïc nhaîn truûc vaì caïc âaïnh dáúu AXIS('on') báût lãn táút caí caïc nhaîn truûc vaì caïc âaïnh dáúu [S1,S2,S3] = AXIS('state') traí vãö caïc chuäùi biãøu hiãûn caìi âàût hiãûn taûi cuía 3 âàûc tênh truûc S1 = 'auto' hoàûc 'manual' S2 = 'on' hoàûc 'off' S3 = 'xy' hoàûc 'ij' CAXIS Giaí chia tè lãû truûc CAXIS(V), våïi V laì vectå 2 pháön tæí [cmin cmax], âàût caïch chia tè lãû thuí cäng cuía giaí maìu cho caïc âäúi tæåüng SURFACE vaì PATCH taûo ra båíi caïc lãûnh nhæ MESH, PCOLOR, vaì SURF. cmin vaì cmax âæåüc gaïn cho maìu âáöu vaì maìu cuäúi cuía baíng maìu. Caïc maìu cho PCOLOR vaì SURF âæåüc xaïc âënh bàòng baíng tra cæïu bãn trong miãön naìy. Caïc giaï trë bãn ngoaìi miãön âæåüc xeïn cho roî raìng CAXIS('auto') âàût caïch chia truûc ngæåüc vãö tæû âäüng CAXIS, traí vãö vectå doìng 2 pháön tæí chæïa [cmin cmax] âang coï hiãûu læûc CAXIS laì mäüt M-file âãø âàût caïc âàûc tênh truûc laì CLim vaì CLimMode

Page 190: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 189

Phan Thanh Tao - 2004

HOLD Giæî hçnh veî hiãûn thåìi HOLD ON giæî PLOT vaì táút caí caïc âàûc tênh truûc âãø caïc lãûnh veî tiãúp theo thãm hçnh aính vaìo hçnh aính âaî coï HOLD OFF traí vãö chãú âäü màûc âënh, caïc lãûnh PLOT xoïa caïc hçnh aính træåïc vaì âàût laûi táút caí caïc âàûc tênh truûc træåïc khi veî hçnh aính måïi HOLD, láût traûng thaïi giæî hçnh aính HOLD khäng aính hæåíng caïc âàûc tênh chia miãön tæû âäüng cuía caïc truûc Læu yï thuáût toaïn: HOLD ON âàût âàûc tênh NextPLOT cuía hçnh aính hiãûn thåìi vaì caïc truûc vaìo tênh cháút “thãm hçnh aính” ("add"); HOLD OFF âàût âàûc tênh NextPLOT cuía caïc truûc hiãûn thåìi vaìo tênh cháút “thay thãú” ( "replace")

Caïc âäúi tæåüng theí âäö thë

FIGURE , AXES, AXIS nhæ trãn LINE Taûo caïc âäúi tæåüng âæåìng thàóng báûc tháúp LINE(X,Y) thãm âæåìng thàóng trong caïc vectå X vaì Y vaìo caïc truûc hiãûn thåìi. Nãúu X vaì Y laì caïc ma tráûn cuìng cåî thç mäùi âæåìng trãn mäüt cäüt LINE(X,Y,Z) taûo caïc âæåìng thàóng trong hãû toüa âäü 3 chiãöu LINE traí vãö mäüt vectå cäüt caïc theí chè âãún caïc âäúi tæåüng LINE, mäùi theí mäüt âæåìng. Caïc âäúi tæåüng LINE laì con cuía caïc âäúi tæåüng AXES. Càûp X,Y (bäü ba X,Y,Z âäúi våïi 3 chiãöu) coï thãø theo sau laì caïc càûp tham säú/giaï trë âãø chè âënh caïc âàûc tênh thãm cuía caïc âæåìng.Càûp X,Y (X,Y,Z âäúi våïi 3 chiãöu) coï thãø boí qua toaìn bäü, vaì táút caí caïc chè âënh âàûc tênh bàòng caïch duìng caïc càûp tham säú/giaï trë. Thæûc hiãûn GET(H), våïi H laì theí âæåìng, âãø xem danh saïch caïc âàûc tênh âäúi tæåüng âæåìng vaì caïc giaï trë hiãûn thåìi cuía chuïng. Thæûc hiãûn SET(H) âãø xem danh saïch caïc âàûc tênh âäúi tæåüng âæåìng vaì caïc giaï trë håüp lãû TEXT Thãm vàn baín vaìo hçnh aính hiãûn thåìi TEXT(X,Y,'string') thãm vàn baín trong càûp dáúu nhaïy vaìo taûi vë trê (X,Y) trãn caïc truûc hiãûn thåìi, våïi (X,Y) theo âån vë láúy trong lãûnh PLOT hiãûn thåìi. Nãúu X vaì Y laì caïc vectå , thç TEXT ghi vàn baín taûi táút caí caïc vë trê âæåüc cho. Nãúu 'string' laì mäüt maíng cuìng säú doìng våïi âäü daìi cuía X vaì Y, thç TEXT âaïnh dáúu mäùi âiãøm våïi cäüt tæång æïng cuía maíng 'string' TEXT(X,Y,Z,'string') thãm vàn baín trong hãû toüa âäü 3 chiãöu

Page 191: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 190

Phan Thanh Tao - 2004

TEXT traí vãö mäüt vectå cäüt gäöm caïc theí chè âãún caïc âäúi tæåüng TEXT, mäùi theí mäüt âäúi tæåüng vàn baín . Caïc âäúi tæåüng TEXT laì con cuía caïc âäúi tæåüng AXES Càûp X,Y (X,Y,Z âäúi våïi 3 chiãöu) coï thãø theo sau laì caïc càûp tham säú/giaï trë âãø chè âënh caïc âàûc tênh thãm cuía caïc âæåìng.Càûp X,Y (X,Y,Z âäúi våïi 3 chiãöu) coï thãø boí qua toaìn bäü, vaì táút caí caïc chè âënh âàûc tênh bàòng caïch duìng caïc càûp tham säú/giaï trë. Thæûc hiãûn GET(H), våïi H laì theí âæåìng, âãø xem danh saïch caïc âàûc tênh âäúi tæåüng âæåìng vaì caïc giaï trë hiãûn thåìi cuía chuïng. Thæûc hiãûn SET(H) âãø xem danh saïch caïc âàûc tênh âäúi tæåüng âæåìng vaì caïc giaï trë håüp lãû PATCH Taûo caïc âäúi tæåüng maính báûc tháúp PATCH(X,Y,C) thãm "maính" hoàûc hoàûc âa giaïc tä 2 chiãöu xaïc âënh båíi caïc vectå X vaì Y vaìo caïc truûc hiãûn thåìi. C chè âënh chè säú maìu vaìo baíng maìu. Nãúu laì vä hæåïng thç âån giaín chè âënh maìu cuía âa giaïc ("maìu nãön"). Nãúu laì vectå cuìng kêch thæåïc våïi X vaì Y, thç chè âënh maìu cuía mäùi âènh vaì pheïp näüi suy song tuyãún tênh âæåüc duìng âãø xaïc âënh maìu bãn trong âa giaïc ("maìu näüi suy"). Nãúu C laì mäüt chuäùi, thç âa giaïc âæåüc tä våïi maìu 'color'. 'color' coï thãø laì 'r','g','b','c','m','y', 'w', hoàûc 'k'. Nãúu X, Y, vaì C laì caïc ma tráûn cuìng cåî, thiì mäùi maính mäüt cäüt. Trong træåìng håüp naìy, C laì vectå doìng cho caïc maìu âa giaïc "nãön", vaì C laì ma tráûn cho caïc maìu âa giaïc "näüi suy" PATCH âàût âàûc tênh FaceColor cuía noï vaìo 'flat', 'interp', hoàûc colorspec phuû thuäüc vaìo giaï trë cuía ma tráûn C PATCH(X,Y,Z,C) taûo ra caïc maính trong hãû toüa âäü 3 chiãöu PATCH traí vãö vectå cäüt caïc theí chè âãún caïc âäúi tæåüng PATCH, mäùi theí mäüt maính. Caïc âäúi tæåüng PATCH laì con cuía caïc âäúi tæåüng AXES. Bäü ba X,Y,C (bäü bäún X,Y,Z,C cho 3 chiãöu) coï thãø theo sau båíi caïc càûp giaï trë/tham säú âãø chè âënh caïc âàûc tênh thãm næîa cuía caïc maính. Bäü ba X,Y,C (bäü bäún X,Y,Z,C cho 3 chiãöu) coï thãø boí qua toaìn bäü, vaì táút caíc caïc âàûc tênh chè âënh duìng caïc càûp giaï trë/tham säú Thæûc hiãûn GET(H), våïi H laì mäüt theí maính, âãø xem danh saïch caïc âàûc tênh âäúi tæåüng maính vaì giaï trë hiãûn thåìi cuía chuïng. Thæûc hiãûn SET(H) âãø xem danh saïch caïc âàûc tçnh vaì caïc giaï trë âàûc tênh håüp lãû cuía âäúi tæåüng maính SURFACE SURFACE taûo caïc âäúi tæåüng màût báûc tháúp SURFACE(X,Y,Z,C) thãm màût trong X,Y,Z,C vaìo caïc truûc hiãûn thåìi

Page 192: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 191

Phan Thanh Tao - 2004

SURFACE(X,Y,Z) duìng C = Z, vç váûy cán xæïng våïi âäü cao màût Xem SURF âãø coï âáöy âuí caïc daûng khaïc nhau maì X,Y,Z,C coï thãø láúy SURFACE traí vãö mäüt theí chè âãún mäüt âäúi tæåüng SURFACE. Caïc âäúi tæåüng SURFACE laì con cuía caïc âäúi tæåüng AXES Caïc âäúi säú cho SURFACE coï thãø theo sau laì caïc càûp tham säú/giaï trë âãø chè âënh caïc âàûc tênh thãm cho màût. Caïc âäúi säú X,Y,Z,C cho SURFACE coï thãø boí qua toaìn bäü, vaì táút caí caïc âàût tênh chè âënh bàòng caïch duìng caïc càûp tham säú/giaï trë AXIS, CAXIS, COLORMAP, HOLD, SHADING vaì VIEW âàût caïc âàûc tênh hçnh aính, caïc truûc, vaì màût coï hiãûu læûc cho viãûc hiãøn thë cuía SURFACE Thæûc hiãûn GET(H), våïi H laì mäüt theí màût, âãø xem danh saïch caïc âàûc tênh âäúi tæåüng màût vaì caïc giaï trë hiãûn thåìi cuía chuïng. Thæûc hiãûn SET(H) âãø xem danh saïch caïc âàûc tênh vaì caïc giaï trë âàûc tênh håüp lãû cuía âäúi tæåüng màût IMAGE Hiãøn thë hçnh aính (taûo âäúi tæåüng hçnh aính) IMAGE(C) hiãøn thë ma tráûn C daûng hçnh aính. Mäùi pháön tæí cuía C chè âënh maìu cuía mäüt maính chæî nháût trong hçnh aính. Mäic pháön tæí cuía C âæåüc duìng nhæ caïc chè säú trong baíng maìu hiãûn thåìi âãø xaïc âënh maìu. Nãúu [M N] = SIZE(C), thç caïc giåïi haûn truûc laì [0.5 N+0.5 0.5 M+0.5 båíi váûy mäùi pháön tæí trong C laì tám coï toüa âäü nguyãn giæîa 1 vaì M hoàûc N IMAGE(X,Y,C), våïi X vaì Y laì caïc vectå, chè âënh viãûc âaïnh nhaîn caïc truûc X vaì Y, nhæng cho ra cuìng hçnh aính nhæ IMAGE(C). Chè coï caïc pháön tæí âáöu vaì cuäúi cuía X vaì Y âæåüc duìng cho caïc giåïi haûn truûc. Trong caïc træåìng håüp naìy, doìng âáöu/cuäúi cuía C laì tám trãn giaï trë âáöu/cuäúi cuía Y, vaì cäüt âáöu/cuäúi cuía C laì tám trãn giaï trë âáöu/cuäúi cuía X, våïi caïch thãm vaìo åí caïc âáöu muït âãø âaím baío caïch âãöu doüc theo caïc truûc X vaì Y IMAGE traí vãö mäüt theí chè âãún mäüt âäúi tæåüng IMAGE. C hoàûc bäü ba X,Y,C coï thãø theo sau laì caïc càûp tham säú/giaï trë âãø chè âënh caïc âàûc tênh thãm cho hçnh aính. C hoàûc bäü ba X,Y,C coï thãø boí qua toaìn bäü, vaì táút caí caïc âàût tênh chè âënh bàòng caïch duìng caïc càûp tham säú/giaï trë. IMAGE âàût âàûc tênh truûc YDir vaìo giaï trë âaío ('reverse'), vaì âàûc tênh View vaìo [0 90]. Âäúi tæåüng hçnh aính seî khäng âæa ra caïc goïc View khaïc. Âãø láúy âæåüc hiãûu læûc tæång tæû quay mäüt hçnh aính, duìng SURF våïi aïnh xaû trån hoàûc PCOLOR Thæûc hiãûn GET(H), våïi H laì mäüt theí hçnh aính, âãø xem danh saïch caïc âàûc tênh âäúi tæåüng hçnh aønh vaì caïc giaï trë hiãûn thåìi cuía chuïng. Thæûc hiãûn

Page 193: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 192

Phan Thanh Tao - 2004

SET(H) âãø xem danh saïch caïc âàûc tênh vaì caïc giaï trë âàûc tênh håüp lãû cuía âäúi tæåüng hçnh aính UICONTROL UICONTROL taûo âiãöu khiãøn giao diãûn ngæåìi duìng UICONTROL ('PropertyName1',value1,'PropertyName2',value2,...) taûo âiãöu khiãøn giao diãûn ngæåìi duìng trong cæía säø hçnh aính hiãûn thåìi vaì traí vãö mäüt theí cho noï Caïc âàûc tênh cuía UICONTROL coï thãø âæåüc âàût åí luïc taûo ra bàòng caïch duìng tæìng càûp âäúi säú PropertyName/PropertyValue trong UICONTROL, hoàûc thay âäøi sau âoï bàòng caïch duìng lãûnh SET .Thæûc hiãûn GET(H) âãø xem danh saïch caïc âàûc tênh cuía UICONTROL vaì caïc giaï trë hiãûn thåìi cuía noï. Thæûc hiãûn SET(H) âãø xem danh saïch caïc âàûc tênh cuía UICONTROL vaì caïc giaï trë håüp lãû

Page 194: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 193

Phan Thanh Tao - 2004

UIMENU UIMENU taûo menu giao diãûn ngæåìi duìng UIMENU('PropertyName1',value1,'PropertyName2',value2,...) taûo menu trãn menu bar åí trãn âènh cuía cæía säø hçnh aính hiãûn thåìi vaì traí vãö mäüt theí cho noï UIMENU(H,...) taûo mäüt menu måïi våïi H laì cha. H phaíi laì mäüt theí hçnh aính hoàûc menu. Nãúu H laì theí hçnh aính thç UIMENU laì menu trãn menu bar åí trãn âènh cuía cæía säø. Nãúu H laì mäüt theí menu trãn menu bar thç menu måïi laì menu tháúp hån âãö muûc cha trãn menu bar Caïc âàûc tênh cuía menu coï thãø âæåüc âàût åí luïc taûo ra bàòng caïch duìng tæìng càûp âäúi säú PropertyName/PropertyValue trong UIMENU, hoàûc thay âäøi sau âoï bàòng caïch duìng lãûnh SET Thæûc hiãûn GET(H) âãø xem danh saïch caïc âàûc tênh cuía UIMENU vaì caïc giaï trë hiãûn thåìi cuía noï Thæûc hiãûn SET(H) âãø xem danh saïch caïc âàûc tênh cuía UIMENU vaì caïc giaï trë håüp lãû

Caïc thao taïc vãö theí âäö hoüa

SET Âàût caïc âàûc tênh âäúi tæåüng SET(H,'PropertyName',PropertyValue) âàût giaï trë âàûc tênh cè âënh cho caïc âäúi tæåüng âäö hoüa våïi theí H. H coï thãø laì mäüt vectå caïc theí, trong træåìng håüp naìy SET âàûc caïc giaï trë âàûc tênh cho táút caí caïc âäúi tæåüng SET(H,'PropertyName1',PropertyValue1,'PropertyName2',PropertyValue2,...) âàût nhiãöu giaï trë âàûc tênh våïi mäüt lãûnh âån SET(H,'PropertyName') hiãøn thë caïc giaï trë coï thãø coï cho âàûc tênh chè âënh cuía âäúi tæåüng våïi theí H SET(H) hiãøn thë táút caí caïc tãn âàûc tênh vaì caïc giaï trë coï thãø coï cuía chuïng cho âäúi tæåüng våïi theí H. Giaï trë màûc âënh cho mäüt kiãøu âäúi tæåüng coï thãø âæåüc âàût trong âäúi tæåüng cha, äng hoàûc trãn næîa cuía âäúi tæåüng bàòng caïch âàût PropertyName taûo nãn båíi caïch näúi våïi chuäùi 'Default', kiãøu âäúi tæåüng, vaì tãn âàûc tênh. Vê duû, âãø âàût maìu ngáöm âënh cuía caïc âäúi tæåüng vàn baín vaìo maìu âoí trong cuía säø hçnh aính hiãûn thåìi: set(gcf,'DefaultTextColor','red') Ba chuäùi coï yï nghéa âàûc biãût cho caïc giaï trë âàûc tênh: 'default' - duìng giaï trë màûc âënh (tæì âäúi tæåüng cha) 'factory' - duìng giaï trë màûc âënh cuía haîng 'remove' - xoïa giaï trë màûc âënh

Page 195: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 194

Phan Thanh Tao - 2004

GET Láúy caïc âàûc tênh âäúi tæåüng V = GET(H,'PropertyName') traí vãö giaï trë cuía âàûc tênh chè âënh cho âäúi tæåüng âäö hoüa våïi theí H GET(H) hiãøn thë táút caí caïc tãn âàûc tênh vaì caïc giaï trë hiãûn thåìi cuía chuïng cho âäúi tæåüng âäö hoüa våïi theí H RESET Âàût laûi truûc hoàûc hçnh aính RESET(H) âàût laûi táút caí caïc âàûc tênh, træì vë trê, cuía âäúi tæåüng våïi theí H vãö giaï trë màûc âënh. Vê duû, RESET(GCA) âàût laûi caïc âàûc tênh cuía caïc truûc hiãûn thåìi. RESET(GCF) âàût laûi caïc âàûc tênh cuía hçnh aính hiãûn thåìi DELETE Xoïa mäüt tãûp hoàûc mäüt âäúi tæåüng âäö hoüa DELETE file_name xoïa tãûp coï tãn trãn âéa DELETE(H) xoïa âäúi tæåüng âäö hoüa våïi theí H. Nãúu âäúi tæåüng laì cæía säø, thç cæía säø âæåüc âoïng vaì xoïa tæû âäüng (khäng nhàõc cäng nháûn) GCO GCO Theí cuía âäúi tæåüng hiãûn thåìi OBJECT = GCO traí vãö âäúi tæåüng hiãûn thåìi trong hçnh aính hiãûn thåìi OBJECT = GCO(FIGURE) traí vãö âäúi tæåüng hiãûn thåìi trong hçnh aính cuía hçnh aính. Âäúi tæåüng hiãûn thåìi cho mäüt hçnh aính âaî cho laì âäúi tæåüng cuäúi cuìng áún nuït chuäüt vaìo DRAWNOW DRAWNOW Hoaìn thaình moüi hçnh veî chæa xæí lyï DRAWNOW "âáøy biãún cäú haìng âåüi " vaì laìm MATLAB cáûp nháût maìn hçnh Coï 4 biãún cäú maì MATLAB âáøy biãún cäú haìng âåüi vaì veî trãn maìn hçnh: - traí vãö tæì dáúu nhàõc cuía MATLAB - gàûp phaíi lãûnh PAUSE - thæûc hiãûn mäüt lãûnh GETFRAME - thæûc hiãûn mäüt lãûnh DRAWNOW DRAWNOW('DISCARD') laìm cho thäng tin âæåüc cáûp nháût nhæ caïc biãún cäú haìng âåüi âæåüc âáøy ra, nhæng khäng âáøy chuïng thæûc sæû. Âiãöu naìy cáön thiãút cho viãûc in baín sao cæïng khi âàûc tênh hçnh aính InvertHardcopy laì báût

Page 196: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 195

Phan Thanh Tao - 2004

NEWPLOT NEWPLOT Låìi tæûa M-file âäö hoüa thaình theí âàûc tênh NextPLOT H = NEWPLOT laì mäüt lãûnh låìi tæûa chuáøn âãø âàût åí âáöu haìm M-file âäö hoüa âãø veî hçnh aính chè duìng caïc lãûnh taûo âäúi tæåüng bác tháúp. NEWPLOT "thæûc hiãûn âuïng viãûc " trong caïc âiãöu kiãûn xaïc âënh caïc truûc naìo vaì/hoàûc hçnh aính naìo âãø PLOT veî trong âoï, dæûa vaìo caïch caìi âàût âàûc tênh NextPLOT cuía caïc âäúi tæåüng truûc vaì caïc âäúi tæåüng hçnh aính, vaì traí vãö mäüt theí chè âãún caïc truûc tæång æïng. "viãûc âuïng " laì: Måí mäüt hçnh aính måïi nãúu NextPLOT cuía hçnh aính laì "New", Xoïa vaì âàût laûi hçnh aính hiãûn thåìi nãúu NextPLOT cuía hçnh aính laì "Replace", Måí caïc truûc måïi nãúu NextPLOT cuía truûc laì "New", Xoïa vaì âàût laûi caïc truûc hiãûn thåìi nãúu NextPLOT cuía caïc truûc laì "Replace" FINDOBJ FINDOBJ Tçm caïc âäúi tæåüng våïi caïc giaï trë âàûc tênh chè âënh H = FINDOBJ('P1Name',P1Value,...) traí vãö caïc theí cuía caïc âäúi tæåüng åí mæïc gäúc vaì bãn dæåïi coï caïc giaï trë âàûc tênh phuì håüp caïc càûp tham säú truyãön cho lãûn FINDOBJ H = FINDOBJ(ObjectHandles, 'P1Name', P1Value,...) haûn chãú tçm caïc âäúi tæåüng liãût kã trong ObjectHandles, vaì con chaïu cuía chuïng H = FINDOBJ(ObjectHandles, 'flat', 'P1Name', P1Value,...) haûn chãú tçm caïc âäúi tæåüng liãût kã trong ObjectHandles. Khäng tçm con chaïu cuía chuïng H = FINDOBJ traí vãö caïc theí cuía caïc âäúi tæåüng gäúc vaì táút caí caïc con chaïu cuía noï H = FINDOBJ(ObjectHandles) traí vãö caïc theí liãût kã trong ObjectHandles, vaì caïc theí cuía táút caí con chaïu cuía chuïng

Baín sao cæïng vaì læu træî

PRINT PRINT In hçnh aính hoàûc ghi hçnh aính vaìo tãûp PRINT <filename> ghi cæía säø hçnh aính hiãûn thåìi nhæ PostScript hoàûc daûng chè âënh maïy in, nhæ chè âënh båíi PRINTOPT. Nãúu coï chè âënh filename, thç ghi vaìo tãûp chè âënh, ghi âeì nãúu tãûp âaî coï. Nãúu khäng chè âënh tãn måí räüng cuía tãûp, thç âæåüc näúi thãm tãn måí räüng tæång æïng. Nãúu boí qua tãn tãûp, thç hçnh aính âæåüc âæa træûc tiãúp ra maïy in nhæ chè âënh trong PRINTOPT PRINT <filename> -f<figure handle> in hçnh aính chè âënh

Page 197: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 196

Phan Thanh Tao - 2004

PRINT <filename> -s<system name> in hãû SIMULINK chè âënh Cuï phaïp: PRINT [ -ddevice] [ -options ] <filename> Caïc thiãút bi PostScript coï thãø duìng laì: -dps - PostScript cho caïc maïy in âen-tràõng -dpsc - PostScript cho caïc maïy in maìu -dps2 - PostScript mæïc 2 cho caïc maïy in âen-tràõng -dpsc2 - PostScript mæïc 2 cho caïc maïy in maìu -deps - Encapsulated PostScript (EPSF) -depsc - Encapsulated Color PostScript (EPSF) -deps2 - Encapsulated Level 2 PostScript (EPSF) -depsc2 - Encapsulated Level 2 Color PostScript (EPSF) Caïc thiãút bë gàõn liãön thãm laì: -dhpgl - HPGL tæång thêch våïi maïy veî Hewlett-Packard 7475A -dill - Adobe Illustrator 88 compatible illustration file -dmfile - M-file chuí yãúu taûo laûi hçnh aính vaì con cuía noï Khäng coï chæïc nàng âáöy âuí, vaì tæåìng khäng cung cáúp Caïc thiãút bë GhostScript thãm laì: -dlaserjet - HP LaserJet -dljetplus - HP LaserJet+ -dljet2p - HP LaserJet IIP -dljet3 - HP LaserJet III -dcdeskjet - HP DeskJet 500C våïi maìu 1 bit/âiãøm aính -dcdjcolor - HP DeskJet 500C våïi maìu 24 bit/âiãøm aính vaì maìu dao âäüng cháút læåüng cao (Floyd-Steinberg) -dcdjmono - HP DeskJet 500C chè in âen -ddeskjet - HP DeskJet vaì DeskJet+ -dpaintjet - Maïy in maìu HP PaintJet -dpjetxl - Maïy in maìu HP PaintJet XL -dbj10e - Canon BubbleJet BJ10e -dln03 - DEC LN03 -depson - Epson-maïy in tæång thêch ma tráûn âiãøm (9- hoàûc 24-kim) -deps9high - Epson-tæång thich 9-kim, cheìn doìng -dgif8 - daûng tãûp GIF 8-bit maìu -dpcx16 - daûng tãûp PCX (EGA/VGA, 16 maìu) -dpcx256 - daûng tãûp PCX (256 maìu) Caïc læûa choün khaïc laì: -append - Thãm, khäng âeì, hçnh aính vaìo tãûp PostScript

Page 198: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 197

Phan Thanh Tao - 2004

-epsi - Add 1-bit deep bitmap preview (EPSI format) -ocmyk - Duìng caïc maìu CMYK trong PostScript thay vç RGB -Pprinter - Chè âënh maïy in âãø duìng -fhandle - Theí Handle Graphics cuía hçnh aính âãø in -sname - Tãn cuía cæía säø cuía hãû SIMULINK âãø in -psdefcset - Duìng maî hoïa táûp kyï tæû PostScript màûc âënh Caïc læûa choün thiãút bë cæía säø laì: -dwin - Gæíi hçnh aính ra maïy in mono caìi âàût hiãûn thåìi -dwinc - Gæíi hçnh aính ra maïy in maìu caìi âàût hiãûn thåìi -dmeta - Gæíi hçnh aính ra clipboard åí daûng tãûp Metafile -dbitmap - Gæíi hçnh aính ra clipboard åí daûng bitmap -dcdj550 - HP Deskjet 550c -dsetup - Âæa ra häüp häüi thoaûi Print Setup, nhæng khäng in ra Caïc læûa choün cæía säø khaïc laì: -v - Chãú âäükhäng cáön thiãút, âæa ra häüp häüi thoaûi Print, thæåìng boí qua printopt caïc giaï trë màûc âënh cuía cáúu hçnh maïy in cuûc bäü ORIENT Hæåïng giáúy cuía baín sao cæïng ORIENT LANDSCAPE laìm cho caïc thao taïc PRINT in ra giáúy theo hæåïng landscape ORIENT PORTRAIT traí vãö hæåïng màûc âënh PORTRAIT ORIENT TALL toaìn bäü giáúy theo hæåïng portrait ORIENT, traí vãö mäüt chuäùi chæïa hæåïng giáúy in: PORTRAIT, LANDSCAPE hoàûc TALL ORIENT laì mäüt M-file âãø âàût caïc âàûc tênh PaperOrientation vaì PaperPosition CAPTURE CAPTURE Láúy maìn hçnh cuía hçnh aính hiãûn thåìi CAPTURE(FIG) taûo hçnh aính måïi chæïa baín sao cuía hçnh aính chè âënh, kãø caí moüi uimenu vaì moüi uicontrol CAPTURE, khäng âäúi säú nháûp, láúy hçnh aính hiãûn thåìi CAPTURE thæåìng theo sau PRINT âãø cho ra baín sao cæïng. Vç chè laì baín sao bitmap cuía hçnh aính trãn maìn hçnh, nãn âäü phán giaíi khäng âeûp nhæ PRINT aïp duûng cho hçnh aính gäúc, nhæng seî âæa vaìo caïc menu vaì âiãöu khiãøn [X,map] = CAPTURE traí vãö mäüt ma tráûn hçnh aính vaì baíng maìu maì khäng hiãøn thë noï

Page 199: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 198

Phan Thanh Tao - 2004

Caïc phim vaì hçnh aính âäüng

MOVIEIN MOVIEIN Khåíi âáöu bäü nhåï âãø læu caïc khung phim M = MOVIEIN(N) taûo mäüt ma tráûn âuí låïn âãø giæî N khung phim dæûa vaìo caïc truûc hiãûn thåìi. Ma tráûn caï âuí doìng âãø læu N baín sao cuía caïc giaï trë xuáút tæì GETFRAME, mäùi baín sao mäüt cäüt M = MOVIEIN(N,H) vaì M = MOVIEIN(N,H,RECT) truyãön caïc theí âäö hoüa tuìy choün, H, vaì caïc vë trê hçnh chæî nháût tuìy choün, RECT, vaìo GETFRAME(H,RECT) qua caïc âäúi tæåüng âäö hoüa chè âënh khaïc våïi caïc truûc màûc âënh hiãûn thåìi. Vê duû: âãø phaït sinh mäüt phim våïi n khung, M = moviein(n); for j=1:n Lãûnh PLOT M(:,j) = getframe end movie(M) Âãø phaït sinh mäüt coï caïc khung chæïa toaìn bäü hçnh aính, khäng âuïng caïc truûc hiãûn thåìi, M = moviein(n,gcf) GETFRAME GETFRAME Láúy khung phim GETFRAME traí vãö mäüt vectå cäüt våïi mäüt khung phim. Khung laì mäüt aính chuûp nhanh (pixmap) cuía caïc truûc hiãûn thåìi. GETFRAME thæåìng duìng trong voìng làûp FOR âãø taûo ma tráûn phim M räöi quay ngæåüc laûi duìng MOVIE. Vê duû: M = moviein(n); for j=1:n Lãûnh PLOT M(:,j) = getframe end movie(M) Quan troüng trong viãûc phán bäú træåïc ma tráûn phim M træåïc khi xáy dæûng phim nhàòm traïnh sæí duûng quaï nhiãöu bäü nhåï. Haìm MOVIEIN coï thãø duìng cho cäng duûng naìy GETFRAME(H) láúy khung cuía âäúi tæåüng H, H laì mäüt theí chè âãún mäüt gäúc, mäüt hçnh aính, hoàûc mäüt truûc GETFRAME(H,RECT) chè âënh hçnh chæîa nháût âãø cheïp hçnh aính, tæång âäúi so våïi goïc trãn bãn traïi cuía âäúi tæåüng H vaì theo âån vë cuía âàûc tênh Units cuía noï [X,MAP] = GETFRAME(H) hoàûc [X,MAP] = GETFRAME(H,RECT) traí vãö khung nhæ ma tráûn chè säú hçnh aính X vaì baíng maìu MAP. H coï thãø laì theí cuía mäüt hçnh aính hoàûc mäüt truûc MOVIE

Page 200: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 199

Phan Thanh Tao - 2004

Trçnh baìy caïc khung phim âaî ghi MOVIE(M) trçnh baìy mäüt láön phim trong ma tráûn M. M phaíi laì ma tráûn coï caïc cäüt laì caïc khung phim (thæåìng láúy tæì GETFRAME). MOVIE(M,N) trçnh baìy phim N láön. Nãúu N <0, thç mäùi láön "chåi" laì mäüt xuäi vaì mäüt ngæåüc. Nãúu N laì vectå, thç caïc thæï 2 vaì thãm næîa chè âënh thæï tæû chåi caïc khung. Vê duû, nãúu M coï 3 cäüt, N = [10 3 2 1] trçnh baìy caïc phim 10 láön ngæåüc MOVIE(M,N,FPS) trçnh baìy phim täúc âäü FPS khung/giáy. Ngáöm âënh nãúu boí qua FPS thç 12khung/giáy. Caïc maïy khäng thãø thæûc hiãûn FPS chè âënh nhanh MOVIE(H,...) trçnh baìy phim trong âäúi tæåüng H, våïi H laì mäüt theí chè âãún gäúc, mäüt hçnh aính, hoàûc mäüt truûc MOVIE(H,M,N,FPS,LOC) chè âënh vë trê trçnh baìy phim, tæång âäúi so våïi goïc trãn bãn traïi cuía âäúi tæåüng H vaì theo âån vë cuía âàûc tênh Units cuía noï. LOC = [X Y]

Caïc haìm linh tinh

GINPUT Nháûp hçnh aính tæì chuäüt hoàûc baìn phêm [X,Y] = GINPUT(N) láúy N âiãøm tæì caïc truûc hiãûn thåìi vaì traí vã caïc toüa âäü X vaì Y trong caïc vectå X vaì Y âäü daìi N. Con troí coï thãø âënh vë bàòng chuäüt (hoàûc bàòng caïc phêm muîi tãn trãn vaìi hãû thäúng). Caïc âiãøm dæî liãûu âæåüc nháûp bàòng caïch áún nuït chuäüt hoàûc bàòng phêm báút kyì. [X,Y] = GINPUT láúy mäüt säú báút âënh (vä haûn) caïc âiãøm cho âãún khi áún <ENTER> [X,Y,BUTTON] = GINPUT(N) traí vãö kãút quaí thæï ba, BUTTON, âãø chæïa mäüt vectå caïc säú nguyãn chè âënh nuït naìo âæåüc áún (1,2,3) hoàûc caïc säú ASCII nãúu áún phêm ISHOLD Traí vãö 1 nãúu chãú âäü hold âæåüc báût ISHOLD traí vãö 1 nãúu hold laì báût, vaì 0 nãúu tàõt. Khi HOLD laì ON, thç PLOT vaì táút caíc caïc âàûc tênh truûc hiãûn thåìi âæåüc giæî âãø caïc lãûnh âäö hoüa tiãúp theo thãm vaìo hçnh aính âaî coï. Hold báût coï nghéa laì âàûc tênh NextPLOT cuía caí hai hçnh aính vaì truûc âæåüc âàût vaìo chãú âäü "thãm" GRAYMON GRAYMON Caïc giaï trë màûc âënh cuía hçnh aính âäö hoüa âàût cho maìn hçnh gray-scale GRAYMON thay âäøi caïc âàûc tênh âäö hoüa màûc âënh âãø cho ra caïc hiãøn thë roî raìng våïi maìn hçnh gray-scale

Page 201: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 200

Phan Thanh Tao - 2004

RBBOX Häüp bàng cao su RBBOX(RECTI, XY) láön vãút häüp bàng cao su trãn hçnh aính , khåíi âáöu våïi häüp RECTI, vaì bàõt âáöu vãút tai âiãøm XY. Nuït chuäüt phaíi giæî khi RBBOX âæåüc goüi. RBBOX traí vãö våïi biãún cäú nuït chuäüt. Nhæ mäüt kãút quaí, RBBOX coï thãø âæåüc duìng trong mäüt M-file, cuìng våïi WAITFORBUTTONPRESS, âãø âiãöu khiãøn xæí lyï âäüng. RECTI vaì XY theo âån vë cuía hçnh aính hiãûn thåìi ROTATE Quay mäüt âäúi tæåüng mäüt goïc alpha theo hæåïng chè âënh ROTATE(H,AZEL,ALPHA,ORIGIN) quay âäúi tæåüng H goïc ALPHA quanh mäüt truûc mä taí båíi AZEL, laì vectå 2 pháön tæí gäöm goïc phæång vë vaì goïc náng hoàûc mäüt vectå 3 chiãöu. Âäúi säú tuìy choün ORIGIN laì vectå 3 pháön tæí duìng laìm gäúc quay TERMINAL TERMINAL Âàût kiãøu âáöu cuäúi âäö hoüa TERMINAL âàût ra mäüt menu âäö hoüa caïc kiãøu âáöu cuäúi vaì nhàõc âãø choün. Räöi noï âàût cáúu hçnh cho MATLAB. Cuîng coï thãø chè âënh âáöu cuäúi nhæ tham säú thæï nháút. Coï thãø thãm caïc caìi âàût âáöu cuäúi cáön thiãút cho chè âënh mä phoíng hay âáöu cuäúi vaìo tãûp naìy Caïc âáöu cuäúi âäö hoüa âang âæåüc cung cáúp laì: tek401x - Tektronix 4010/4014, tek4100 - Tektronix 4100 , tek4105 - Tektronix 4105 retro - retrographics card , sg100 - Selanar graphics 100, sg200 - Selanar graphics 200 vt240tek - VT240 & VT340 Tek mode , ergo - ergo terminal , graphon - graphon terminal citoh - C.Itoh terminal , xtermtek - xterm, Tektronix graphics wyse - Wyse WY-99GT , kermit - MS-DOS Kermit 2.23 , hp2647 - Hewlett-Packard 2647 versa - Macintosh with VersaTerm (Tektronics 4010/4014) versa4100 - Macintosh with VersaTerm (Tektronics 4100) versa4105 - Color/Grayscale Macintosh with VersaTerm (Tektronics 4105) hds - Human Designed Systems UIPUTFILE UIPUTFILE Láúy tãn tãûp bàòng caïch hiãøn thë mäüt häüp häüi thoaûi [FILENAME, PATHNAME] = UIPUTFILE('initFile', 'dialogTitle') hiãøn thë mäüt häüp häüi thoaûi vaì traí vãö caïc chuäùi tãn tãûp vaì âæåìng dáùn. Tham säú initFile xaïc âënh hiãøn thë ban âáöu cuía caïc tãûp trong häüp häüi thoaûi. Cho pheïp chè âënh tãn tãûp âáöy âuí cuîng nhæ kyï tæû âaûi diãûn. Vê duû,

Page 202: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 201

Phan Thanh Tao - 2004

'newfile.m' khåíi âáöu viãûc hiãøn thë tãn tãûp âàûc biãût naìy vaì liãût kã táút caí caïc tãûp ‘*.m’ âaî coï. Caïch naìy coï thãø cung cáúp mäüt tãn tãûp màûc âënh. Chè âënh kyï tæû âaûi diãûn nhæ '*.m' liãût kã táút caí caïc tãûp M-file cuía MATLAB. Tham säú 'dialogTitle' laì chuäùi chæïa tiãu âãö cuía häüp häüi thoaûi. Biãún xuáút FILENAME laì chuäùi chæïa tãn tãûp âæåüc choün trong häüp häüi thoaûi. Nãúu ngæåìi duìng áún nuït Cancel hoàûc nãúu coï läùi, thç âæåüc âàût giaï trë 0. Biãún xuáút PATH laì chuäùi chæïa tãn âæåìng dáùn choün trong häüp häüi thoaûi. Nãúu ngæåìi duìng áún nuït Cancel hoàûc nãúu coï läùi, thç âæåüc âàût giaï trë 0 [FILENAME, PATHNAME] = UIPUTFILE('initFile', 'dialogTitle', X,Y) âàût häüp häüi thoaûi taûi vë trê maìn hçnh laì [X,Y] theo âån vë âiãøm. Khäng phaíi táút caí caïc hãû thäúng âãöu cung cáúp tuìy choün naìy. Vê duû: [newmatfile, newpath] = iputfile('*.mat', 'Save As'); UIGETFILE UIGETFILE Láúy tãn tãûp bàòng caïch hiãøn thë mäüt häüp häüi thoaûi [FILENAME, PATHNAME] = UIGETFILE('filterSpec', 'dialogTitle', X, Y) hiãøn thë mäüt häüp häüi thoaûi âãø ngæåìi duìng âæa vaìo (fill in), vaì traí vãö caïc chuäùi tãn tãûp vaì âæåìng dáùn. Traí vãö thaình cäng chè nãúu tãûp âaî coï. Nãúu ngæåìi duìng choün mäüt tãûp chæa coï thç hiãøn thë mäüt thäng baïo läùi vaì traí vãö âiãöu khiãøn cho häüp häüi thoaûi. Sau âoï ngæåìi duìng coï thãø vaìo tãn tãûp, hoàûc áún nuït Cancel. Táút caí caïc tham säú laì tuìy choün, nhæng nãúu duìng mäüt tham säú thç táút caí caïc tham säú træåïc cuîng phaíi duìng hãút. Tham säú filterSpec xaïc âënh tãn caïc tãûp ban âáöu trong häüp häüi thoaûi. Vê duû '*.m' liãût kã táút caí caïc tãûp M-files cuía MATLAB. Tham säú 'dialogTitle' laì chuäùi chæïa tiãu âãö cuía häüp häüi thoaûi. Caïc tham säú X vaì Y xaïc âënh vë trê ban âáöu cuía häüp häüi thoaûi theo âån vë âiãøm. Mäüt säú hãû thäúng khäng cung cáúp tuìy choün naìy. Biãún xuáút FILENAME laì chuäùi chæïa tãn tãûp âæåüc choün trong häüp häüi thoaûi. Nãúu ngæåìi duìng áún nuït Cancel hoàûc nãúu coï läùi, thç âæåüc âàût giaï trë 0. Biãún xuáút PATH laì chuäùi chæïa tãn âæåìng dáùn choün trong häüp häüi thoaûi. Nãúu ngæåìi duìng áún nuït Cancel hoàûc nãúu coï läùi, thç âæåüc âàût giaï trë 0 WHITEBG WHITEBG Thay âäøi maìu nãön cuía hçnh aính WHITEBG láût maìu nãön cuía hçnh aính hiãûn thåìi giæî âen vaì tràõng, vaì thay âäøi caïc âàûc tênh khaïc âãø hçnh aính âæåüc nhçn roî hån. Hån næîa, caïc âàûc tênh ngáöm âënh cuía gäúc âæåüc âàût âãø daîy lãûnh

Page 203: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 202

Phan Thanh Tao - 2004

PLOT tiãúp sáu trong hçnh aính hiãûn thåìi vaì caïc hçnh hçnh aính måïi duìng maìu nãön måïi WHITEBG(FIG) thay âäøi caïc hçnh aính trong vectå cäüt FIG. Kãø caí theí cæía säø gäúc (0) aính hæåíng caïc âàûc tênh màûc âënh cho caïc cæía säø måïi hoàûc cho CLF RESET WHITEBG(FIG,C) hoàûc WHITEBG(C) âàût maìu nãön màûc âënh vaìo C vaì thay âäøi caïc âàûc tênh khaïc âãø hçnh aính âæåüc nhçn roî hån. C coï thãø laì mäüt maìu 1x3 rgb hoàûc mäüt chuäùi maìu nhæ 'white' hoàûc 'w' ZOOM Bung to vaì thu nhoí mäüt hçnh veî 2 chiãöu ZOOM ON báût traûng thaïi bung to/thu nhoí hçnh aính hiãûn thåìi. ÁÚn nuït traïi âãø thu nhoí. ÁÚn nuït phaíi âãø bung to. Mäùi khi áún, caïc giåïi haûn truûc seî thay âäøi theo tè lãû gáúp âäi (bung to hoàûc thu nhoí). Cuîng coï thãø áún vaì läi âãø thay âäøi trong mäüt vuìng ZOOM OFF tàõt traûng thaïi bung to/thu nhoí ZOOM khäng âäúi säú âãø láût traûng thaïi zoom. ZOOM OUT traí vãö hçnh aính ban âáöu (âáöy âuí) waitforbuttonpress Chåì áún phêm/nuït chuäüt trãn hçnh aính

Caïc ma tráûn âàûc biãût

COMPAN Ma tráûn COMPANION A=COMPAN(P) laì ma tráûn COMPANION cuía âa thæïc coï caïc hãû säú P, ma tráûn coï doìng thæï nháút laì -u(2:n)/u(1) våïi u laì veïctå hãû säú cuía âa thæïc P. Caïc giaï trë riãng cuía A laì caïc nghiãûm cuía P. GALLERY GALLERY Càûp ma tráûn kiãøm tra nhoí GALLERY(3) laì ma tráûn vuäng âiãöu kiãûn xáúu cáúp 3 GALLERY(5) laì mäüt baìi toaïn giaï trë riãng âaïng quan tám. Thæí tçm caïc giaï trë riãng vaì caïc vectå riãng chênh xaïc cuía noï HADAMARD HADAMARD(N) laì ma tráûn Hadamard cáúp N, âoï laì ma tráûn H coï caïc pháön tæí 1 hoàûc -1 maì H'*H = N*EYE(N). Mäüt ma tráûn Hadamard cáúp N våïi > 2 chè täön taûi nãúu REM(N,4)=0 (N laì bäüi cuía 4). Haìm naìy chè xæí lyï caïc træåìng håüp N, N/12 hoàûc N/20 laì luîy thæìa cuía 2 HANKEL Ma tráûn Hankel HANKEL(C) laì ma tráûn vuäng Hankel coï cäüt âáöu tiãn laì C vaì caïc pháön tæí dæåïi âæåìng cheïo phuû bàòng 0

Page 204: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 203

Phan Thanh Tao - 2004

HANKEL(C,R) laì ma tráûn Hankel coï cäüt âáöu tiãn laì C vaì doìng cuäúi cuìng laì R. Ma tráûn Hankel âäúi xæïng, caïc âæåìng cheïo ngæåüc khäng âäøi, vaì coï caïc pháön tæí H(i,j) = R(i+j-1) HILB Ma tráûn Hilbert HILB(N) laì ma tráûn vuäng cáúp N coï caïc pháön tæí 1/(i+j-1), âáy laì vê duû näøi tiãúng vãö ma tráûn âiãöu kiãûn xáúu. Xem thãm INVHILB Âáy cuîng laì mäüt vê duû täút vãö hiãûu quaí cuía phong caïch láûp trçnh MATLAB våïi qui æåïc caïc voìng làûp FOR hay DO âæåüc thay båíi caïc lãûnh vectå hoïa. Caïch naìy nhanh hån, nhæng êt täún vuìng nhåï INVHILB INVHILB Ma tráûn âaío Hilbert INVHILB(N) laì nghich âaío cuía ma tráûn vuäng cáúp N coï caïc pháön tæí 1/(i+j-1), âáy laì vê duû näøi tiãúng vãö ma tráûn âiãöu kiãûn xáúu. Kãút quaí chênh xaïc nãúu N < 15 KRON Têch ten-xå Kronecker KRON(X,Y) laì têch ten-xå Kronecker cuía X vaì Y. Kãút quaí laì mäüt ma tráûn låïn taûo nãn bàòng caïch láúy táút caí caïc têch coï thãø giæîa caïc pháön tæí cuía X vaì caïc pháön tæí cuía Y. Vê duû, nãúu X laì ma tráûn cåî 2x3, thç KRON(X,Y) laì [ X(1,1)*Y X(1,2)*Y X(1,3)*Y X(2,1)*Y X(2,2)*Y X(2,3)*Y ] Nãúu X hoàûcY thæa, thç chè nhán caïc pháön tæí khaïc 0 vaì kãút quaí laì ma tráûn thæa MAGIC Hçnh vuäng aío thuáût (ma phæång) MAGIC(N) laì mäüt ma tráûn vuäng cáúp N taûo nãn tæì caïc säú nguyãn tæì 1 âãún N^2 sao cho täøng caïc haìng, cäüt vaì âæåìng cheïo bàòng nhau PASCAL PASCAL Ma tráûn Pascal PASCAL(N) laì ma tráûn Pascal cáúp N: mäüt ma tráûn xaïc âënh dæång âäúi xæïng coï caïc pháön tæí nguyãn, taûo nãn tæì tam giaïc Pascal. Nghëch âaío cuía noï coï caïc pháön tæí nguyãn PASCAL(N,1) laì thæìa säú tam giaïc dæåïi Cholesky cuía ma tráûn Pascal. Laì nghëch âaío cuía noï PASCAL(N,2) laì phiãn baín chuyãøn vë vaì hoaïn vë cuía PASCAL(N,1), laì càn báûc ba cuía ma tráûn âån vë ROSSER Baìi toaïn kiãøm tra giaï trë riãng âäúi xæïng cäø âiãøn Ma tráûn naìy laì mäüt thaïch thæïc âäúi våïi nhiãöu thuáût toaïn giaï trë riãng ma tráûn. Nhæng thuáût

Page 205: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 204

Phan Thanh Tao - 2004

toaïn Francis QR, nhæ âaî hoaìn thiãûn båíi Wilkinson vaì caìi âàût trong EISPACK vaì MATLAB khäng coï váún âãö gç. Ma tráûn naìy laì ma tráûn vuäng cáúp 8 gäöm caïc pháön tæí nguyãn. Noï coï: * Mäüt giaï trë nguyãn keïp * 3 giaï trë riãng gáön bàòng nhau * Caïc giaï trë riãng låïn ngæåüc dáúu * Mäüt giaï trë riãng bàòng 0 * Mäüt giaï trë riãng nhoí khaïc 0 TOEPLITZ TOEPLITZ Ma tráûn Toeplitz TOEPLITZ(C,R) laì ma tráûn Toeplitz khäng âäúi xæïng coï C laì cäüt cuäúi cuìng vaì R laì doìng cuäúi cuìng cuía noï TOEPLITZ(C) laì ma tráûn Toeplitz âäúi xæïng (hay laì ma tráûn Hermitian) VANDER Ma tráûn Vandermonde VANDER(C) traí vãö ma tráûn Vandermonde coï cäüt thæï hai vaì cäüt cuäúi cuìng laì C. Cäüt thæï j cuía ma tráûn Vandermonde âæåüc cho båíi A(:,j) = C^(n-j) WILKINSON WILKINSON Ma tráûn kiãøm tra giaï trë riãng cuía Wilkinson WILKINSON(n) laì J. H. Ma tráûn kiãøm tra giaï trë riãng cuía Wilkinson, Wn+. Âáy laì ma tráûn âäúi xæïng gäöm 3 âæåìng cheïo våïi caïc càûp gáön bàòng nhæng khäng âuïng bàòng caïc giaï trë riãng. Træåìng håüp duìng thæåìng xuyãn nháút laì WILKINSON(21). Vê duû, WILKINSON(7) laì 3 1 0 0 0 0 0 1 2 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 2 1 0 0 0 0 0 1 3

Page 206: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 205

Phan Thanh Tao - 2004

Caïc haìm ám thanh täøng quaït

SOUND Chuyãøn vectå sang ám thanh SOUND(Y) gæíi tên hiãûu trong vectå Y sang loa trãn caïc loaûi maïy SPARC, HP, SGI, PC, vaì Macintosh. Vectå âæåüc chia thang ám tæû âäüng âãø cung cáúp biãn âäü låïn nháút. Ám thanh âæåüc chåi våïi täúc âäü máùu màûc âënh. Trãn maïy SPARC, täúc âäü máùu cäú âënh laì 8192 Hz. Trãn maïy Macintosh, täúc âäü máùu cäú âënh laì 22.255K Hz SOUND(Y,FS), trãn maïy Macintosh, PC, vaì SGI, chåi ám thanh våïi táön säú máùu laì FS Hz Vectå Y âæåüc tæû âäüng taûo thang ám âãø caïc giaï trë låïn nháút vaì nhoí nháút trong Y æïng våïi miãön giaï trë vaìo nhoí nháút vaì låïn nháút cho pheïp båíi pháön cæïng. Trãn maïy Macintosh vaì SGI, bäü âiãöu khiãøn volume trãn Control Panel xaïc âënh báûc ám thanh cuäúi cuìng SAXIS Chia truûc ám thanh. Haìm SOUND chia thang ám thäng thæåìng vectå nháûp Y cuía noï âãø caïc giaï trë låïn nháút vaì nhoí nháút trong Y æïng våïi miãön giaï trë vaìo nhoí nháút vaì låïn nháút cho pheïp båíi pháön cæïng SAXIS(V), våïi V laì vectå 2 chiãöu V = [SMIN SMAX], huíy viãûc chia thang ám tæû âäüng cuía haìm SOUND vaì âàût thang ám âãø SMIN vaì SMAX æïng våïi miãön giaï trë vaìo nhoí nháút vaì låïn nháút cho pheïp båíi pháön cæïng. Caïc giaï trë ngoaìi miãön naìy bë xeïn âi SAXIS('auto') âàût viãûc chia truûc ám thanh ngæåüc vãö caïch chia tæû âäüng SAXIS, traí vãö vectå doìng 2 pháön tæí chæïa [SMIN SMAX] laì hiãûu æïng hiãûn taûi. SAXIS hoaìn toaìn giäúng nhæ CAXIS vaì AXIS, chè khaïc laì viãûc chia truûc aïp duûng cho ám thanh chæï khäng phaíi cho caïc giåïi haûn vãö âäö thë

Caïc haìm ám thanh chi tiãút

AUWRITE Ghi tãûp ám thanh maî hoïa theo luáût mu-law (chè tênh cáûn trãn) AUWRITE(Y,'filename') chuyãøn Y sang caïc byte maî hoïa theo luáût mu-law vaì ghi vaìo tãûp ám thanh chè âënh. Nãúu khäng cho tãn tãûp, maì duìng /dev/audio thç hoàûc laì trãn maïy cuûc bäü, hoàûc laì trãn maïy nhoí chè âënh båíi biãún mäi træåìng DISPLAY AUREAD Âoüc tãûp ám thanh maî hoïa theo luáût mu-law (chè tênh cáûn trãn)

Page 207: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 206

Phan Thanh Tao - 2004

Y = AUREAD('filename') âoüc tãûp ám thanh 'filename' vaì chuyãøn dæî liãûu tæì caïc byte maî hoïa theo luáût mu-law sang tên hiãûu trong miãön giaï trë -1 <= Y <= 1. WAVWRITE Læu caïc tãûp ám thanh daûng WAV cuía Windows 3.1 WAVWRITE(y,Fs,wavefile) læu tãûp daûng “ .WAV ” âæåüc chè âënh båíi "wavefile". Caïc âäúi säú nháûp cho WAVWRITE nhæ sau: y Dæî liãûu máùu âãø ghi (8 bit max) Fs Täúc âäü máùu wavefile Chuäùi kyï tæû laì tãn tãûp “ .WAV ” âãø taûo ra Læu yï: WAVWRITE seî taûo ra mäüt tãûp kãnh soïng âån 8-bit. Dæî liãûu máùu khäng phaíi 8-bit bë càõt WAVREAD WAVREAD Naûp caïc tãûp ám thanh daûng WAV cuía Windows 3.1 [y]=WAVREAD(wavefile) naûp tãûp daûng “ .WAV ” âæåüc chè âënh båíi "wavefile", traí vãö dæî liãûu máùu trong biãún "y". Pháön måí räüng “.WAV ” cuía tãn tãûp laì tuìy choün [y,Fs]=WAVREAD(wavefile) naûp tãûp daûng “ .WAV ” âæåüc chè âënh båíi "wavefile", traí vãö dæî liãûu máùu trong biãún "y" vaì täúc âäü máùu trong biãún "Fs" [y,Fs,Format]=WAVREAD(wavefile) naûp tãûp daûng “ .WAV ” âæåüc chè âënh båíi "wavefile", traí vãö dæî liãûu máùu trong biãún "y" , täúc âäü máùu trong biãún "Fs" , vaì thäng tin tãûp daûng “.WAV ” trong biãún "Format". Thäng tin âæåüc traí vãö laì mäüt vectå 6 pháön tæí theo thæï tæû nhæ sau: Format(1) Daûng dæî liãûu (luän cho PCM) Format(2) Säú kãnh Format(3) Täúc âäü máùu (Fs) Format(4) Trung bçnh byte/s(máùu) Format(5) Khäúi xãúp dæî liãûu Format(6) Caïc bit/máùu Læu yï: WAVREAD chè cung cáúp dæî liãûu kãnh âån 8-bit MU2LIN Chuyãøn mu-law sang tuyãún tênh Y = MU2LIN(MU) chuyãøn caïc tên hiãûu ám thanh maî hoïa 8-bit theo luáût mu-law, læu “ caïc giaï trë ràõn ” trong miãön giaï trë 0 <= MU <= 255, sang tên hiãûu biãn âäü trong miãön -s < Y < s våïi s = 32124/32768 ~= .9803. Tham säú nháûp MU thæåìng nháûn âæåüc bàòng caïch duìng fread(...,'uchar') âãø âoüc caïc tãûp ám thanh coï byte âæåüc maî hoïa "Caïc giaï trë ràõn " laï caïc säú nguyãn cuía MATLAB - caïc säú thæûc coï giaï trë nguyãn LIN2MU Chuyãøn tuyãún tênh sang mu-law

Page 208: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 207

Phan Thanh Tao - 2004

MU = LIN2MU(Y) chuyãøn caïc biãn âäü tên hiãûu ám thanh tuyãún tênh trong miãön -1 <= Y <= 1 sang “ caïc giaï trë ràõn” maî hoïa theo luáût mu-law trong miãön 0 <= MU <= 255

Caïc haìm âàûc biãût

BESSELJ BESSELJ Caïc haìm Bessel loaûi 1 J = BESSELJ(ALPHA,X) tênh haìm Bessel loaûi 1, Jα(X) våïi giaï trë thæûc, báûc khäng ám ALPHA vaì âäúi säú X. Kãút quaí coï size(J) = size(Z) nãúu ALPHA vä hæåïng, hoàûc size(J) = [prod(size(Z)), length(ALPHA)] nãúu ALPHA laì vectå. Caïc pháön tæí cuía X coï thãø laì caïc giaï trë thæûc khäng ám báûc báút kyì. Tuy nhiãn, våïi ALPHA, coï 2 haûn chãú quan troüng: ALPHA phaíi tàng tæìng âån vë, nghéa laì ALPHA = alpha:1:alpha+n-1, vaì caïc giaï trë phaíi thoaí maîn 0 <= alpha(k) <= 1000. Vê duû: besselj(3:9,(10:.2:20)') phaït sinh baíng 51x7 åí trang 400 trong saïch "Handbook of Mathematical Functions" cuía Abramowitz vaì Stegun, besselj(2/3:1:98/3,r) phaït sinh caïc haìm Bessel báûc phán nhoí duìng båíi MathWorks Logo, maìng daïng L. J2/3(r) phuì håüp âiãøm kyì dë taûi goïc trong våïi goïc bàòng pi/(2/3) BESSELY BESSELY Caïc haìm Bessel loaûi 2 Y = BESSELY(ALPHA,X) tênh caïc haìm Bessel loaûi 2, Yα(X) våïi giaï trë thæûc, báûc khäng ám ALPHA vaì âäúi säú X. Kãút quaí coï size(Y) = size(Z) nãúu ALPHA vä hæåïng, hoàûc size(Y) = [prod(size(Z)), length(ALPHA)] nãúu ALPHA laì vectå. Caïc pháön tæí cuía X coï thãø laì giaï trë thæûc khäng ám báûc báút kyì. Tuy nhiãn, våïi ALPHA, coï 2 haûn chãú quan troüng: ALPHA phaíi tàng tæìng âån vë, nghéa laì ALPHA = alpha:1:alpha+n-1, vaì caïc giaï trë phaíi thoaí maîn 0 <= alpha(k) <= 1000. Vê duû: bessely(3:9,(10:.2:20)') phaït sinh baíng 51x7 åí trang 401 trong saïch "Handbook of Mathematical Functions" cuía Abramowitz vaì Stegun BESSELI BESSELI Sæía âäøi caïc haìm Bessel loaûi 1 I = BESSELI(ALPHA,X) tênh haìm sæía âäøi Bessel loaûi 1, Iα(X) våïi giaï trë thæûc, báûc khäng ám ALPHA vaì âäúi säú X. Kãút quaí coï size(I) = size(Z) nãúu ALPHA vä hæåïng, hoàûc size(I) = [prod(size(Z)), length(ALPHA)] nãúu ALPHA laì vectå. Caïc pháön tæí cuía X coï thãø laì caïc giaï trë thæûc khäng ám báûc báút kyì. Tuy nhiãn, våïi ALPHA, coï 2 haûn chãú quan troüng: ALPHA phaíi tàng

Page 209: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 208

Phan Thanh Tao - 2004

tæìng âån vë, nghéa laì ALPHA = alpha:1:alpha+n-1, vaì caïc giaï trë phaíi thoaí maîn 0 <= alpha(j) <= 1000 E = BESSELI(ALPHA,X,1) tênh Iα(X)*e-X , Iα(X)*EXP(-X). Quan hãû giæîa caïc haìm Bessel loaûi 1 laì Iα(X) = i-α * Jα(X) , Iα(X) = i^(-alpha) * Jα(X) BESSELK BESSELK Sæía âäøi caïc haìm Bessel loaûi 2 K = BESSELK(ALPHA,X) tênh caïc haìm Bessel loaûi 2, Kα(X) våïi giaï trë thæûc, báûc khäng ám ALPHA vaì âäúi säú X. Kãút quaí coï size(K) = size(Z) nãúu ALPHA vä hæåïng, hoàûc size(K) = [prod(size(Z)), length(ALPHA)] nãúu ALPHA laì vectå. Caïc pháön tæí cuía X coï thãø laì giaï trë thæûc khäng ám báûc báút kyì. Tuy nhiãn, våïi ALPHA, coï 2 haûn chãú quan troüng: ALPHA phaíi tàng tæìng âån vë, nghéa laì ALPHA = alpha:1:alpha+n-1, vaì caïc giaï trë phaíi thoaí maîn 0 <= alpha(j) <= 1000 E = BESSELK(ALPHA,X,1) tênh Kα(X)*EXP(X). Quan hãû våïi caïc haìm Bessel nguyãn baín coï âäúi säú aío: Kα(x) = pi/2 * i-α * (Jα(i*x) + Yα(i*x)) Vê duû: besselk(3:9,[0:.2:9.8 10:.5:20],1) phaït sinh baíng 71x7 åí trang 424 trong saïch "Handbook of Mathematical Functions" cuía Abramowitz vaì Stegun BETA Haìm Beta y = beta(z,w) y = têch phán tæì 0 âãún 1 cuía t.^(z-1) .* (1-t).^(w-1) dt. z vaì w phaíi phuì håüp thãm Haìm beta chæa hoaìn thaình y = beta(x,a,b). Caïc pháön tæí cuía x phaíi trong âoaûn [0,1]. a vaì b phaíi laì caïc âaûi læåüng vä hæåïng BETAINC BETAINC Haìm beta chæa hoaìn thaình. Y = BETAINC(X,A,B). Caïc pháön tæí cuía X phaíi trong âoaûn [0,1]. Caïc âäúi säú X, A vaì B táút caí phaíi cuìng kêch thæåïc, ngoaûi træì haìm coï caïc âäúi säú vä hæåïng nhæ caïc ma tráûn hàòng cuía kêch thæåïc chung cuía caïc âäúi säú khaïc BETALN Lä-ga-rit cuía haìm beta y = betaln(z,w). z vaì w phaíi phuì håüp thãm ELLIPJ Caïc haìm elliptic Jacobi SN, CN vaì DN [Sn,Cn,Dn] = ELLIPJ(U,M) traí vãö caïc giaï trë cuía caïc haìm elliptic Jacobi SN, CN vaì DN, æåïc læåüng taûi âäúi säú U vaì tham säú M. Nhæ bäø sung hiãûn thåìi, M giåïi haûn 0 < M < 1

Page 210: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 209

Phan Thanh Tao - 2004

ELLIPJ(U,M) âæåüc tênh chênh xaïc âãún EPS. U vaì M phaíi laì caïc ma tráûn cuìng cåî hoàûc mäüt trong hai laì âaûi læåüng vä hæång. Âãø chàõc chàõn khäng nháöm mäâun K våïi tham säú M - chuïng quan hãû theo caïch sau: M = K^2 ELLIPKE ELLIPKE Têch phán elliptic âáöy âuí [K,E] = ELLIPKE(M) traí vãö giaï trë cuía têch phán elliptic âáöy âuí loaûi 1 vaì 2 trãn M. Nhæ bäø sung hiãûn thåìi, M giåïi haûn 0 < M < 1 Âäü chênh xaïc cuía ELLIPKE(M) laì EPS. Âãø chàõc chàõn khäng nháöm mäâun K våïi tham säú M - chuïng quan hãû theo caïch sau: M = K^2 ERF Haìm sai säú y = erf(x) y = 2/sqrt(pi) nhán våïi têch phán tæì 0 âãún x cuía exp(-t^2) dt ERFC Haìm sai säú buì y = erfc(x) y = 2/sqrt(pi) nhán våïi têch phán tæì 0 âãún x cuía exp(-t^2) dt = 1 - erf(x) ERFCX Haìm sai säú buì coï chia tè lãû y = erfcx(x) y = exp(x^2) * erfc(x) ~ (1/sqrt(pi)) * 1/x våïi x låïn ERFINV Haìm ngæåüc cuía haìm sai säú x = erfinv(y) thoía maîn y = erf(x), -1 <= y < 1, -inf <= x <= inf EXPINT Haìm têch phán muî, E1(x) Y = EXPINT(X) laì têch phán tæì X âãún Inf (∞) cuía (exp(-t)/t) dt GAMMA Haìm gamma Y = GAMMA(X) æåïc læåüng haìm gamma taûi táút caí caïc pháön tæí cuía X. X phaíi thæûc gamma(x) = têch phán tæì 0 âãún inf (∞) cuía t^(x-1) exp(-t) dt gamma(n+1) = n! = n giai thæìa = prod(1:n) GCD Æåïc chung låïn nháút

Page 211: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 210

Phan Thanh Tao - 2004

G = GCD(A,B) laì æåïc chung låïn nháút cuía caïc säú nguyãn A vaì B G = GCD(0,0) = 0 theo quy æåïc; táút caí caïc GCD khaïc âãöu nguyãn dæång [G,C,D] = GCD(A,B) cuîng traí vãö C vaì D våïi G = A*C + B*D GAMMAINC GAMMAINC Haìm gamma chæa hoaìn thaình Y = GAMMAINC(X,A) æåïc læåüng haìm gamma chæa hoaìn thaình taûi táút caí caïc pháön tæí cuía X. X phaíi thæûc. X vaì A phaíi cuìng kêch thæåïc, ngoaûi træì haìm coï caïc âäúi säú vä hæåïng nhæ caïc ma tráûn hàòng cuìng kêch thæåïc våïi caïc âäúi säú khaïc gammainc(x,a) = (têch phán tæì 0 âãún x cuía t^(a-1) exp(-t) dt)/gamma(a) Læu yï: gammainc(x,a) tiãún vãö 1 khi x tiãún vãö vä cuìng LCM Bäüi chung nhoí nháút LCM(A,B) laì bäüi chung nhoí nháút cuía caïc säú nguyãn dæång A vaì B LEGENDRE LEGENDRE Caïc haìm Legendre liãn âåïi P = LEGENDRE(N,X) tênh caïc haìm Legendre liãn âåïi báûc N vaì theo thæï tæû M = 0, 1, ..., N, tênh trãn X. N laì mäüt säú nguyãn nhoí hån 257. X laì vectå coï caïc pháön tæí X(j) thæûc thoía maîn abs(X(j)) <= 1. Giaï trë xuáút P laì ma tráûn cåî (N+1)xL, våïi L = length(X). P(i,j) æïng våïi haìm Legendre liãn âåïi báûc N vaì vë trê (i-1), tênh taûi X(j) Âënh nghéa toaïn hoüc cuía haìm P laì P(n,m;x) = (-1)^m * (1-x^2)^(m/2) * (d/dx)^m P(n,x) , våïi P(n,x) laì âa thæïc Legendre báûc n Læu yï: doìng âáöu cuía P laì âa thæïc Legendre æåïc læåüng taûi X. (træåìng håüp M = 0) SP = LEGENDRE(N,X,'sch') tênh caïc haìm Schmidt quan hãû baïn chuáøn tàõc våïi caïc haìm Legendre laì SP(n,m;x). Caïc haìm naìy quan hãû våïi caïc haìm Legendre liãn âåïi khäng chuáøn P(n,m;x) båíi: SP(n,m;x) = sqrt( 2*(n-m)!/(n+m)! ) * P(n,m;x) Vê duû: legendre(2, 0:0.1:0.2) traí vãö ma tráûn daûng P(2,0;0) P(2,0;0.1) P(2,0;0.2) P(2,1;0) P(2,1;0.1) P(2,1;0.2) P(2,2;0) P(2,2;0.1) P(2,2;0.2) GAMMALN GAMMALN Haìm lä-ga-rit gamma Y = GAMMALN(X) laì LOG(GAMMA(X)), traïnh traìn dæåïi vaì traìn trãn

Page 212: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 211

Phan Thanh Tao - 2004

LOG2 Taïch caïc säú thæûc. Theo chuáøn IEEE laì logb() y = LOG2(x) tênh lä-ga-rit cå säú 2 cuía x [f,e] = LOG2(x) våïi ma tráûn thæûc x, traí vãö ma tráûn thæûc, thæåìng trong miãön 0.5 <= abs(f) < 1, vaì ma tráûn e caïc säú nguyãn, âãø x = f .* 2.^e. Moüi säú 0 trong x cho ra f = 0 vaì e = 0. Caïch naìy phuì håüp våïi haìm ANSI C laì frexp() vaì haìm thæûc chuáøn IEEE laì logb() POW2 Muî säú thæûc. Theo chuáøn IEEE laì scalbn() x = pow2(y) tênh 2y x = pow2(f,e) våïi ma tráûn thæûc f vaì ma tráûn nguyãn e thç tênh x = f .* (2 .^ e). Kãút quaí tênh toaïn nhanh bàòng caïch âån giaín laì cäüng e vaìo pháön muî cuía f. Caïch naìy phuì håüp våïi haìm ANSI C laì ldexp() vaì haìm thæûc chuáøn IEEE laì scalbn() RAT Xáúp xè phán säú [N,D] = RAT(X,tol) traí vãö 2 ma tráûn nguyãn âãø N./D gáön bàòng X, trong træåìng håüp naìy abs(N./D - X) <= tol*abs(X). Caïc giaï trë xáúp xè phán säú âæåüc phaït sinh bàòng caïch càõt liãn tuûc caïc khai triãøn pháön tháûp phán. Ngáöm âënh thç dung sai tol = 1.e-6*norm(X(:),1). RAT(X) hoàûc RAT(X,tol) hiãøn thë liãn tuûc caïc bæåïc biãøu diãùn. Cuìng thuáût toaïn, våïi giaï trë ngáöm âënh cuía dung sai tol, âæåüc duìng bãn trong MATLAB cho lãûnh FORMAT RAT RATS Xuát caïc phán säú RATS(X,LENS) duìng RAT âãø hiãøn thë caïc giaï trë xáúp xè phán säú cuía caïc pháön tæí cuía X. Âäü daìi cuía mäùi pháön tæí laì LENS. Ngáöm âënh thç LENS = 13, cho pheïp 6 pháön tæí trong 78 vë trê. Dáúu sao (*) âæåüc duìng cho caïc pháön tæí khäng thãø in ra trong khäng gian phán bäú, nhæng so saïnh khäng âaïng kãø våïi caïc pháön tæí trong X. Cuìng thuáût toaïn, våïi giaï trë ngáöm âënh cuía LENS, âæåüc duìng bãn trong MATLAB cho lãûnh FORMAT RAT CART2SPH CART2SPH Biãún âäøi hãû toüa âäü Âãö-caïc sang hãû toüa âäü cáöu [AZ,EL,R] = CART2SPH(X,Y,Z) Biãún âäøi dæî liãûu læu trong hãû toüa âäü Âãö-caïc sang hãû toüa âäü cáöu. Nãúu [M,N] = SIZE(X), thç Y vaì Z cuîng phaíi cuìng kêch thæåïc. AZ vaì EL tênh theo âån vë radian CART2POL CART2POL Biãún âäøi hãû toüa âäü Âãö-caïc sang hãû toüa âäü cæûc [TH,R] = CART2POL(X,Y) Biãún âäøi dæî liãûu læu trong hãû toüa âäü Âãö-caïc sang hãû toüa âäü cæûc

Page 213: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 212

Phan Thanh Tao - 2004

[M,N] = SIZE(X), thç Y cuîng phaíi cuìng kêch thæåïc. TH tênh theo âån vë radian [TH,R,Z] = CART2POL(X,Y,Z) Biãún âäøi dæî liãûu læu trong hãû toüa âäü Âãö-caïc sang hãû toüa âäü truû. Nãúu [M,N] = SIZE(X), thç Y vaì Z phaíi cuìng kêch thæåïc POL2CART POL2CART Biãún âäøi hãû toüa âäü cæûc sang hãû toüa âäü Âãö-caïc [X,Y] = POL2CART(TH,R) Biãún âäøi dæî liãûu læu trong hãû toüa âäü cæûc sang hãû toüa âäü Âãö-caïc. Nãúu [M,N] = SIZE(TH), thç R cuîng phaíi cuìng kêch thæåïc. TH phaíi theo âån vë radian . [X,Y,Z] = POL2CART(TH,R,Z) Biãún âäøi dæî liãûu læu trong hãû toüa âäü truû sang hãû toüa âäü Âãö-caïc. Nãúu [M,N] = SIZE(TH), thç R vaì Z phaíi cuìng kêch thæåïc SPH2CART SPH2CART Biãún âäøi hãû toüa âäü cáöu sang hãû toüa âäü Âãö-caïc [X,Y,Z] = SPH2CART(AZ,EL,R) Biãún âäøi dæî liãûu læu trong hãû toüa âäü cáöu sang hãû toüa âäü Âãö-caïc. Nãúu [M,N] = SIZE(AZ), thç EL vaì R cuîng phaíi cuìng kêch thæåïc. AZ vaì EL phaíi theo âån vë radian

Måí vaì âoïng tãûp

FOPEN Måí tãûp FID = FOPEN('filename',permission) måí tãûp coï tãn chè âënh laì filename våïi chãú âäü cho pheïp chè âënh laì permission. Permission laì mäüt trong caïc chuäùi: 'r'_ âoüc 'w'_ ghi (taûo måïi nãúu cáön) 'a'_ näúi thãm vaìo cuäúi tãûp (taûo måïi nãúu cáön) 'r+' âoüc vaì ghi (khäng taûo måïi) 'w+' càõt tãûp hoàûc taûo måïi âãø âoüc vaì ghi 'a+' âoüc vaì ghi thãm vaìo cuäúi tãûp (taûo måïi nãúu cáön) 'W' ghi maì khäng tæû âäüng xoïa vuìng âãûm 'A' näúi thãm maì khäng tæû âäüng xoïa vuìng âãûm Ngáöm âënh caïc tãûp âæåüc måí trong chãú âäü nhë phán. Âãø måí tãûp vàn baín thç thãm 't' vaìo chuäùi permission, nhæ 'rt' vaì 'wt+' FID = FOPEN(' filename') giaí sæí permission laì 'r'. Nãúu måí thaình cäng thç danh hiãûu FID láúy mäüt âaûi læåüng vä hæåïng nguyãn cuía MATLAB, danh hiãûu tãûp âæåüc duìng nhæ âäúi säú âáöu tiãn cho caïc phuûc vuû vaìo ra tãûp. Nãúu viãûc måí tãûp khäng thaình cäng thç

Page 214: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 213

Phan Thanh Tao - 2004

traí vãö -1 cho FID. Ba danh hiãûu tãûp âæåüc tæû âäüng duìng maì khäng cáön måí. Chuïng laì fid=0 (nháûp chuáøn), fid=1 (xuáút chuáøn), vaì fid=2 (thiãút bë läùi chuáøn) [FID, MESSAGE] = FOPEN(' filename ',permission) traí vãö mäüt läùi hãû thäúng nãúu måí tháút baûi. FOPEN('all') traí vãö mäüt vectå doìng, caïc danh hiãûu cho táút caí caïc tãûp âang måí båíi ngæåìi duìng. (Nhæng khäng phaíi 0, 1, vaì 2) [FILENAME, PERMISSION] = FOPEN(FID) traí vãö tãn tãûp vaì chãú âäü våïi danh hiãûu tãûp âaî cho. Nãúu tãûp âæåüc måí trong chãú âäü 'r' vaì khäng tçm tháúy tãûp trong thæ muûc laìm viãûc thç FOPEN tçm xuäúng âæåìng dáùn tçm kiãúm cuía MATLAB [FID, MESSAGE] = FOPEN(' filename ',permission, machineformat) måí tãûp chè âënh våïi chãú âäü chè âënh vaì âoüc dæî liãûu bàòng caïch duìng FREAD hoàûc ghi dæî liãûu bàòng caïch duìng FWRITE våïi FORMAT âaî cho båíi machineformat. machineformat laì mäüt trong caïc chuäùi sau: 'native' hoàûc 'n' - FORMAT maïy cuûc bäü- ngáöm âënh 'ieee-le' hoàûc 'l' - chuáøn IEEE 'ieee-be' hoàûc 'b' - chuáøn IEEE 'vaxd' hoàûc 'd' - chuáøn VAX D 'vaxg' hoàûc 'g' - chuáøn VAX G 'cray'_ hoàûc 'c' - chuáøn Cray 'ieee-le.l64' hoàûc 'a' - chuáøn IEEE vaì âäü daìi säú liãûu 64 bit [FILENAME,PERMISSION,MACHINEFORMAT] = FOPEN(FID) traí vãö tãn tãûp, chãú âäü måí, vaì daûng maïy våïi daûnh hiãûu tãûp. Chãú âäü 'W' vaì 'A' âæåüc thiãút kãú âãø duìng våïi caïc âéa tæì vaì khäng tæû âäüng xoïa vuìng âãûm hiãûn thåìi sau caïc thao taïc xuáút. Vê duû, måí 1/4" bàng tæì trãn traûm SPARC âãø ghi maì khäng tæû âäüng xoïa vuìng âãûm: fid = fopen('/dev/rst0','W') FCLOSE Âoïng tãûp FCLOSE(FID) âoïng tãûp våïi danh hiãûu FID, laì mäüt säú nguyãn nháûn âæåüc tæì FOPEN() træåïc âáy FCLOSE('all') âoïng táút caí caï tãûp âang måí træì 0, 1 vaì 2 FCLOSE() traí vãö s 0 nãúu thaình cäng, -1 nãúu ngæåüc laûi

Page 215: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 214

Phan Thanh Tao - 2004

Vaìo/Ra tãûp khäng daûng thæïc

FREAD Âoüc tãûp nhë phán [A, COUNT] = FREAD(FID,SIZE,PRECISION) âoüc dæî liãûu nhë phán tæì tãûp chè âënh vaì ghi vaìo ma tráûn A. Âäúi säú xuáút tuìy choün COUNT traí vãö säú pháön tæí âoüc thaình cäng. FID laì danh hiãûu nguyãn cuía tãûp âæåüc måí tæì FOPEN. Âäúi säú tuìy choün SIZE; nãúu khäng coï thç âoüc toaìn bäü tãûp; nãúu coï thç caïc âãö muûc håüp lyï laì: N âoüc N pháön tæí vaìo mäüt vectå cäüt. inf âoüc vaìo cuäúi tãûp. [M,N] âoüc caïc pháön tæí âãø láúp âáöy ma tráûn cåî MxN, theo thæï tæû cäüt N coï thãø laì inf, nhæng khäng laì M Âäúi säú PRECISION âiãöu khiãøn säú bit âoüc cho mäùi giaï trë vaì thäng dëch caïc bit naìy nhæ caïc giaï trë kyï tæû, säú nguyãn hoàûc säú thæûc. Caïc chuäùi sau coï thãøø duìng, hoàûc caïc phiãn baín MATLAB, hoàûc C hoàûc Fortran tæång âæång. Nãúu khäng chè âënh thç âæåüc ngáöm âënh laì 'uchar'. Caïc pháön tæí cuía ma tráûn kãút quaí luän læu trong daûng säú thæûc daìi cuía MATLAB MATLAB C hoàûc Fortran Mä taí 'char' 'char' kyï tæû , 8 bit 'schar' 'signed char' kyï tæû coï dáúu, 8 bit 'short' 'short' säú nguyãn, 16 bit 'int' 'int' säú nguyãn, 16 hoàûc 32 bit 'long' 'long' säú nguyãn, 32 hoàûc 64 bit* 'float' 'float' säú thæûc , 32 bit 'double' 'double' säú thæûc daìi , 64 bit 'uchar' 'unsigned char' kyï tæû khäng dáúu, 8 bit 'ushort' 'unsigned short' säú nguyãn khäng dáúu, 16 bit 'uint' 'unsigned int' säú nguyãn khäng dáúu, 16 hoàûc 32 bit 'ulong' 'unsigned long' säú nguyãn khäng dáúu, 32 bit 'char' 'char*1' kyï tæû , 8 bit 'float32' 'real*4' säú thæûc 32 bit 'float64' 'real*8' säú thæûc 64 bit 'int8' 'integer*1' säú nguyãn, 8 bit

Page 216: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 215

Phan Thanh Tao - 2004

'int16' 'integer*2' säú nguyãn, 16 bit 'int32' 'integer*4' säú nguyãn, 32 bit 'integer*8' säú nguyãn, 64 bits** 'intN' säú nguyãn coï dáúu, N bit räüng 'uintN' säú nguyãn khäng dáúu, N bit räüng N biãøu hiãûn giaï trë báút kyì giæîa 1 vaì 32 * 64 bits trãn DEC alpha ** chè duìng trãn DEC alpha Vê duû, fid = fopen('FREAD.m','r'); F = FREAD(fid); s = setstr(F') måí tãûp chæïa âãö muûc HELP naìy, räöi âoüc vaì hiãøn thë toaìn bäü tãûp, ngáöm âënh duìng size = inf vaì precision = 'uchar'. Kãút quaí length(F) laì säú kyï tæû trong tãûp [A, COUNT] = FREAD(FID,SIZE,PRECISION,SKIP) âæa vaìo âäúi säú tuìy choün SKIP âãø chè âënh säú byte boí qua sau mäùi láön âoüc. Caïch naìy thæåìng duìng âãø trêch dæî liãûu trong caïc træåìng khäng liãn tuûc tæì caïc baín ghi coï âäü daìi cäú âënh FWRITE Ghi dæî liãûu vaìo mäüt tãûp nhë phán COUNT = FWRITE(FID,A,PRECISION) ghi caïc pháön tæí cuía ma tráûn A vaìo tãûp chè âënh, dëch caïc giaï trë MATLAB sang âäü chênh xaïc chè âënh laì precision. Dæî liãûu âæåüc ghi theo thæï tæû cäüt. COUNT laì säú pháön tæí âæåüc ghi thaình cäng. FID laì danh hiãûu säú nguyãn cuía tãûp nháûn tæì FOPEN, hoàûc 1 chi xuáút chuáøn hoàûc 2 cho läùi chuáøn. PRECISION âiãöu khiãøn daûng vaì kêch thæåïc cuía kãút quaí. Xem danh saïch PRECISION cho pheïp trong FREAD COUNT = FWRITE(FID,A,PRECISION,SKIP) âæa vaìo âäúi säú tuìy choün SKIP âãø chè âënh säú byte boí qua træåïc mäùi láön ghi. Caïch naìy thæåìng duìng âãø cheìn dæî liãûu trong caïc træåìng khäng liãn tuûc tæì caïc baín ghi coï âäü daìi cäú âënh Vê duû fid = fopen('magic5.bin','wb') FWRITE(fid,magic(5),'integer *4') Taûo måïi mäüt tãûp nhë phán 100-byte, chæïa 25 pháön tæí cuía ma phæång báûc 5, læu nhæ caïc säú nguyãn 4-byte

Nháûp/xuáút tãûp coï daûng thæïc

FSCANF Âoüc dæî liãûu coï daûng thæïc trong mäüt tãûp

Page 217: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 216

Phan Thanh Tao - 2004

[A,COUNT] = FSCANF(FID,FORMAT,SIZE) âoüc dæî liãûu tæì tãûp chè âënh båíi danh hiãûu tãûp FID, chuyãøn sang chuäùi chè âënh FORMAT, vaì traí vãö ma tráûn A. COUNT laì âäúi säú xuáút tuìy choün âãø traí vãö säú pháön tæí âoüc thaình cäng FID laì mäüt säú nguyãn danh hiãûu tãûp nháûn âæåüc tæì FOPEN. SIZE laì tuìy choün; noï âàût mäüt giåïi haûn vaìo säú pháön tæí coï thãø âæåüc âoüc tæì tãûp; nãúu khäng chè âënh thç xem nhæ toaìn bäü tãûp; nãúu coï chè âënh thç caïc âãö muûc håüp lyï laì: N âoüc háöu hãút N pháön tæí vaìo mäüt vectå cäüt inf âoüc âãún hãút tãûp [M,N] âoüc M * N pháön tæí láúp âáöy êt nháút mäüt ma tráûn cåî MxN, theo thæï tæû cäüt. N coï thãø laì inf, nhæng khäng laì M. Nãúu ma tráûn traí vãö A tæì caïch chè duìng chuyãøn âäøi kyï tæû vaì SIZE khäng thuäüc daûng [M,N] thç traí vãö mäüt vectå cäüt. FORMAT laì mäüt chuäùi chæïa caïc chè âënh chuyãøn âäøi cuía ngän ngæî C. Caïc chè âënh chuyãøn âäøi gäöm kyï tæû %, læûa choün “*” boí qua viãûc gaïn vaì træåìng âäü räüng, vaì caïc kyï tæû chuyãøn kiãøu d, i, o, u, x, e, f, g, s, c, vaì [. . .]. Xem giaïo trçnh C vãö caïc kyï tæû chuyãøn kiãøu. Nãúu mäüt kyï tæû chuyãøn âäøi âæåüc duìng âãø âoüc mäüt pháön tæí thç coï thãø laìm cho mäüt säú pháön tæí ma tráûn cuía MATLAB âæåüc duìng, mäùi pháön tæí giæî mäüt kyï tæû . Viãûc träün kyï tæû vaì caïc chè âënh chuyãøn kiãøu säú seî laìm cho ma tráûn kãút quaí laì ma tráûn säú vaì caïc kyï tæû âoüc vaìo nhæ giaï trë ASCII cuía chuïng, mäùi kyï tæû trãn mäüt pháön tæí cuía ma tráûn FSCANF khaïc våïi haìm truìng tãn cuía noï trong C, âiãöu quan troüng tæång æïng laì noï âæåüc “vectå hoïa" nhàòm traíí vãö mäüt âäúi säú ma tráûn. Chuäùi FORMAT âæåüc duìng laûi qua tãûp cho âãún khi hãút tãûp hoàûc täøng säú dæî liãûu chè âënh båíi SIZE âæåüc âoüc vaìo. Vê duû: S = fscanf(fid,'%s') âoüc (vaì traí vãö ) mäüt chuäùi kyï tæû A = fscanf(fid,'%5d') âoüc säú nguyãn tháûp phán 5-chæî säú FPRINTF FPRINTF Ghi dæî liãûu coï daûng thæïc vaìo tãûp COUNT = FPRINTF(FID,FORMAT,A,...) âënh daûng dæî liãûu trong ma tráûn A (vaì trong moüi ma tráûn âäiú säú thãm vaìo), dæåïi âiãöu khiãøn cuía chuäùi chè âënh FORMAT, vaì ghi noï vaìo tãûp coï daûnh hiãûu FID. COUNT laì âäúi säú xuáút tuìy choün âãø traí vãö säú byte ghi thaình cäng. FID laì mäüt säú nguyãn danh hiãûu tãûp nháûn âæåüc FOPEN. Noï cuîng coï thãø laì 1 cho xuáút chuáøn (maìn hçnh) hoàûc 2 cho läùi chuáøn. FORMAT laì chuäùi chæïa caïc chè âënh chuyãøn kiãøu cuía C. Caïc chè âënh chuyãøn âäøi gäöm kyï tæû %, , caïc cåì tuìy choün, caïc træåìng âäü räüng vaì säú caïc säú tháûp phán, chè âënh kiãøu con, vaì caïc kyï tæû chuyãøn

Page 218: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 217

Phan Thanh Tao - 2004

kiãøu d, i, o, u, x, X, f, e, E, g, G, c, vaì s. Xem giaïo trçnh C âãø biãút thãm chi tiãút FPRINTF nhæ ANSI C våïi caïc loaûi træì vaì caïc måí räüng. Bao gäöm: 1. Nãúu säú thæûc keïp cuía MATLAB khäng chuyãøn chênh xaïc sang kiãøu dæî liãûu chè âënh trong kyï tæû chuyãøn kiãøu thç FORMAT “e ” âæåüc duìng. Phaíi chuyãøn roî raìng caïc giaï trë khäng nguyãn cuía MATLAB sang caïc giaï trë nguyãn nãúu coï yï âënh duìng chè âënh chuyãøn kiãøu nguyãn nhæ “ d ” vaì láúy caïch xæí lyï cuía ANSI C 2. Caïc chè âënh kiãøu con khäng chuáøn sau âæåüc cung cáúp cho caïc kyï tæû chuyãøn kiãøu o, u, x, vaì X t - Kiãøu dæî liãûu cå såí cuía C laì float khaïc våïi säú nguyãn khäng dáúu b - Kiãøu dæî liãûu cå såí cuía C laì double khaïc våïi säú nguyãn khäng dáúu Vê duû, âãø in ra mäüt giaï trë double cå säú hex thç duìng FORMAT nhæ '%bx' FPRINTF cuîng khaïc våïi haìm cuìng tãn cuía noï trong C - quan troüng laì " vectå hoïa " khi A khäng phaíi laì âaûi læåüng vä hæåïng. Chuäùi FORMAT âæåüc duìng laûi qua caïc pháön tæí cuía A (tæìng cäüt) cho âãún khi táút caí caïc pháön tæí âæåüc duìng hãút. Räöi noï âæåüc duìng laûi theo cuìng caïch, khäng khåíi taûo laûi, qua moüi âäúi säú ma tráûn thãm vaìo. Vê duû, caïc lãûnh x = 0:.1:1; y = [x; exp(x)]; fid = fopen('exp.txt','w'); fprintf(fid,'%6.2f %12.8f\n',y); taûo måïi mäüt tãûp vàn baín chæïa baíng ngàõn caïc giaï trë cuía haìm muî cå säú tæû nhiãn: 0.00 1.00000000 0.10 1.10517092 ... 1.00 2.71828183 FGETL Traí vãö doìng tiãúp theo cuía tãûp nhæ mäüt chuäùi FGETL(FID) traí vãö doìng tiãúp theo cuía mäüt tãûp våïi danh hiãûu tãûp FID nhæ mäüt chuäùi MATLAB. Traí vãö maì khäng âæa vaìo kyï tæû sang doìng. Duìng FGETS() âãø láúy doìng tiãúp theo coï âæa vaìo kyï tæû sang doìng. Nãúu âuïng kãút thuïc tãûp thç traí vãö -1 QUAN TROÜNG: Haîy læu yï ràòng haìm naìy coï yï chè duìng våïi tãûp vàn baín. Nãúu båíi nháöm láùn, âoüc mäüt tãûp "nhë phán" maì khäng coï kyï tæû sang doìng thç phuûc vuû naìy coï thãø täún nhiãöu thåìi gian våïi tãûp låïn. Vê duû: (tæång âæång lãûnh 'type fgetl.m') fid=fopen('fgetl.m'); while 1 line = fgetl(fid); if ~isstr(line), break, end disp(line)

Page 219: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 218

Phan Thanh Tao - 2004

end fclose(fid); FGETS Traí vãö doìng tiãúp theo cuía tãûp nhæ mäüt chuäùi FGETS(FID) traí vãö doìng tiãúp theo cuía mäüt tãûp våïi danh hiãûu tãûp fid laì mäüt chuäùi MATLAB. Coï âæa vaìo kyï tæû sang doìng. Duìng FGETL() âãø láúy doìng tiãúp theo maì khäng âæa vaìo kyï tæû sang doìng. Nãúu âuïng kãút thuïc tãûp thç traí vãö -1 QUAN TROÜNG: Haîy læu yï ràòng haìm naìy coï yï chè duìng våïi tãûp vàn baín. Nãúu båíi nháöm láùn, âoüc mäüt tãûp "nhë phán" maì khäng coï kyï tæû sang doìng thç phuûc vuû naìy coï thãø täún nhiãöu thåìi gian våïi tãûp låïn

Vë trê tãûp

FERROR Hoíi caïc läùi trong nháûp/xuáút tãûp MESSAGE = FERROR(FID,'clear') traí vãö thäng baïo läùi vaìo/ra gáön nháút våïi tãûp chè âënh. Chuäùi 'clear' laì tuìy choün. Nãúu coï, thç xoïa läùi biãøu hiãûn cho tãûp chè âënh [MESSAGE, ERRNUM] = FERROR(FID) cuîng traí vãö säú läùi. FID laì mäüt säú nguyãn danh hiãûu tãûp nháûn âæåüc tæìì FOPEN, hoàûc 0 cho nháûp chuáøn, 1 cho xuáút chuáøn hoàûc 2 cho läùi chuáøn FEOF Kiãøm tra hãút tãûp FEOF(FID) kiãøm tra biãøu hiãûn hãút tãûp cho tãûp våïi danh hiãûu tãûp laì FID FEOF(FID) traí vãö 1 nãúu biãøu hiãûn hãút tãûp âæåüc âàût, hoàûc 0 nãúu khäng âàût FSEEK Âäøi biãøu hiãûn vë trê trong mäüt tãûp STATUS = FSEEK(FID, offset, origin) âàût laûi vë trê tãûp trong tãûp chè âënh vaìo säú byte offset tæång æïng våïi origin chè âënh. FID laì mäüt säú nguyãn danh hiãûu tãûp nháûn âæåüc tæìì FOPEN. Caïc giaï trë offset âæåüc thäng dëch nhæ sau: > 0 : Di chuyãøn vãö phêa cuäúi tãûp = 0 : Khäng thay âäøi vë trê < 0 : Di chuyãøn vãö phêa âáöu tãûp Caïc giaï trë origin âæåüc thäng dëch nhæ sau: 'bof' hoàûc -1 : Âáöu tãûp 'cof' hoàûc 0 : Vë trê hiãûn thåìi trong tãûp 'eof' hoàûc 1 : Cuäúi tãûp STATUS = 0 nãúu thaình cäng vaìì -1 nãúu bë läùi Vê duû: fseek(fid,0,-1) "tua laûi" tãûp (âàût vë trê laûi åí âáöu tãûp)

Page 220: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 219

Phan Thanh Tao - 2004

FTELL Tçm vë trê trong mäüt tãûp POSITION = FTELL(FID) traí vãö vë trê cuía trong tãûp chè âënh. Position biãøu hiãûn theo âån vë byte tênh tæì âáöu tãûp. Nãúu -1 âæåüc traí vãö, thç biãøu hiãûn khäng thaình cäng; duìng FERROR âãø xaïc âënh traûng thaïi läùi. FID laì mäüt säú nguyãn danh hiãûu tãûp nháûn âæåüc tæì FOPEN, hoàûc 0 cho nháûp chuáøn, 1 cho xuáút chuáøn hoàûc 2 cho läùi chuáøn

Page 221: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 220

Phan Thanh Tao - 2004

FREWIND FREWIND tua laûi mäüt tãûp âang måí FREWIND(FID) âàût con troí tãûp vaìo âáöu tãûp våïi danh hiãûu tãûp laì fid Khuyãún caïo: Tua laûi mäüt danh hiãûu tãûp fid våïi mäüt thiãút bë bàng tæì coï thãø khäng khäng laìm viãûc, màûc duì khäng phaït sinh läùi!

Chuyãøn âäøi chuäùi

SPRINTF SPRINTF Ghi dæî liãûu coï daûng thæïc vaìo mäüt chuäùi [S,ERRMSG] = SPRINTF(FORMAT,A,...) âënh daûng dæî liãûu trong ma tráûn A (vaì trong caïc âäúi säú ma tráûn thãm vaìo), dæåïi âiãöu khiãøn cuía chuäùi chè âënh FORMAT, vaì traí vãö noï trong biãún S våïi daûng chuäùi MATLAB. ERRMSG laì âäúi säú xuáút tuìy choün âãø traí vãö mäüt chuäùi thäng baïo läùi nãúu xaíy ra läùi hoàûc mäüt ma tráûn räùng nãúu khäng läùi. SPRINTF giäúng nhæ FPRINTF ngoaûi træì noï traí vãö dæî liãûu trong mäüt biãún chuäùi MATLAB khaïc våïi ghi vaìo tãûp. FORMAT laì mäüt chuäùi chæïa caïc chè âënh chuyãøn kiãøu cuía C. Caïc chè âënh chuyãøn kiãøu gäöm kyï tæû %, caïc cåì, caïc træåìng âäü räüng vaì säú chæî säú tháûp phán, chè âënh kiãøu con, vaì kyï tæû chuyãøn kiãøu d, i, o, u, x, X, f, e, E, g, G, c, vaì s. Xem giaïo trçnh C âãø biãút thãm chi tiãút. SPRINTF nhæ trong ANSI C våïi moüt säú ngoaûi lãû vaì måí räüng. Bao gäöm: 1. Nãúu säú thæûc keïp cuía MATLAB khäng chuyãøn chênh xaïc sang kiãøu dæî liãûu chè âënh trong kyï tæû chuyãøn kiãøu thç FORMAT “e” âæåüc duìng. Baûn phaíi chuyãøn roî raìng caïc giaï trë khäng nguyãn cuía MATLAB sang caïc giaï trë nguyãn nãúu baûn coï yï âënh duìng chè âënh chuyãøn kiãøu nguyãn nhæ “ d ” vaì láúy caïch xæí lyï cuía ANSI C 2. Caïc chè âënh kiãøu con khäng chuáøn sau âæåüc cung cáúp cho caïc kyï tæû chuyãøn kiãøu o, u, x, vaì X t - Kiãøu dæî liãûu cå såí cuía C laì float khaïc våïi säú nguyãn khäng dáúu b - Kiãøu dæî liãûu cå såí cuía C laì double khaïc våïi säú nguyãn khäng dáúu Vê duû, âãø in ra mäüt giaï trë double cå säú hex thç duìng FORMAT nhæ '%bx' SPRINTF cuîng khaïc våïi haìm cuìng tãn cuía noï trong C - quan troüng laì " vectå hoïa " khi A khäng phaíi laì âaûi læåüng vä hæåïng. Chuäùi FORMAT âæåüc duìng laûi qua caïc pháön tæí cuía A (tæìng cäüt) cho âãún khi táút caí caïc pháön tæí âæåüc duìng hãút. Räöi noï âæåüc duìng laûi theo cuìng caïch, khäng khåíi taûo laûi, qua moüi âäúi säú ma tráûn thãm vaìo. Vê duû, caïc lãûnh S = sprintf('rho is %5.3f',(1+sqrt(5))/2) cho ra chuäùi S = 'rho is 1.618'

Page 222: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 221

Phan Thanh Tao - 2004

SSCANF Âoüc chuäùi dæåïi âiãöu khiãøn coï daûng thæïc [A,COUNT,ERRMSG,NEXTINDEX] = SSCANF(S,FORMAT,SIZE) âoüc dæî liãûu tæì biãún chuäùi MATLAB laì S, chuyãøn sang chuäùi chè âënh FORMAT, vaì traí vãö trong ma tráûn A. COUNT laì mäüt âäúi säú xuáút tuìy choün âãø traí vãö säú pháön tæ âoüc thaình cäng ERRMSG laì mäüt âäúi säú xuáút tuìy choün âãø traí vãö mäüt chuäùi thäng baïo läùi nãúu coï läùi hoàûc mäüt ma tráûn räùng nãúu khäng läùi. NEXTINDEX laì mäüt âäúi säú xuáút tuìy choün chè âënh mäüt hay nhiãöu säú kyï tæû âaî queït trong S. SSCANF giäúng FSCANF ngoaûi træì noï âoüc dæî liãûu tæì mäüt biãún chuäùi MATLAB khaïc våïi âoüc tæì mäüt tãûp. SIZE laì tuìy choün; noï âàût mäüt giåïi haûn vaìo pháön tæ coï thãø queït tæì chuäùi; nãúu khäng chè âënh, thç xem nhæ toaìn bäü chuäùi; nãúu coï chè âënh, thç caïc âãö muûc håüp lyï laì: N âoüc N pháön tæí vaìo mäüt vectå cäüt inf âoüc âãún cuäúi chuäùi [M,N] âoüc M * N pháön tæí láúp âáöy êt nháút mäüt ma tráûn cåî MxN, theo cäüt. N coï thãø laì inf, nhæng khäng laì M. Nãúu ma tráûn kãút quaí A chè tæì viãûc duìng kyï tæû chuyãøn kiãøu vaì SIZE khäng coï daûng [M,N] thç mäüt vectå doìng âæåüc traí vãö. FORMAT laì mäüt chuäùi chæïa caïc chè âënh chuyãøn âäøi cuía ngän ngæî C. Caïc chè âënh chuyãøn âäøi gäöm kyï tæû %, læûa choün “ * ” boí qua viãûc gaïn vaì træåìng âäü räüng, vaì caïc kyï tæû chuyãøn kiãøu d, i, o, u, x, e, f, g, s, c, vaì [. . .]. Xem giaïo trçnh C vãö caïc kyï tæû chuyãøn kiãøu. Nãúu mäüt kyï tæû chuyãøn âäøi âæåüc duìng âãø âoüc mäüt pháön tæí thç coï thãø laìm cho mäüt säú pháön tæí ma tráûn cuía MATLAB âæåüc duìng, mäùi pháön tæí giæî mäüt kyï tæû . Viãûc träün kyï tæû vaì caïc chè âënh chuyãøn kiãøu säú seî laìm cho ma tráûn kãút quaí laì ma tráûn säú vaì caïc kyï tæû âoüc vaìo nhæ giaï trë ASCII cuía chuïng, mäùi kyï tæû trãn mäüt pháön tæí cuía ma tráûn Viãûc queït âãún cuäúi chuäùi xaíy ra khi NEXTINDEX låïn hån kêch thæåïc cuía S SSCANF khaïc våïi haìm truìng tãn cuía noï trong C, âiãöu quan troüng tæång æïng laì noï âæåüc “vectå hoïa" nhàòm traíí vãö mäüt âäúi säú ma tráûn. Chuäùi FORMAT âæåüc duìng laûi qua tãûp cho âãún khi hãút tãûp hoàûc täøng säú dæî liãûu chè âënh båíi SIZE âæåüc chuyãøn sang. Vê duû, caïc lãûnh: S = '2.7183 3.1416'; A = sscanf(S,'%f') taûo måïi mäüt vectå hai pháön tæí chæïa giaï trë xáúp xè cuía säú e vaì pi

Caïc ma tráûn thæa så cáúp

SPEYE Ma tráûn thæa âån vë

Page 223: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 222

Phan Thanh Tao - 2004

SPEYE(M,N) taûo mäüt ma tráûn thæa cåî MxN våïi caïc säú 1 trãn âæåìng cheïo chênh SPEYE(N) laì caïch goün cuía SPEYE(N,N) SPEYE(SIZE(A)) laì mäüt caïch giaím khäng gian cuía SPARSE(EYE(SIZE(A)))

Page 224: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 223

Phan Thanh Tao - 2004

SPRANDN Caïc ma tráûn thæa ngáùu nhiãn R = SPRANDN(S) coï cuìng cáúu truïc thæa nhæ S, nhæng caïc pháön tæí âæåüc phán bäú ngáùu nhiãn chuáøn R = SPRANDN(m,n,density) laì ma tráûn thæa cåî mxn, våïi caïc pháön tæí khaïc khäng âæåüc phán bäú chuáøn khoaíng density*m*n R = SPRANDN(m,n,density,rc) cuîng coï säú âiãöu kiãûn tæång häù gáön bàòng rc. R âæåüc xáy dæûng tæì täøng caïc ma tráûn haûng bàòng 1. Nãúu rc laì mäüt vectå âäü daìi lr <= min(m,n), thç R coï lr giaï trë kyì dë cuía noï laì rc, táút caí caïc pháön tæí khaïc bàòng 0. Trong træåìng håüp naìy, R âæåüc phaït sinh bàòng caïch quay phàóng ngáùu nhiãn aïp duûng cho mäüt ma tráûn cheïo våïi caïc giaï trë kyì dë cho træåïc. Noï coï caïch phán phäúi låïn cáúu truïc topo vaì âaûi säú SPRANDSYM SPRANDSYM Caïc ma tráûn thæa ngáùu nhiãn âäúi xæïng R = SPRANDSYM(S) laì mäüt ma tráûn thæa ngáùu nhiãn âäúi xæïng coï tam giaïc dæåïi vaì âæåìng cheïo cuìng cáoï truïc nhæ S. Caïc pháön tæí âæåüc phán bäú chuáøn, våïi trung bçnh 0 vaì phæång sai 1 R = SPRANDSYM(n,density) laì mäüt ma tráûn vuäng thæa âäúi xæïng ngáùu nhiãn cáúp n våïi caïc pháön tæí khaïc khäng khoaíng density*n*n; mäùi pháön tæí laì täøng cuía mäüt hoàûc nhiãöu caïc máùu phán bäú ngáùu nhiãn chuáøn R = SPRANDSYM(n,density,rcond) cuîng coï säú âiãöu kiãûn tæång häù bàòng rcond. Viãûc phán bäú caïc pháön tæí laì khäng âäöng bäü; noï laì âäúi xæïng thä qua 0; táút caí trong âoaûn [-1,1]. Nãúu rcond laì 1 vectå âäü daìi n, thç R coï caïc giaï trë riãng laì rcond. Do âoï, nãúu rcond laì mäüt vectå dæång (khäng ám) thç R seî xaïc âënh dæång (khäng ám). Trong træåìng håüp naìy, R âæåüc phaït sinh bàòng caïch quay Jacobi aïp duûng voìa ma tráûn cheïo våïi caïc giaï trë riãng hoàûc säú âiãöu kiãûn cho træåïc. Noï coï caïch phán phäúi låïn cáúu truïc topo vaì âaûi säú R = SPRANDSYM(n, density, rcond, kind) laì mäüt xaïc âënh dæång. Nãúu kind = 1 thç R âæåüc phaït sinh bàòng pheïp quay mäüt ma tráûn cheïo xaïc âënh dæång. R coï âuïng säú âiãöu kiãûn mong muäún. Nãúu kind = 2 thç R laì täøng dëch chuyãøn caïc têch ngoaûi lai. R chè coï säú âiãöu kiãûn mong muäún nhæng cáúu truïc nhoí hån. Nãúu R = SPRANDSYM(S, density, rcond, 3), thç R coï cuìng cáúu truïc nhæ ma tráûn S vaì säú âiãöu kiãûn xáúp xè 1/rcond, âäúi säú density âæåüc boí qua SPDIAGS SPDIAGS Trêch ra vaì taûo måïi caïc ma tráûn daîi bàng vaì ma tráûn cheïo thæa SPDIAGS, laì täøng quaït hoïa haìm gàõn liãön "diag", xæí lyï 3 loaûi ma tráûn , caïc täø håüp khaïc nhau, cuîng nhæ nháûp vaì xuáút. A laì ma tráûn cåî mxn, thæåìng thæa (nhæng khäng cáön thiãút), våïi caïc pháön

Page 225: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 224

Phan Thanh Tao - 2004

tæí khaïc khäng, hoàûc chè âënh, caïc pháön tæí âàût trãn p âæåìng cheïo B laì ma tráûn min(m,n) haìng vaì p cäüt, thæång âáöy âuí (nhæng khäng cáön thiãút), coï caïc cäüt laì caïc âæåìng cheïo cuía A. d laì vectå âäü daìi p coï caïc thaình pháön nguyãn chè âënh caïc âæåìng cheïo trong A Mäüt caïch thä så, A, B vaì d quan hãû båíi for k = 1:p B(:,k) = diag(A,d(k)) end Bäún thao taïc khaïc nhau, phán biãût theo säú âäúi säú nháûp, coï thãø duìng våïi SPDIAGS laì: Láúy ra táút caí caïc âæåìng cheïo khaïc khäng: [B,d] = spdiags(A); Láúy ra âæåìng cheïo chè âënh: B = spdiags(A,d); Thay caïc âæåìng cheïo chè âënh: A = spdiags(B,d,A); Taûo mäüt ma tráûn thæa tæì caïc âæåìng cheïo cuía noï: A = spdiags(B,d,m,n); Quan hãû chênh xaïc trong A, B vaì d laì: if m >= n for k = 1:p for j = max(1,1+d(k)):min(n,m+d(k)) B(j,k) = A(j-d(k),j); end end if m < n for k = 1:p for i = max(1,1-d(k)):min(m,n-d(k)) B(i,k) = A(i,i+d(k)); end end end Vaìi pháön tæí cuía B, æïng våïi caïc vë trê “ bãn ngoaìi ” A, khäng xaïc âënh âæåüc bàòng caïc voìng làûp naìy. Chuïng khäng âæåüc tham chiãúu khi B laì âäúi säú nháûp vaì âæåüc dàût giaï trë 0 khi B laì âäúi säú xuáút. Vê duû, caïc lãûnh naìy phaït sinh mäüt biãøu hiãûn 3 âæåìng cheïo thæa cuía pheïp vi phán cáúp 2 cäø âiãøn taûi n âiãøm e = ones(n,1); A = spdiags([e -2*e e], -1:1, n, n) Lãûnh naìy âäøi ma tráûn A thaình ma tráûn kiãøm tra Wilkinson (xem WILKINSON(n)) A = spdiags(abs(-(n-1)/2:(n-1)/2)',0,A) Cuäúi cuìng, lãûnh naìy sæía laûi 3 âæåìng cheïo B = spdiags(A) Vê duû thæï hai khäng vuäng A = [ 11 0 13 0 0 22 0 24 0 0 33 0 41 0 0 44

Page 226: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 225

Phan Thanh Tao - 2004

0 52 0 0 0 0 63 0 0 0 0 74] coï m = 7, n = 4 vaì p = 3 Lãûnh [B,d] = spdiags(A) cho d = [-3 0 2]' vaì B = [ 41 11 0 52 22 0 63 33 13 74 44 24 ] Ngæåüc laûi, våïi B vaì d nhæ trãn thç biãøu thæïc spdiags(B,d,7,4) cho laûi A vãö giaï trë gäúc

Chuyãøn ma tráûn âáöy âuí thaình ma tráûn thæa

SPARSE Xáy dæûng ma tráûn thæa tæì caïc säú khaïc 0 vaì caïc chè säú S = SPARSE(...) laì haìm gàõn liãön phaït sinh caïc ma tráûn thuäüc låïp læu træî thæa cuía MATLAB. Haìm naìy coï thãø goüi våïi 1, 2, 3, 5 hoàûc 6 âäúi säú S = SPARSE(X) chuyãøn ma tráûn thæa hoàûc âáöy âuí sang daûng thæa bàòng caïch boí âi caïc pháön tæí 0 S = SPARSE(i,j,s,m,n,nzmax) duìng caïc doìng cuía [i,j,s] âãø phaït sinh mäüt ma tráûn thæa cåî mxn våïi khäng gian phán bäú cho nzmax pháön tæí khaïc 0. Hai vectå chè säú nguyãn, i vaì j, vaì vectå thæûc hoàûc phæïc, s, táút caí cuìng âäü daìi, nnz, laì säú pháön tæí khaïc 0 trong ma tráûn thæa kãút quaí. Coï mäüt säú caïch goüi âån giaín 6 âäúi säú naìy S = SPARSE(i,j,s,m,n) duìng nzmax = length(s). S = SPARSE(i,j,s) duìng m = max(i) vaì n = max(j). S = SPARSE(m,n) caïch tàõt cuía SPARSE([],[],[],m,n,0). Lãûnh naìy phaït sinh ma tráûn thæa cå baín cåî mxn gäöm táút caí caïc säú 0. Âäúi säú s vaì mäüt trong hai âäúi säú i vaì j coï thãø laì âaûi læåüng vä hæåïng, trong træåìng håüp naìy chuïng âæåüc bung ra âãø caí 3 âäúi säú âáöu coï cuìng âäü daìi. Vê duû, trêch ra vaì sau âoï raïp laûi mäüt ma tráûn thæa: [i,j,s] = find(S); [m,n] = size(S); S = sparse(i,j,s,m,n); Båíi váûy, nhæ caïc lãûnh naìy, nãúu doìng vaì cäüt cuäúi cuìng coï caïc pháön tæí khaïc 0: [i,j,s] = find(S); S = sparse(i,j,s); Táút caí caïc thao taïc gàõn liãön cuía MATLAB vãö säú hoüc, logic vaì vãö chè säú âãöu coï thãø aïp duûng cho caïc ma tráûn thæa, hoàûc cho caïc ma tráûn væìa thæa væìa âáöy âuí. Caïc thao taïc trãn ma tráûn thæa traí vãö ma tráûn thæa, âáöy âuí traí vãö âáöy âuí. Trong háöu hãút caïc træåìng håüp thç caïc thao taïc trãn caïc ma tráûn væìa thæa væìa âáöy âuí traí vãö âáöy âuí. Ngoaûi træì træåìng håüp coï âæa vaìo, kãút

Page 227: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 226

Phan Thanh Tao - 2004

quaí cuía caïc thao taïc träün thæa våïi âáöy âuí coï cáúu truïc thæa, nghéa laì A .* S êt nháút thæa nhæ S . Mäüt säú thao taïc, nhæ S >= 0, phaït sinh caïc ma tráûn thæa låïn ("Big Sparse", hay "BS" ) -- ma tráûn thuäüc täø chæïc læu træî thæa nhæng êt pháön tæí 0 FULL Chuyãøn ma tráûn thæa sang låïp læu træî âáöy âuí A = FULL(X) laì haìm gàõn liãön chuyãøn mäüt ma tráûn thæa sang cå cáúu læu træî âáöy âuí vaì cho ra mäüt ma tráûn âáöy âuí khäng thay âäøi FIND Tçm caïc chè säú cuía caïc pháön tæí khaïc 0 I = FIND(X) traí vãö chè säú cuía caïc pháön tæí khaïc 0 cuía vectå X Vê duû, I = FIND(A>100) , traí vãö caïc chè säú cuía caïc pháön tæí låìn hån 100 cuía A. Xem RELOP [I,J] = FIND(X) traí vãö caïc chè säú doìng vaì cäüt cuía caïc pháön tæí khaïc 0 trong ma tráûn X. Lãûnh naìy thæåìng duìng våïi caïc ma tráûn thæa [I,J,V] = FIND(X) cuîng traí vãö mäüt vectå cäüt gäöm caïc pháön tæí khaïc 0 cuía X. Læu yï ràòng find(X) vaì find(X~=0) seî cho ra cuìng I vaì J, nhæng haìm sau cho V våïi táút caí caïc säú 1 SPCONVERT SPCONVERT Chuyãøn daûng thæa måí räüng S = SPCONVERT(D) chuyãøn mäüt maíng (nnz hoàûc nnz+1)x (3 hoàûc 4) våïi caïc doìng chæïa [i,j,s] hoàûc [i,j,real(s(i,j)),imag(s(i,j))] sang ma tráûn thæa tæång æïng. Mäüt doìng báút kyì trong D coï daûng [m n 0] hoàûc [m n 0 0] coï thãø duìng âãø chè âiûnh kêch thæåïc cuía S. Nãúu D âaî thæa räöi thç khäng chuyãøn, vç váûy SPCONVERT coï thãø duìng sau khi D âæåüc naûp tæì tãûp MAT hoàûc tãûp ASCII

Page 228: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 227

Phan Thanh Tao - 2004

Laìm viãûc våïi caïc pháön tæí khaïc 0 cuía ma tráûn thæa

NNZ Säú pháön tæí khaïc 0 nz = NNZ(S) laì säú pháön tæí khaïc 0 trong S NONZEROS NONZEROS Caïc pháön tæí khaïc 0 NONZEROS(S) laì mäüt vectå cäüt âáöy âuí caïc pháön tæí khaïc 0 trong S. Haìm naìy cho s, nhæng khäng cho i vaì j nhæ [i,j,s] = find(S) NZMAX Täøng säú khäng gian læu træî caïc pháön tæí khaïc 0 Âäúi våïi ma tráûn thæa, NZMAX(S) laì säú vë trê læu træî phán bäú cho caïc pháön tæí khaïc 0 trong S. Våïi ma tráûn âáöy âuí, NZMAX(S) laì prod(size(S)). Trong caí hai træåìng håüp, nnz(S) <= nzmax(S) <= prod(size(S)) SPONES Thay thãú caïc pháön tæí khaïc 0 våïi caïc säú 1 R = SPONES(S) phaït sinh mäüt ma tráûn våïi cáúu truïc thæa giäúng S, nhæng våïi caïc säú 1 taûi vë trê khaïc 0 SPALLOC SPALLOC Phán bäú bäü nhåï cho caïc pháön tæí khaïc 0 s = SPALLOC(m,n,nzmax) taûo mäüt ma tráûn thæa cåî mxn táút caí caïc pháön tæí 0 våïi chäù träúng âãø læu nzmax pháön tæí khaïc 0. Vê duû: s = spalloc(n,n,3*n); for j = 1:n s(:,j) = (mäüt vectå cäüt thæa gäöm 3 pháön tæí khaïc 0); end ISSPARSE ISSPARSE Âuïng nãúu ma tráûn laì ma tráûn thæa ISSPARSE(S) bàòng 1 nãúu låïp læu træî cuía S laì thæa vaì ngæåüc laûi thç bàòng 0 SPFUN AÏp duûng mäüt haìm chè cho caïc pháön tæí khaïc 0 F = SPFUN('fun',S) æåïc læåüng haìm fun(s) trãn caïc pháön tæí khaïc 0 cuía S. Nghéa laì F = SPFUN('exp',S) coï cuìng máùu thæa nhæ S (træì træåìng håüp traìn dæåïi), ngæåüc laûi EXP(S) coï giaï trë 1 taûi nåi S coï giaï trë 0

Xem caïc ma tráûn thæa

SPY Træûc quan hoïa cáúu truïc thæa

Page 229: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 228

Phan Thanh Tao - 2004

SPY(S) veî máùu thæa cuía ma tráûn S báút kyì SPY(S,color) duìng maìu âaïnh dáúu chè âënh thay cho maìu vaìng SPY(S,marksize) duìng kêch thæåïc âaïnh dáúu chè âënh thay cho kêch thæåïc phuû thuäüc vaìo kêch thæåïc hçnh aính vaì kêch thæåïc ma tráûn SPY(S,color,marksize) vaì SPY(S,marksize,color) laì cho pheïp GPLOT Veî âäö thë theo “lyï thuyãút âäö thë ” GPLOT(A,xy) veî âäö thë chè âënh båíi A vaì xy. Mäüt âäö thë, G, gäöm mäütì táûp caïc nuït (âènh) âæåüc âaïnh säú tæì 1 âãún n, vaì mäüt táûp caïc cung, hoàûc caûnh, näúi caïc âènh laûi. Âãø veî âäö thë G, cáön 2 ma tráûn. Ma tráûn kãö, A, coï a(i,j) khaïc 0 nãúu vaì chè nãúu âènh i âæåüc näúi våïi âènh j. Maíng toüa âäü, xy, laì mäüt ma tráûn cåî nx2 våïi vë trê cho âènh i taûi doìng thæï i xy(i,:) = [x(i) y(i)] GPLOT(A,xy,lc) duìng kiãøu âæåìng vaì maìu thay cho ngáöm âënh laì 'r-'. Vê duû, lc = 'g:' . Xem PLOT [X,Y] = GPLOT(A,xy) traí vãö caïc vectå âaïnh dáúu NaN X vaì Y maì khäng veî. Caïc vectå naìy coï thãø duìng âãø phaït sinh âäö thë sau naìy nãúu muäún

Caïc thuáût toaïn sàõp xãúp laûi

COLMMD Báûc täúi thiãøu vãö cäüt p = COLMMD(S). Báûc täúi thiãøu vãö cäüt cuía S. Âäúi våïi mäüt ma tráûn khäng âäúi xæïng S, haìm naìy traí vãö mäüt cäüt hoaïn vë p âãø S(:,p) coï caïc nhán tæí LU thæa hån S SYMMMD Báûc âäúi xæïng täúi thiãøu p = SYMMMD(S), âäúi våïi mäüt ma tráûn xaïc âënh dæång âäúi xæïng S thç traí vãö mäüt hoaïn vë âãø S(p,p) coï nhán tæí Cholesky thæa hån S. Âäi khi SYMMMD cuîng laìm viãûc täút âäúi våïi caïc ma tráûn âäúi xæïng khäng xaïc âënh SYMRCM Âaío thæï tæû Cuthill-McKee p = SYMRCM(S) traí vãö mäüt hoaïn vë p âãø S(p,p) coï profile nhoí hån S. Haìm naìy sàõp træåïc täút cho viãûc taïch nhán tæí LU hoàûc Cholesky âäúi våïi caïc ma tráûn nháûn âæåüc tæì caïc baìi toaïn daìi vaì gáöy ("long, skinny"). Noï laìm viãûc cho caí hai loaûi S âäúi xæïng vaì khäng âäúi xæïng COLPERM COLPERM Bác caïc cäüt dæûa vaìo caïch âãúm caïc pháön tæí khaïc 0

Page 230: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 229

Phan Thanh Tao - 2004

p = COLPERM(S) phaït sinh mäüt hoaïn vë âãø sàõp laûi caïc cäüt cuía ma tráûn S thæa (hoàûc âáöy âuí) theo thæï tæû khäng tàng cuía viãûc âãúm caïc pháön tæí khaïc 0. Thæåìng sàõp træåïc viãûc taïch nhán tæí LU: lu(S(:,p)). Khäng phaíi täút nháút trong thæûc haình thäng thæåìng, nhæng tênh trãn maïy nhanh vaì thæûc hiãûn cäng viãûc khaï âeûp RANDPERM RANDPERM Vectå hoaïn vë ngáùu nhiãn RANDPERM(n) laì mäüt hoaïn vë ngáùu nhiãn cuía caïc säú nguyãn tæì 1 âãún n. Vê duû, RANDPERM(6) coï thãø laì [2 4 5 6 1 3]. Læu yï ràòng RANDPERM goüi haìm RAND vaì do âoï thay âäøi giaï trë khåíi taûo ngáùu nhiãn cuía haìm RAND DMPERM Taïch Dulmage-Mendelsohn cuía ma tráûn A p = DMPERM(A) traí vãö mäüt phuì håüp täúi âa; nãúu A coï haûng cäüt âáöy âuí thç A(p,:) vuäng våïi âæåìng cheïo khaïc 0 [p,q,r,s] = DMPERM(A) traí vãö caïc hoaïn vë âãø âàût A(p,q) vaìo daûng khäúi tam giaïc trãn: Âäúi våïi A vuäng haûng âáöy âuí, A(p,q) coï âæåìng cheïo khaïc 0 vaì thaình pháön Hall maûnh thæï i laì khäúi thæï i (bi,bi) cuía A(p,q), våïi bi = r(i):r(i+1)-1. Våïi A chæî nháût täøng quaït, thaình pháön Hall maûnh thæï i laì khäúi (r(i):r(i+1)-1, s(i):s(i+1)-1)

Chuáøn, säú âiãöu kiãûn, vaì haûng

NORMEST NORMEST Æåïc læåüng chuáøn 2 (2-norm) NORMEST(S) laì mäüt æåïc læåüng chuáøn-2 cuía ma tráûn S NORMEST(S,tol) duìng sai säú tæång âäúi tol thay cho 1.e-6 [nrm,cnt] = NORMEST(S) cuîng cho säú láön duìng làûp luîy thæìa CONDEST CONDEST Æåïc læåüng säú âiãöu kiãûn chuáøn-1. Caïch sæía âäøi cuía Higham tæì phæång phaïp cuía Hager [C, V] = CONDEST(A) tênh giåïi haûn dæåïi C cho säú âiãöu kiãûn chuáøn-1 cuía A, vaì vectå V âãø NORM(A*V)=NORM(A)*NORM(V)/C. V laì vectå xáúp xè 0 nãúu C låïn SPRANK Haûng cáúu truïc thæa r = SPRANK(A) haûng vãö cáúu truïc cuía ma tráûn thæa A. Coìn goüi laì luäöng cæûc âaûi, phán cäng cæûc âaûi, vaì kêch thæåïc cuía mäüt phuì håüp cæûc âaûi trong âäö thë phán âäi cuía A. Luän luän coï sprank(A) >=

Page 231: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 230

Phan Thanh Tao - 2004

rank(A), vaì trong säú hoüc sprank(A) == rank(sprandn(A)) våïi säú hoüc xaïc suáút

Caïc thao taïc trãn cáy

TREELAYOUT TREELAYOUT Trçnh baìy mäüt cáy hoàûc ræìng [x,y,h,s] = treelayout(parent,post) våïi parent laì vectå caïc nuït cha, våïi 0 cho gäúc. post laì hoaïn vë háûu tæû trãn caïc nuït cuía cáy (nãúu boí qua post thç tênh noï åí âáy). x vaì y laì caïc vectå gäöm caïc toüa âäü trong hçnh vuäng âån vë maì åí âoï trçnh baìy caïc nuït cuía cáy âãø taûo ra mäüt hçnh aính âeûp màõt. Caïc âäúi säú tuìy choün, h laì âäü cao cuía cáy vaì s laì säú nuït con cuía nuït gäúc TREEPLOT TREEPLOT Veî hçnh aính cuía mäüt cáy TREEPLOT(p,c,d) p laì vectå caïc âiãøm cha, våïi p(i) == 0 cho gäúc. c laì maìu vaì kyï tæû cho caïc nuït, hoàûc c='' âãø khäng veî nuït. d laì maìu vaì kyï tæû cho caïc caûnh, hoàûc d='' âãø khäng veî caûnh. c hoàûc d coï thãø boí qua, vaì caïc giaï trë ngáöm âënh håüp lyï âæåüc sæí duûng ETREE Cáy khæí cuía mäüt ma tráûn p = etree(A) traí vãö mäüt cáy khæí âäúi våïi mäüt ma tráûn vuäng âäúi xæïng coï tam giaïc trãn laì tam giaïc trãn cuía A. p(j) laì cha cuía cäüt j trãn cáy, hoàûc 0 nãúu j laì gäúc p = etree(A,'col') traí vãö cáy khæí cuía A'*A p = etree(A,'sym') giäúng p = etree(A) [p,q] = etree(...) cuîng traí vãö hoaïn vë háûu tæû q trãn cáy ETREEPLOT ETREEPLOT Veî mäüt cáy khæí etreeplot(A): Veî cáy khæí cuía A (hoàûc A+A', nãúu A khäng âäúi xæïng) etreeplot(A,c,d): Xem treeplot cho caïc tham säú tuìy choün c vaì d

Page 232: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 231

Phan Thanh Tao - 2004

Caïc thao taïc linh tinh

SYMBFACT SYMBFACT Phán têch nhán tæí Symbol count = SYMBFACT(A) traí vãö vectå gäöm säú âãúm doìng cuía nhán tæí tam giaïc trãn nhán tæí Cholesky cuía mäüt ma tráûn âäúi xæïng coï tam giaïc trãn laì tam giaïc trãn cuía A, giaí sæí boí qua trong tiãún trçnh phán têch thæìa säú. Phuûc vuû naìy nhanh hån chol(A) count = SYMBFACT(A,'col') phán têch A'*A (maì khäng taûo taûo noï mäüt caïch roî raìng) count = SYMBFACT(A,'sym') giäúng nhæ p = symbfact(A). Coï mäüt säú giaï trë traí vãö tuìy choün: [count,h,parent,post,R] = symbfact(...) cuîng traí vãö âäü cao cuía cáy khæí, chênh cáy khæí, mäüt hoaïn vë cuía cáy khæí, vaì ma tráûn 0-1 R coï cáúu truïc cuía chol(A) SPPARMS SPPARMS Âàût caïc tham säú cho caïc phuûc vuû ma tráûn thæa SPPARMS('key',value) âàût mäüt hoàûc nhiãöu tham säú "tunable" duìng cho caïc toaïn tæí phæång trçnh tuyãún tênh thæa, laì \ vaì /, vaì caïc sàõp xãúp báûc âäúi xæïng täúi thiãøu, COLMMD vaì SYMMMD SPPARMS, in ra mä taí caïc caìi âàût hiãûn thåìi. Nãúu khäng coï âäúi säú nháûp thç values = SPPARMS traí vãö mäüt vectå coï caïc thaình pháön cho trong caïc caìi âàût hiãûn thåìi [keys,values] = SPPARMS traí vãö vectå âoï, vaì cuîng traí vãö mäüt ma tráûn kyï tæû coï caïc doìng laì caïc tæì khoïa cho caïc tham säú SPPARMS(values), khäng coï âäúi säú xuáút, âàût táút caí caïc tham säú vaìo caïc giaï trë chè âënh båíi vectå âäúi säú value = SPPARMS('key') traí vãö caìi âàût hiãûn thåìi cuía mäüt tham säú SPPARMS('default') âàût táút caí caïc tham säú vãö caïc caìi âàût màûc âënh cuía noï SPPARMS('tight') âàût caïc tham säú báûc täúi thiãøu vãö caïc caìi âàût chàût cheî cuía chuïng, chuïng coï thãø âáùn âãún caïc báûc êt hån báûc thay thãú, nhæng laìm cho caïc haìm thæûc hiãûn nhiãöu láön hån. Caïc tham säú våïi caïc giaï trë ngáöm âënh vaì caïc giaï trë chàût cheî laì: tæì khoïa ngáöm âënh chàût values(1) 'spumoni' 0 values(2) 'thr_rel' 1.1 1.0 values(3) 'thr_abs' 1.0 0.0 values(4) 'exact_d' 0 1

Page 233: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 232

Phan Thanh Tao - 2004

values(5) 'supernd' 3 1 values(6) 'rreduce' 3 1 values(7) 'wh_frac' 0.5 0.5 values(8) 'autommd' 1 values(9) 'aug_rel' 0.001 values(10) 'aug_abs' 0 YÏ nghéa caïc tham säú laì: spumoni: Xuáút cháøn âoaïn caïc âiãöu khiãøn Sparse Monitor Flag; 0 cho khäng coï, 1 cho mäüt vaìi, 2 cho quaï nhiãöu thr_rel, thr_abs: Ngæåîng báûc täúi thiãøu laì thr_rel*mindegree + thr_abs exact_d: Khaïc 0 âãø duìng caïc báûc chênh xaïc trong báûc täúi thiãøu, 0 duìng cho caïc báûc xáúp xè supernd: If > 0, MMD caïc siãu nuït häùn håüp mäùi giaï trë supernd rreduce: If > 0, MMD thu goün doìng mäùi giaï trë rreduce wh_frac: Caïc doìng våïi density > wh_frac âæåüc boí qua trong COLMMD autommd: Khaïc 0 âãø duìng báûc täúi thiãøu våïi \ vaì / aug_rel, aug_abs: Tham säú tè lãû thàûng dæ cho caïc phæång trçnh gia säú laì aug_rel*max(max(abs(A))) + aug_abs. Vê duû, aug_rel = 0, aug_abs = 1 âàût mäüt ma tráûn âån vë khäng chia tè lãû vaìo khäúi (1,1) cuía ma tráûn gia säú SPAUGMENT SPAUGMENT Trçnh baìy baìi toaïn bçnh phæång täúi thiãøu nhæ mäüt hãû tuyãún tênh låïn S = SPAUGMENT(A,c) taûo ma tráûn báút âënh âäúi xæïng, thæa, vuäng S = [c*I A; A' 0].Ma tráûn naìy liãn quan våïi baìi toaïn bçnh phæång täúi thiãøu min norm(b - A*x) båíi r = b - A*x S * [r/c; x] = [b; 0]. Giaï trë täúi æu cuía nhán tæí tè lãû thàûng dæ c, bao gäöm min(svd(A)) vaì norm(r), thæåìng quaï täún nhiãöu pheïp tênh S = SPAUGMENT(A), khäng chè âënh giaï trë cuía c, duìng giaï trë màûc âënh cuía SPPARMS, thæåìng laì max(max(abs(A)))/1000. Ma tráûn gia säú âæåüc duìng tæû âäüng båíi viãûc giaíi phæång trçnh tuyãún tênh, \ vaì /, cho caïc baìi toaïn khäng vuäng

Page 234: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 233

Phan Thanh Tao - 2004

SYMBOLIC TOOLBOX

ALLVALUES Tçm táút caí caïc giaï trë cuía biãøu thæïc RootOf ALLVALUES(S), våïi S laì mäüt biãøu thæïc symbolic hoàûc mäüt vectå cäüt chæïa biãøu thæïc con 'RootOf(EXPR)', tçm nghiãûm cuía EXPR räöi tênh S. Kãút quaí laì mäüt vectå chæïa táút caí caïc giaï trë coï âæåüc cuía S Vê duû: p = 'x^5 + x^4 + 2'; s = solve(p); allvalues(s) AR2SM Âäøi maíng Maple sang ma tráûn symbolic A = AR2SM(M) âäøi caïc daûng cuía MATRIX([[...],[...]]) hoàûc VECTOR([...]) cho ra båíi caïc haìm âaûi säú tuyãún tênh cuía Maple sang ma tráûn symbolic CHARPOLY Âa thæïc âàûc træng symbolic CHARPOLY(A) tênh âa thæïc âàûc træng cuía ma tráûn A. Kãút quaí laì mäüt âa thæïc symbolic theo biãún 'x' CHARPOLY(A,'v') duìng 'v' thay cho 'x' Træì sai säú laìm troìn, charpoly(A) nhæ poly2sym(poly(A)) vaì poly(A) nhæ sym2poly(charpoly(A)) Vê duû: charpoly(gallery(3)) COLLECT Táûp håüp caïc hãû säú COLLECT(S) xem mäùi pháön tæí cuía S nhæ mäüt âa thæïc biãún symbol cuía S. Nãúu biãún symbol cuía S laì 'x', thç COLLECT(S) táûp håüp táút caí caïc hãû säú våïi cuìng muî cuía 'x' COLLECT(S,'v') láúy 'v' laìm biãún symbolic trong mäùi pháön tæí cuía S COMPOSE Haìm têch COMPOSE(f,g), våïi f vaì g laì caïc biãøu thæïc symbolic biãøu hiãûn caïc haìm, goüi laì f(y) vaì g(x), thç traí vãö mäüt biãøu thæïc symbolic biãøu hiãûn haìm f(g(x)) COMPOSE(f,g,'u') duìng biãún 'u' cho caí f vaì g. f vaì g coï daûng sau: f = f(u,a1,a2,...); g = g(u,b1,b2,...) COMPOSE(f,g,'u','v') duìng biãún 'u' cho f vaì vaì 'v' cho g. f vaì g coï daûng sau: f = f(u,a1,a2,...); g = g(v,b1,b2,...) Vê duû: compose 1/(1+x^2) sin(x) laì 1/(1+sin(x)^2)

Page 235: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 234

Phan Thanh Tao - 2004

COMSTACK Sàõp xãúp caïc dáúu pháøy trong mäüt ma tráûn symbolic A = comstack(A) cheìn caïc khoaóng träúng trong ma tráûn symbolic A âãø táút caí caïc dáúu pháøy cuía noï taïch doìng COSINT Haìm têch phán cosin COSINT(x) = gamma+ln(i*x)-i*pi/2+int((cos(t)-1)/t, t=0..x) DETERM Âënh thæïc ma tráûn symbolic DETERM(A) tênh âënh thæïc symbolic cuía ma tráûn A, våïi A laì mäüt ma tráûn symbolic hoàûc ma tráûn säú DETERM(VPA(A)) duìng chênh xaïc säú hoüc Vê duû: determ(sym(5,5,'1/(i+j-t)')) DIGITS Âàût säú chæî säú cuía Maple Âäü chênh xaïc caïc pheïp tênh säú cuía Mapleâæåüc xaïc âënh båíi caïc chæî säú Chênh DIGITS hiãøn thë säú chæî säú hiãûn thåìi DIGITS(D) Âàût säú chæî sävaìo D cho caïc pheïp tênh tiãúp sau D = DIGITS traí vãö säú chæî säú hiãûn thåìi DSOLVE Giaíi hãû phæång trçnh vi phán thæåìng symbolic DSOLVE('eqn1','eqn2', ..) cháúp nháûn âãún 12 âäúi säú nháûp, laì caïc phæång trçnh symbolic biãøu hiãûn caïc phæång trçnh vi phán thæåìng vaì caïc âiãöu kiãûn âáöu. Caïc phæång trçnh hoàûc caïc âiãöu kiãûn âáöu coï thãø nhoïm laûi, caïhc nhau dáúu pháøy trong mäüt âäúi säú nháûp. Biãún âäüc láûp thæåìng duìng 'x'. Coï thãø âäøi thaình 't' bàòng caïch duìng 'x' laì biãún phuû thuäüc, hay duìng 't' thay cho 'x' laì biãún tæû do trong mäüt phæång trçnh. Biãún âäüc láûp coï thãø thay âäøi tæì 'x' sang kyï tæû thæåìng naìo âoï bàòng caïch âæa vaìo kyï tæû âoï nhæ mäüt âäúi säú cuäúi cuìng. Kyï tæû 'D' biãøu hiãûn vi phán tæång æïng biãún âäüc láûp, nghéa laì thæåìng duìng d/dx. Mäüt chæî D coï mäüt chæî säú keìm theo biãøu hiãûn vi phán làûp, nghéa laì D2 laì d^2/dx^2. Caïc kyï tæû báút kyì theo sau ngay caïc pheïp toaïn vi phán naìy âãø láúy biãún phuû thuäüc, nghéa laì D3y biãøu hiãûn âaûo haìm báûc ba cuía y(x) hoàûc y(t). Caïc âiãöu kiãûn âáöu âæåüc chè âënh båíi caïc phæång trçnh nhæ 'y(a)=b' hoàûc 'Dy(a) = b, åí âáy y laì mäüt biãún phuû thuäüc vaì a, b laì caïc hàòng. Nãúu säú caïc âiãöu kiãûn âáöu êt hån säú biãún phuû thuäüc thç caïc nghiãûm kãút quaí nháûn âæåüc caïc hàòng tuìy yï C1, C2, ... Nãúu âäúi säú xuáút êt hån säú biãún phuû thuäüc thç DSOLVE âån giaín traí vãö mäüt danh saïch caïc låìi giaíi [Y1,Y2, ...] = DSOLVE( .. ) traí vãö caïc nghiãûm, theo thæï tæû alphabet, trong caïc âäúi säú xuáút.

Page 236: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 235

Phan Thanh Tao - 2004

Våïi hãû phi tuyãún , nãúu nghiãûm khäng duy nháút thç caïc giaï trë xuáút coï thãø laì caïc vectå symbolic Vê duû: Phæång trçnh vi phán báûc 1 dsolve('Dy = a*y') dsolve('Df = f + sin(t)') y = dsolve('(Dy)^2 + y^2 = 1','s') Phæång trçnh vi phán báûc 1 våïi 1 âiãöu kiãûn âáöu dsolve('Dy = a*y', 'y(0) = b') dsolve('Df = f + sin(t)', 'f(pi/2) = 0') y = dsolve('(Dy)^2 + y^2 = 1', 'y(0) = 0', 's') Phæång trçnh vi phán báûc 2 dsolve('D2y = -a^2*y') Phæång trçnh vi phán báûc 2 våïi caïc âiãöu kiãûn biãn dsolve('D2y = -a^2*y', 'y(0) = 1, Dy(pi/a) = 0') Hai phæång trçnh vi phán báûc 1 [x,y] = dsolve('Dx = y', 'Dy = -x') [f,g] = dsolve('Df = 3*f+4*g', 'Dg = -4*f+3*g') Hai phæång trçnh vi phán báûc 1 våïi caïc âiãöu kiãûn âáöu [x,y] = dsolve('Dx = y', 'Dy = -x', 'x(0)=0', 'y(0)=1') [f,g] = dsolve('Df = 3*f+4*g, Dg = -4*f+3*g', 'f(0)=0, g(0)=1') Ba phæång trçnh vi phán báûc 1 våïi caïc âiãöu kiãûn âáöu [u,v,w] = dsolve('Du=v, Dv=w, Dw=-u','u(0)=0, v(0)=0, w(0)=1') Cuìng baìi toaïn laì mäüt phæång trçnh vi phán báûc 3 w = dsolve('D3w = -w','w(0)=1, Dw(0)=0, D2w(0)=0') EIGENSYS Ma tráûn riãng vaì vectå riãng symbolic EIGENSYS(A) tênh caïc giaï trë riãng symbolic cuía ma tráûn A EIGENSYS(VPA(A)) tênh caïc giaï trë riãng säú bàòng caïch duìng säú hoüc [V,E] = EIGENSYS(A) tênh mäüt vectå symbolic E chæïa caïc giaï trë riãng vaì mäüt ma tráûn symbolic V chæïa caïc vectå riãng cuía mäüt ma tráûn säú hoàûc symbolic A. Caïc vectå riãng coï thãø âæåüc biãøu diãùn trong caïc pháön tæí cuía E(n), åí âáy n laì säú nguyãn dæång ãø âaïnh chè säú cho vectå giaï trë riãng E [V,E] = EIGENSYS(VPA(A)) tênh caïc giaï trë riãng vaì caïc vectå riãng bàòng säú, bàòng caïch duìng säú hoüc Vê duû: eigensys(rosser) [v,e] = eigensys(sym('[a,b,c; b,c,a; c,a,b]'))

Page 237: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 236

Phan Thanh Tao - 2004

EXPAND Khai triãøn symbolic EXPAND (S) khai triãøn mäùi pháön tæí cuía S, S laì ma tráûn symbolic EXPAND khai triãøn chuí yãúu laì caïc âa thæïc. Noï cuîng khai triãøn mäüt säú caïc haìm toaïn hoüc, nhæ haìm læåüng giaïc, haìm muî vaì haìm loga EZPLOT Duìng âãø veî âäö thë haìm EZPLOT(f) veî âäö thë cuía f(x), våïi f laì mäüt biãøu thæïc symbolic biãøu hiãûn mäüt biãøu thæïc toaïn boa gäöm mäüt biãún symbolic, goüi laì 'x'. Miãön giaï trë cuía truûc x trong khoaíng -2*pi vaì 2*pi EZPLOT(f,[xmin xmax]) duìng âãø chè âënh miãön giaï trë cuía x thay cho ngáöm âënh laì [-2*pi, 2*pi] EZPLOT(f,[xmin xmax],fig) duìng hçnh veî chè âënh thay cho hçnh aính hiãûn thåìi Vê duû: ezplot('erf(x)') ezplot erf(x) ezplot('tan(sin(x))-sin(tan(x))') ezplot tan(sin(x))-sin(tan(x)) FACTOR Thæìa säú symbolic FACTOR(S), nãúu S laì mäüt ma tráûn symbolic matrix âàût thæìa säú mäùi pháön tæí cuía S FACTOR(N), nãúu N laì mäüt ma tráûn nguyãn thç thênh thæìa säú nguyãn täú cuía mäùi pháön tæí cuía N FINDCOMMA Tçm caïc dáúu pháøy khäng coï bãn trong càûp ngoàûc âån FINDCOMMA(S) laì vectå caïc chè säú cuía caïc dáúu pháøy (',') trong chuäùi S maì khäng åí trong caïc càûp ngoàûc âån phuì håüp k = findcomma('fun1(x), fun2(x,y), fun3(x), fun4(x,y), fun5') traí vãö k = [8 19 28 39] Khäng âãúm caïc càûp ngoàûc âån trong [16 36]

Page 238: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 237

Phan Thanh Tao - 2004

FINVERSE Haìm nghëch âaío g = FINVERSE(f) tra vãö haìm ngæåüc cuía f. f laì mäüt biãøu thæïc symbolic biãøu hiãûn mäüt haìm mäüt biãún, goüi laì 'x'. Thç g laì mooüt biãøu thæïc symbolic thoía maîn g(f(x)) = x g = FINVERSE(f,'v') duìng biãún symbolic 'v' laì biãún âäüc láûp. Thç g laì mooüt biãøu thæïc symbolic thoía maîn g(f(v)) = v.. Duìng daûng naìy khi f chæïa nhiãöu hån mäüt biãún symbolic Vê duû: finverse('1/tan(x)') laì 'arctan(1/x)' FOURIER Biãún âäøi têch phán Fourier F = FOURIER(f) laì biãún âäøi Fourier cuía biãøu thæïc symbolic f, F(w) = int(f(t)*exp(-i*w*t),'t',-inf,inf) F = FOURIER(f,'v') laì haìm cuía 'v' thay cho 'w' F = FOURIER(f,'v','x') giaí thiãút f laì haìm cuía 'x' thay cho 't' F = FOURIER, khäng âäúi säú, biãún âäøi kãút quaí træåïc Vê duû: fourier exp(-t)*Heaviside(t) 1/(1+i*w) fourier exp(-t^2) pi^(1/2)*exp(-1/4*w^2) FUNTOOL Tênh haìm FUNTOOL laì mäüt maïy tênh tæång taïc âäö hoüa âãø thæûc hiãûn cho caïc haìm mäüt biãún . Coï hai haìm hiãøn thë laì f(x) vaì g(x). Kãút quaí cuía háöu hãút caïc tênh toaïn âãöu thay thãú f(x). Caïc âiãöu khiãøn coï nhaîn 'f = ' vaì 'g = ' coï thãø sæía âäøi âãø coï thãø caìi mäüt haìm måïi. Âiãöu khiãøn coï nhaîn 'x = ' coï thay âäøi miãön xaïc âënh. . Âiãöu khiãøn coï nhaîn 'a = ' coï thãø thay âäøi âãø chè âënh mäüt giaï trë måïi cho tham säú. Caïc biãún coï tãn f, g, x vaì a täön taûi trong vuìng laìm viãûc cuía MATLAB khi FUNTOOL âæåüc goüi seî âæåüc duìng thay cho caïc giaï trë màûc âënh. Doìng âènh cuía nuït âiãöu khiãøn laì caïc pheïp toaïn âån haûng vãö haìm, chè coï f(x). Caïc pheïp toaïn naìy laì: D f - Vi phán symbolic cuía f(x) I f - Têch phán symbolic cuía f(x) Simp f - Âån giaín hoïa biãøu thæïc symbolic nãúu coï thãø Num f - Láúy tæí säú cuía mäüt biãøu thæïc hæîu tè Den f - Láúy máùu säú cuía mäüt biãøu thæïc hæîu tè 1/f - Thay f(x) båíi 1/f(x). finv - Thay f(x) båíi haìm ngæåüc cuía noï

Page 239: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 238

Phan Thanh Tao - 2004

Caïc pheïp toaïn I f vaì finv coï thãø tháút baûi nãúu caïc biãøu thæïc symbolic tæång æïng khäng thuäüc daûng âoïng. Doìng thæï hai cuía caïc nuït dëch vaì chia truûc f(x) theo tham säú 'a' Caïc pheïp toaïn laì: f + a - Thay f(x) båíi f(x) + a f - a - Thay f(x) båíi f(x) - a f * a - Thay f(x) båíi f(x) * a f / a - Thay f(x) båíi f(x) / a f ^ a - Thay f(x) båíi f(x) ^ a f(x+a) - Thay f(x) båíi f(x + a) f(x*a) - Thay f(x) båíi f(x * a) Doìng thæï ba cuía caïc nuït laì caïc pheïp toaïn nhë haûng tênh trãn caí hai f(x) vaì g(x). Caïc pheïp toaïn laì: f + g - Thay f(x) båíi f(x) + g(x) f - g - Thay f(x) båíi f(x) - g(x) f * g - Thay f(x) båíi f(x) * g(x) f / g - Thay f(x) båíi f(x) / g(x) f(g) - Thay f(x) båíi f(g(x)) g = f - Thay g(x) båíi f(x) swap - Âäøi f(x) vaì g(x) Ba nuït âáöu trãn doìng thæï tæ quaín lyï mäüt danh saïch caïc haìm. Nuït Insert âàût haìm âang kêch hoaût vaìo danh saïch. Nuït Cycle cuäün qua danh saïch haìm. Nuït Delete xoïa haìm kêch hoaût ra khoíi danh saïch. Danh saïch caïc haìm coï tãn fxlist. Ngáöm âënh fxlist chæïa mäüt säú haìm âaïng quan tám Nuït Reset âàût f, g, x, a vaì fllaìt vaìo caïc giaï trë âáöu. Nuït Help in ra vàn baín tråü giuïp naìy Nuït Demo chayû máùu Nuït Close âoïng caí ba cæía säø HORNER Biãøu hiãûn âa thæïc daûng Horner HORNER(P) biãún âäøi âa thæïc symoblic, P, sang biãøu hiãûn daûng Horner cuía noï Vê duû: Nãúu p = 'x^3-6*x^2+11*x-6' thç horner(p) laì 'x*(x*(x-6)+11)-6' INT Têch phán INT(S) laì têch phán báút âënh cuía S tæång æïng våïi biãún symbolic cuía noï INT(S,'v') laì têch phán báút âënh cuía S tæång æïng våïi biãún v INT, khäng tham säú, laì têch phán báút âënh cuía biãøu thæïc træåïc âoï tæång æïng våïi biãún symbolic cuía noï INT(S,a,b) laì têch phán xaïct âënh cuía S tæång æïng våïi biãún symbolic cuía noï tæì a âãún b INT(S,'v',a,b) laì têch phán xaïct âënh cuía S tæång æïng våïi biãún v tæì a âãún b Vê duû: int('1/(1+x^2)') laì arctan(x) .

Page 240: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 239

Phan Thanh Tao - 2004

INVERSE Nghëch âaío ma tráûn symbolic INVERSE(A) tênh nghëch âaío symbolic cuía ma tráûn A, våïi A laì mäüt ma tráûn symbolic hoàûc ma tráûn säú INVERSE(VPA(A)) duìng âäü chênh xaïc säú hoüc thay âäøi Vê duû: inverse(sym(5,5,'1/(i+j-t)')) INVFOURIER Biãún âäøi têch phán nghich âaío Fourier f = INVFOURIER(F) laì biãún âäøi têch phán nghich âaío Fourier cuía biãøu thæïc F, f(t) = 1/(2*pi)*int(F(w)*exp(i*w*t),'w',-inf,inf) f = INVFOURIER(F,'x') laì haìm cuía 'x' thay cho 't' f = INVFOURIER(F,'x','v') giat thiãút F laì haìm cuía 'v' thay cho 'w' f = INVFOURIER, khäng âäúi säú nháûp, biãún âäøi kãút quaí træåïc Vê duû: invfourier exp(-w^2) 1/2/pi^(1/2)*exp(-1/4*t^2) invfourier 1/(w-i) i*exp(-t)*Heaviside(t) INVLAPLACE Biãún âäøi nghëch âaío Laplace f = INVLAPLACE(F) laì biãún âäøi nghëch âaío Laplace cuía biãøu thæïc symbolic F, f(t) = int(F(s)*exp(s*t),'s',0,inf) f = INVLAPLACE(F,'x') laì haìm cuía 'x' thay cho 't' f = INVLAPLACE(F,'x','v') giaí thiãút F laì haìm cuía 'v' thay cho 's' f = INVLAPLACE, khäng âäúi säú nháûp, biãún âäøi kãút quaí træåïc Vê duû: invlaplace 1/(s-1) exp(t) invlaplace('(2*s^2+2+s^3)/s^3/(s^2+1)') t^2+sin(t) invlaplace('t^(-5/2)','x') 4/3/pi^(1/2)*x^(3/2) invlaplace('laplace(f(t))') f(t) INVZTRANS Biãún âäøi nghëch âaío Z f = INVZTRANS(F) laì biãún âäøi nghëch âaío Z cuía biãøu thæïc symbolic F, f(n) = 1/(2*pi*i)*(mäüt têch phán âæåìng mæïc phæïc cuía F(z)*z^(n-1) dz) f = INVZTRANS(F,'x') laì haìm cuía 'x' thay cho 'n' f = INVZTRANS(F,'x','v') giaí thiãút F laì haìm cuía 'v' thay cho 'z' f = INVZTRANS, khäng âäúi säú nháûp, biãún âäøi kãút quaí træåïc

Page 241: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 240

Phan Thanh Tao - 2004

Vê duû: invztrans z/(z-1) 1 invztrans z/(z-a) a^n invztrans('exp(x/z)','k','z') x^k/k! invztrans(ztrans('f(n)')) f(n) JACOBIAN Ma tráûn Jacobian JACOBIAN(f,v) tênh Jacobian cuía âaûi læåüng vä hæåïng hoàûc vectå f æïng våïi vectå v. Pháön tæí thæï (i,j) cuía kãút quaí laì df(i)/dv(j). Læu yï ràòng khi f laì âaûi læåüng vä hæåïng thç Jacobian cuía f laì f Vê duû: jacobian(sym('x*y*z; y; x+z'),sym('x,y,z')) jacobian('u*exp(v)',sym('u,v')) JORDAN Daûng Jordan Canonic JORDAN(A) tênh Daûng Jordan Canonical/Daûng chuáøn cuía ma tráûn A. Ma tráûn phaíi âæåüc biãút chênh xaïc, vç váûy caïc pháön tæí phaíi nguyãn hoàûc phán säú cuía caïc säú nguyãn nhoí (hæîu tè). Mäüt läùi báút kyì trong ma tráûn nháûp coï thãø laìm thay âäøi hoaìn toaìn JCF cuía noï [V,J] = JORDAN(A) cuîng tênh pheïp biãún âäùi tæång tæû, V, sao cho V\A*V = J. Caïc cäüt cuía v laì caïc vectå riãng täøng quaït Vê duû: [V,J] = jordan(gallery(5)) LAMBERTW Haìm W cuía Lambert w = lambertw(x) âæåüc giaíi thaình w*exp(w) = x LAPLACE Biãún âäøi Laplace F = LAPLACE(f) laì biãún âäøi Laplace cuía biãøu thæïc symbolic F, F(s) = int(f(t)*exp(-s*t),'t',0,inf) F = LAPLACE(f,'v') laì haìm cuía 'x' thay cho 's' F = LAPLACE(f,'v','x') giaí thiãút F laì haìm cuía 'v' thay cho 't' F = LAPLACE, , khäng âäúi säú nháûp, biãún âäøi kãút quaí træåïc Vê duû: laplace exp(t) 1/(s-1) laplace t^2+sin(t) (2*s^2+2+s^3)/s^3/(s^2+1) laplace('y^(3/2)','z') 3/4*pi^(1/2)/z^(5/2) laplace(diff('F(t)')) laplace(F(t),t,s)*s-F(0) LATEX Biãøu hiãûn LaTeX cuía giaï trë xuáút symbolic LATEX(S) in biãøu hiãûn LaTeX cuía S

Page 242: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 241

Phan Thanh Tao - 2004

LATEX(S,'filename') cuîng in noï sang tãûp chè âënh Vê duû: r = '(1+2*x+3*x^2)/(4+5*x+6*x^2)' latex(r) {\frac {1+2\,x+3\,x^{2}}{4+5\,x+6\,x^{2}}} H = hilb(3); latex(H,'hilb.tex') \left [\begin {array}{ccc} 1&1/2&1/3\\\noalign{\medskip}1/2&1/3&1/4 \\\noalign{\medskip}1/3&1/4&1/5\end {array}\right ] LINSOLVE Giaíi hãû phæång trçnh tuyãún tênh X = LINSOLVE(A,B), våïi ma tráûn A, giaíi A*X = B. Mäüt thäng baïo khuyãún caïo âæåüc in ra nãúu ma tráûn A suy biãún [X,Z] = LINSOLVE(A,B) cuîng tênh Z, mäüt cå såí cho khäng gian khäng cuía A. Låìi giaíi täøng quaït cho hãû tuyãún tênh laì X + Z*p, våïi p laì mäüt vectå (hoàûc ma tráûn) caïc tham säú tæû do MAPLE Truy cáûp haût nhán Maple MAPLE('lãûnh') gæíi lãûnh cho haût nhán Maple vaì traí vãö kãút quaí laì mäüt biãøu thæïc symbolic. Mäüt dáúu cháúm pháøy våïi cuï phaïp Maple âæåüc näúi thãm vaìo cáu lãûnh nãúu cáön MAPLE('function',ARG1,ARG2,..,) cháúp nháûn tãn haìm Maple trong nhaïy âån vaì lãn âãún 10 âäúi säú. Caïc âäúi säú âæåüc chuyãøn sang caïc biãøu thæïc symbolic nãúu cáön, räöi haìm chè âënh âæåüc goüi våïi caïc âäúi säú âaî cho. Kãút quaí traí vãö trong mäüt biãøu thæïc symbolic [RESULT,STATUS] = MAPLE(...) traí vãö traûng thaïi khuyãún-caïo/läùi. Khi lãûnh âæåüc thæûc hiãûn thaình cäng thç RESULT laì kãút quaí vaì STATUS = 0. Nãúu tháút baûi thç RESULT laì mäüt khuyãún-caïo/läùi tæång æïng, vaì STATUS laì mäüt säú nguyãn dæång MAPLE('traceon') taûo ra daîy lãûnh Maple tuáön tæû vaì kãút quaí âæåüc in ra MAPLE('traceoff') tàõt viãûc naìy

Page 243: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 242

Phan Thanh Tao - 2004

MAPLEMEX Tãûp Mex-file giao diãûn våïi Maple Thäng thæåìng, haìm naìy âæåüc goüi båíi M-file cuía "maple". Noï thæåìng khäng goüi træûc tiãúp tæì doìng lãûnh [RESULT,STATUS] = MAPLEMEX(STATEMENT) gæíi cáu lãûnh âaî cho vaìo haût nhán OEM cuía Maple, noï cho mäüt kãút quía vaì mäüt biãøu hiãûn traûng thaïi. Mäüt âäúi säú nháûp læûa choün thæï hai âãø âaïnh dáúu âiãöu kiãûn âáöu hoàûc in ra træûc tiãúp. Haìm naìy âæåüc viãút bàòng C vaì biãn dëch sang mäüt tãûp Mex-file. Kãút quaí laì mäüt tãûp våïi tãn daûng "maplemex.mexx" , "mexx" laì tãn måí räüng. Nãúu khäng coï tãûp thç tãûp M-file naìy seî âæåüc thæûc hiãûn vaì kãút quaí laì mäüt thäng baïo läùi MAPLEINIT Khåíi taûo MAPLE MAPLEINIT âæåüc goüi båíi MAPLEMEX âãø khåíi taûo haût nhán Maple MAPLEINIT xaïc âënh âæåìng dáùn chè thæ muûc chæïa thæ viãûn Maple, naûp goïi haìng âaûi säú tuyãún tênh, khåíi taûo caïc chæî säú, thiãút láûp mäüt säú pham vi. Tãûp M-file naìy, "symbolic/mapleinit.m", coï thãø âæåüc sæía âäøi âãø truyñ cáp Maple V, Release 2, Thæ viãûn báút kyì âáu coï thãø âæåüc MFUN Æåïc læåüng säú cuía mäüt haìm Maple MFUN('fun',p1,p2,p3,p4), 'fun' laì tãn mäüt haìm Maple vaì p1, p2, p3 vaì p4 giaï trë säú æïng våïi caïc tham säú cuía haìm. Tham säú cuäúi cuìng coï thãø laì mäüt ma tráûn. Táút caí caïc tham säú khaïc phaíi âæåüc chè âënh kiãøu båíi haìm cuía Maple. MFUN æåïc læåüng säú haìm 'fun' våïi caïc tham säú chè âënh vaì traí vãö gaïi trë säú cuía MATLAB. Moüi suy biãún trong 'fun' âãöu traí vãö NaN Vê duû: x = 0:0.1:5.0; y = mfun('FresnelC',x) MFUNLIST Caïc haìm âàûc biãût cuía MFUN Caïc haìm âàûc biãût âæåüc liãût kã theo thæï tæû alphabet. n biãøu hiãûn âäúi säú nguyãn, x biãøu hiãûn âäúi säú thæûc, vaì z biãøu hiãûn âäúi säú phæïc. Âãø biãút thãm chi tiãt caïc mä taí cuía caïc haìm, kãø caí caïc haûn chãú vãö âäúi säú, thç xem taìi liãûu tham khaío hoàûc duìng MHELP bernoulli n Caïc säú Bernoulli bernoulli n,z Caïc âa thæïc Bernoulli BesselI x1,x Haìm Bessel loaûi 1 BesselJ x1,x Haìm Bessel loaûi1

Page 244: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 243

Phan Thanh Tao - 2004

BesselK x1,x Haìm Bessel loaûi 2 BesselY x1,x Haìm Bessel loaûi 2 Beta z1,z2 Haìm Beta binomial x1,x2 Caïc hãû säú nhë thæïc LegendreKc x Têch phán Elliptic âáöy âuí loaûi 1 LegendreEc x Têch phán Elliptic âáöy âuí loaûi 2 LegendrePic x1,x Têch phán Elliptic âáöy âuí loaûi 3 LegendreKc1 x LegendreKc duìng mäâun buì LegendreEc1 x LegendreEc duìng mäâun buì LegendrePic1 x1,x LegendrePic duìng mäâun buì erfc z Haìm sai säú buì erfc n,z Têch phán làûp cuía haìm sai säú buì Ci z Têch phán Cosin dawson x Têch phán Dawson Psi z Haìm Digamma dilog x Têch phán Dilogarithm erf z Haìm sai säú euler n Caïc säú Euler euler n,z Caïc âa thæïc Euler Ei x Têch phán muî e Ei n,z Têch phán muî e FresnelC x Têch phán Cosin Fresnel FresnelS x Têch phán Sin Fresnel GAMMA z Haìm Gamma harmonic n Haìm Harmonic Chi z Têch phán Cosin Hyperbol Shi z Têch phán Sin Hyperbol hypergeom X1,X2 Haìm Hypergeometric (täøng quaït) LegendreF x,x1 Têch phán Elliptic chæa hoaìn thaình loaûi 1 LegendreE x,x1 Têch phán Elliptic chæa hoaìn thaình loaûi 2 LegendrePi x,x2,x1 Têch phán Elliptic chæa hoaìn thaình loaûi 3 GAMMA z1,z2 Haìm Gamma chæa hoaìn thaình W z Haìm W cuía Lambert W n,z Haìm W cuía Lambert lnGAMMA z Logarit cuía haìm Gamma Li x Têch phán Logarit Psi n,z Haìm Polygamma

Page 245: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 244

Phan Thanh Tao - 2004

Ssi z Têch phán dëch chuyãøn Si z Têch phán Sin Zeta x Haìm Zeta (Riemann) Zeta n,x Haìm Zeta (Riemann) Zeta n,x,x1 Haìm Zeta (Riemann) Caïc âa thæïc træûc giao (chè cho Symbolic Math Toolbox måí räüng) T n,x Chebyshev loaûi 1 U n,x Chebyshev loaûi 2 G n,x1,x Gegenbauer H n,x Hermite P n,x1,x2,x Jacobi L n,x Laguerre L n,x1,x Laguerre täøng quaït P n,x Legendre MHELP Tråü giuïp cuía Maple MHELP topic in ra vàn baín tråü giuïp cuía Maple vãö váún âãö topic MHELP('topic') giäúng lãûnh trãn MPA Lãûnh gaïn cuía Maple MPA('v','expr') gaïn expr cho biãún symbolic v trong vuìng laìm viãûc cuía Maple. expr coï thãø laì mäüt biãún symbolic, mäüt biãøu thæïc symbolic, hoàûc mäüt giaï trë säú. Daûng lãûnh thæåìng coï êch. Trong træåìng håüp naìy, coï 3 daûng lãûnh khaïc nhau: mpa v = expr mpa v := expr mpa v expr Ba daûng naìy chè håüp lãûn khi daûng lãûnh täøng quaït håüp lãû, våïi ngoaûi lãû cuía lãûnh gaïn. Âãø láúy näüi dung cuía v tæì vuìng laìm viãûc cuía Maple, duìng caïc lãûnh sau: v = maple('v') v = maple('print(v)') Vê duû: mpa a = 1 mpa b = sqrt(1/2) mpa s = (a+b)/2 mpa('P',pascal(3)) mpa R = evalm(inverse(P-s*eye)) maple print(R)

Page 246: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 245

Phan Thanh Tao - 2004

NULLSPACE Cå såí cuía khäng gian khäng Caïc cäüt cuía Z = NULLSPACE(A) thaình mäüt cå såí cuía khäng gian khäng cuía A SYMSIZE(Z,2) säú khuyãút (chiãöu) cuía A. SYMMUL(A,Z) =0. Nãúu A coï haûng âáöy âuí thç Z räùng NUMDEN Tæí säú vaì máùu säú cuía mäüt symbolic [N,D] = NUMDEN(A) chuyãøn mäùi pháön tæí cuía A sang daûng phán säú, våïi tæí vaì máùu laì caïc âa thæïc nguyãn täú cuìng nhau våïi caïc hãû säú nguyãn Vê duû: [n,d] = numden(4/5) traí vãö n = 4 vaì d = 5. [n,d] = numden('x/y + y/x') traí vãö n = x^2+y^2 , d = y*x NUMERIC Âäøi ma tráûn symbolic sang daûng säú cuía MATLAB NUMERIC(S) âäøi ma tráûn symbolic S sang daûng säú. S phaíi khäng âæåüc chæïa mäüt biãún symbolic naìo NUMERIC, khäng âäúi säú, âäøi biãøu thæïc symbolic træåïc âoï Vê duû: phi = '(1+sqrt(5))/2' laì "tè lãû vaìng " numeric(phi) laì biãøu hiãûn säú MATLAB cuía säú phi. Trong træåìng håpü naìy, numeric(phi) giäúng nhæ eval(phi). A = gallery(3) vaì A = gallery(5) coï caïc giaï trë riãng nhanh. numeric(eigensys(A)) thç cháûm hån nhæng chênh xaïc hån eig(A) POLY2SYM Âäøi vectå hãû säú âa thæïc sang âa thæïc symbolic POLY2SYM(c) traí vãö mäüt biãøu hiãûn symbolic cuía âa thæïc coï caïc hãû säú trong vectå c. Biãún symbolic laì x. Nãúu cáön, thç caïc hãû säú âæåüc xáúp xè båíi caïc giaï trë hæîu tè nháûn âæåüc tæì SYMRAT. Nãúu x coï mäüt giaï trë säú vaì caïc pháön tæí cuía c âæåüc cho ra chênh xaïc båíi RATS thç EVAL(POLY2STR(c)) traí vãö cuìng giaï trë nhæ POLYVAL(c,x) POLY2SYM(c,'v') phaït sinh âa thæïc theo biãún v Vê duû: poly2sym([1 0 -2 -5]) = 'x^3 - 2*x - 5' PRETTY In âeûp giaï trë ra thiãút bë xuáút PRETTY(S) in ma tráûn symbolic S dæåïi daûng nhæ toaïn lyï thuyãút PRETTY, khäng âäúi säú, in biãøu thæïc træåïc âoï PRETTY(S,n) duìng maìn hçnh âäü räüng n thay cho ngáöm âënh laì 79 PROCREAD Caìi âàût mäüt thuí tuûc cuía Maple

Page 247: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 246

Phan Thanh Tao - 2004

PROCREAD(FILENAME) âoüc tãûp chè âënh chæïa vàn baín nguäön cuía mäüt thuí tuûc Maple. Noï xoïa caïc låìi chuï thêch vaì caïc kyï tæû sang doìng, räöi gæíi chuäùi kãút quaí sang Maple. Symbolic Toolbox måí räüng yãu cáöu Vê du: Giaí sæí tãûp "check.src" chæïa näüi dung nhæ sau check := proc(A) # check(A) computes A*inverse(A) local X; X := inverse(A): evalm(A &* X); end; Thç lãûnh procread('check.src') caìi âàût thuí tuûc. Noï coï thãø âæåüc truy cáûp våïi maple('check',magic(3)) hoàûc maple('check',vpa(magic(3))) RSUMMER Æåïc læåüng vaì hiãøn thë täøng Riemann RSUMMER('expr',n) hiãûn mäüt âäö thë cuía täøng Riemann cuía 'expr' duìng n âiãøm trãn [0,1] RSUMS Æåïc læåüng coï tæång taïc cuía caïc täøng Riemann RSUMS(f) xáúp xè têch phán cuía f(x) båíi caïc täøng Riemann RSUMS thæåìng âæåüc goüi våïi daûng doìng lãûnh, nhæ rsums exp(-5*x^2) SHIFTEPT Dëch chuyãøn dáúu cháúm âäüng trong caïc säú daûng khoa hoüc SHIFTEPT('1234.0E10') = '1.234e13' SIMPLE Tçm daûng âån giaín nháút cuía mäüt biãøu thæïc symbolic SIMPLE(EXPR) láúy mäüt säú daûng âaûi säú âån giaín cuía biãøu thæïc EXPR, hiãøn thë moüi biãøu hiãûn ruït goün âäü daìi cuía biãøu thæïc EXPR vaì traí vãö daûng ngàõn nháút [R,HOW] = SIMPLE(EXPR) khäng hiãøn thë caïc daûng âån giaín trung gian, nhæng traí vãö daûng ngàõn nháút tçm âæåüc, cuìnåïiiii chuäùi mä taí caïch âån giaín hoïa SIMPLE, khäng âäúi säú, duìng biãøu thæïc træåïc Vê duû: S R How cos(x)^2+sin(x)^2 1 simplify 2*cos(x)^2-sin(x)^2 3*cos(x)^2-1 simplify

Page 248: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 247

Phan Thanh Tao - 2004

cos(x)^2-sin(x)^2 cos(2*x) combine(trig) cos(x)+(-sin(x)^2)^(1/2) cos(x)+i*sin(x) radsimp cos(x)+i*sin(x) exp(i*x) convert(exp) (x+1)*x*(x-1) x^3-x collect(x) x^3+3*x^2+3*x+1 (x+1)^3 factor cos(3*acos(x)) 4*x^3-3*x expand SIMPLER Ruït goün biãøu thæïc SIMPLE(HOW,S,R,H,P,X) aïp duûng phæång phaïp HOW våïi tham säú tuìy choün X cho biãøu thæïc S, in kãút quaí nãúu P≠ 0, so saïnh âäü daìi cuía kãút quaí våïi biãøu thæïc R, nháûn âæåüc våïi phæång phaïp H, vaì traí vãö chuäùi ngàõn nháút vaì phæång phaïp tæång æïng SIMPLIFY Âån giaín hoïa symbolic SIMPLIFY(S) âån giaín mäùi pháön tæí cuía ma tráûn symbolic S Vê duû: simplify('sin(x)^2 + cos(x)^2')= 1 SINGVALS Caïc giaï trë vaì vectå kyì dë cuía ma tráûn symbolic SINGVALS(A) tênh giaï trë kyì dë symbolic cuía ma tráûn A SINGVALS(VPA(A)) tênh giaï trë kyì dë bàòng säú bàòng caïch duìng âäü chênh xaïc säú hoüc thay âäøi [U,S,V] = SINGVALS(VPA(A)) cho 2 ma tráûn træûc giao våïi âäü chênh xaïc thay âäøi, U vaì V, vaì ma tráûn cheïo vpa, S, âãø symop(U,'*',S,'*',transpose(V)) = A Caïc vectå kyì dë symbolic khäng âæåüc duìng træûc tiãúp Vê duû: A = sym('[a, b, c; 0, a, b; 0, 0, a]'); s = singvals(A) A = magic(8); s = singvals(A) [U,S,V] = singvals(vpa(A)) SININT Haìm têch phán Sin SININT(x) = int(sin(t)/t, t=0..x) SM2AR Chuyãøn ma tráûn symbolic sang maíng Maple A = SM2AR(M) chuyãøn ma tráûn säú hoàûc ma tráûn symbolic sang daûng maíng 'array([[...],[...]])' âãø duìng båíi caïc haìm âaûi säú tuyãún tênh cuía Maple SOLVE

Page 249: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 248

Phan Thanh Tao - 2004

Giaíi hãû phæång trçnh âaûi säú symbolic Phæång trçnh mäüt biãún: SOLVE(S), S laì phæång trçnh symbolic hoàûc laì mäüt biãøu thæïc symbolic thç giaíi phæång trçnh âaî cho, hoàûc phæång trçnh S = 0, biãún tæû do cuía noï âæåüc xaïc âënh båíi SYMVAR SOLVE(S,'v') giaíi theo biãún 'v' Hãû phæång trçnh nhiãöu biãún SOLVE(S1,S2,..,SN) giaíi hãû N phæång trçnh symbolic N biãún xaïc âënh båíi SYMVAR SOLVE(S1,S2,..,SN,'v1,v2,..,vn') giaíi hãû N phæång trçnh symbolic N biãún chè âënh båíi N âäúi säú nháûp cuäúi cuìng [X1,X2,..,XN] = SOLVE(S1,S2,..,SN), vaì [X1,X2,..,XN] = SOLVE(S1,S2,..,SN,'v1,v2,..,vn') traí vãö N vectå symbolic chæïa caïc biãøu thæïc theo caïc biãún riãng biãût trong låìi giaíi. Trong táút caí caïc træåìng håüp thç traí vãö giaï trë säú nãúu khäng tçm tháúy låìi giaíi symbolic Vê duû: solve('log(x) = x/pi') x = solve('a*x^2 + b*x + c') b = solve('a*x^2 + b*x + c', 'b') [x,y] = solve('x^2 + 2*x*y + y^2 = 4', 'x^3 + 4*y^3 = 1') [u,v] = solve('a*u^2 + v^2', 'u - v = 1', 'u,v') [a,u,v] = solve('a*u^2 + v^2', 'u - v = 1', 'a^2 - 5*a + 6') SUBS Thay thãú kyï hiãûu trong mäüt biãøu thæïc hoàûc ma tráûn symbolic SUBS(S,NEW) Thay biãún symbolic trong S båíi NEW SUBS(S,NEW,OLD) Thay táút caí OLD trong S båíi NEW Vê duû: subs sin(x) pi/3 = 'sin(1/3*pi)' subs sin(z) x+i*y = 'sin(x+i*y)' f = 'F(a*r^2)' r = 'sqrt(x^2+y^2)' subs(f,r,'r') = 'F(a*(x^2+y^2))'

Page 250: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 249

Phan Thanh Tao - 2004

SVDVPA Taïch giaï trë biãún kyì dë SINGVALS cuîng coï thãø tênh caïc giaï trë kyì dë. SVDVPA âæåüc thay båíi SINGVALS. Nãn duìng: S = SINGVALS(VPA(A)) thay cho S = SVDVPA(A) [U,S,V] = SINGVALS(VPA(A)) thay cho [U,S,V] = SVDVPA(A) SYM Taûo ra, truy cáûp hoàûc sæía âäøi mäüt ma tráûn symbolic Mäüt ma tráûn symbolic laì mäüt maíng vàn baín MATLAB coï mäùi doìng bàõt âáöu våïi '[', kãút thuïc våïi ']', vaì chæïa caïc chuäùi con caïch nhau båíi caïc dáúu pháøy âãø biãøu hiãûn caïc pháön tæí riãng biãût . Coï 3 caïch taûo ra caïc ma tráûn symbolic : SYM(X) chuyãøn ma tráûn säú X sang daûng symbolic cuía noï våïi caïc pháön tæí âæåüc biãøu hiãûn bàòng phán säú (nháûn âæåüc tæì SYMRAT) SYM(m,n,'expr') taûo ra ma tráûn symbolic cåî mxn, caïc pháön tæí cuía ma tráûn symbolic âæåüc æåïc læåüng âäúi våïi i = 1:m vaì j = 1:n. Biãøu thæïc expr laì mäüt biãøu thæïc symbolic thæåìng chæïa caïc kyï tæû 'i', 'j', vaì caïc biãún tæû do khaïc SYM(m,n,'r','c','expr') duìng 'r' vaì 'c' laì caïc biãún doìng vaì cäüt thay cho 'i' vaì 'j' SYM('[s11,s12,...,s1n; s21,s22,...; ...,smn]') taûo ra ma tráûn symbolic cåî mxn bàòng caïch duìng caïc pháön tæí symbolic s11, s12, ..., smn. Daûng naìy cuía symbolic giäúng hãût phaït sinh ma tráûn säú trong MATLAB. Caïc dáúu cháúm pháøy kãút thuïc caïc doìng. Coï 2 caïch âãø truy cáûp caïc pháön tæí riãng biãût cuía ma tráûn symbolic: SYM(S,i,j,'expr') laì phiãn baín symbolic cuía S(i,j) = 'expr' r = SYM(S,i,j) laì phiãn baín symbolic cuía r = S(i,j) Vê duû: M = sym(hilb(3)) laì mäüt ma tráûn vàn baín våïi 3 doìng, [ 1, 1/2, 1/3] [1/2, 1/3, 1/4] [1/3, 1/4, 1/5] M = sym(3,3,'1/(i+j-t)') phaït sinh [1/(2-t), 1/(3-t), 1/(4-t)] [1/(3-t), 1/(4-t), 1/(5-t)] [1/(4-t), 1/(5-t), 1/(6-t)] M = sym(M,1,3,'1/t') thay âäøi pháön tæí (1,3) cuía M thaình '1/t' M = sym('a, 2*b, 3*c; 0, 5*b, 6*c; 0, 0, 7*c') phaït sinh ma tráûn symbolic tam giaïc trãn coï âënh thæïc determ(M) = 35*a*b*c. Sau âoï M, sym(M,1,3)= '3*c' SYM2POLY

Page 251: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 250

Phan Thanh Tao - 2004

Âäøi âa thæïc symbolic sang vectå hãû säú cuía âa thæïc SYM2POLY(p) traí vãö vectå hãû säú cuía âa thæïc symbolic p Vê duû: sym2poly('x^3 - 2*x - 5') = [1 0 -2 -5] SYMADD Cäüng symbolic SYMADD(A,B) tênh täøng symbolic A + B Vê duû: symadd('cos(t)','t') = 'cos(t)+t' SYMDIFF Vi phán symbolic Haìm naìy thæåìng âæåüc goüi båíi DIFF âãø tênh âaûo haìm SYMDIFF(S) vi phán S theo biãún tæû do cuía noï SYMDIFF(S,'v') vi phán S theo biãún 'v' SYMDIFF(S,n) vaì SYMDIFF(S,'v',n) vi phán S n láön SYMDIFF, khäng tham säú, vi phán biãøu thæïc træåïc SYMDIV Chia symbolic SYMDIV(A,B), våïi caïc biãøu thæïc hoàûc ma tráûn symbolic A vaì B, tênh A / B Vê duû: symdiv('2*cos(t)+6',3) traí vãös 2/3*cos(t)+2 Nãúu A = [ 2, a + 3/2] [ 7/6, a/2 + 1] B = [ 1, 1/2] [ 1/2, 1/3] thç symdiv(A,B) traí vãö [ -1-6*a, 6+12*a] [-4/3-3*a, 5+6*a] SYMMUL Nhán symbolic SYMMUL(A,B), våïi caïc biãøu thæïc hoàûc ma tráûn symbolic A vaì B, tênh têch âaûi säú tuyãún tênh symbolic A * B Vê duû:

symmul('x','exp(x)') = 'x*exp(x)' SYMOP Tênh toaïn symbolic SYMOP(arg1,arg2,arg3,...) láúy âãún 16 âäúi säú. Mäùi däúi säú coï thãø laì mäüt ma tráûn symbolic, mäüt ma tráûn säú, hoàûc mäüt trong caïc pheïp toaïn sau: '+', '-', '*', '/', '^', '(',')'

Page 252: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 251

Phan Thanh Tao - 2004

SYMOP(...) näúi caïc âäúi säú vaì æåïc læåüng biãøu thæïc kãút quaí Vê duû: x = 'x' f = symop(1,'+',x,'+',x,'^',2,'/',2); symop(f,'-',int(diff(f))) symop('exp(x)','/','(',f,'+',x,'^3','/',6,')') G = sym('[c, s; -s, c]') symop(G,'*',transpose(G)) Læu yï: Viãûc hoìa láùn caïc âaûi læåüng vä hæåïng vaì caïc ma tráûn coï thãø coï caïc kãút quaí khäng nhæ yï muäún . Vê duû, symop(A,'+',x) cäüng x vaìo âæåìng cheïo cuía A SYMPOW Tênh luîy thæìa cuía mäüt biãøu thæïc hoàûc ma tráûn symbolic SYMPOW(S,p) tênh S^p. Nãúu S laì mäüt biãøu thæïc symbolic thç p coï thãø laì mäüt biãøu thæïc symbolic vä hæåïng hoàûc biãøu thæïc säú vä hæåïng. Nãúu S laì ma tráûn symbolic thç S phaíi vuäng, vaì p phaíi laì mäüt säú nguyãn Vê duû: sympow('exp(t)',2) = 'exp(t)^2' SYMRAT Xáúp xè phán säú symbolic SYMRAT(X), våïi vä hæåïng X, laì mäüt chuäùi biãøu hiãûn mäüt säú nguyãn, phán säú, phán säú nhán 'pi' hoàûc säú nguyãn muî 2. Khi chuäùi âæåüc æåïc læåüng våïi säú cháúm âäüng cuía MATLAB thç kãút quaí cho laûi âuïng giaï trë X Vê duû:

symrat(22/7) = '22/7' symrat(2*pi/3) = '2*pi/3' symrat(1.e12) = '100000000000' symrat(eps) = '2^(-52)' SYMSIZE Kêch thæåïc ma tráûn symbolic D = SYMSIZE(S), våïi ma tráûn S cåî MxN, traí vãö hai vectå doìng gäöm 2 pháön tæí D = [M, N] chæïa säú doìng vaì säú cäüt trong ma tráûn. [M,N] = SYMSIZE(S) traí vãö säú doìng vaì säú cäüt trong 2 biãún xuáút riãng biãût M = SYMSIZE(S,1) traí vãö âuïng säú doìng N = SYMSIZE(S,2) traí vãö âuïng säú cäüt SYMSUB Træì symbolic SYMSUB(A,B) våïi caïc biãøu thæïc hoàûc ma tráûn symbolic A vaì B, tênh A - B SYMSUM Täøng symbolic

Page 253: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 252

Phan Thanh Tao - 2004

SYMSUM(S) laì täøng vä haûn S theo biãún symbolic cuía noï SYMSUM(S,'v') laì täøng vä haûn S theo biãún v SYMSUM, khäng âäúi säú, laì täøng vä haûn theo biãún symbolic cuía cuía biãøu thæïc træåïc SYMSUM(S,a,b) laì täøng vä haûn S theo biãún symbolic cuía noï tæì a âãún b SYMSUM(S,'v',a,b) laì täøng vä haûn S theo biãún v tæì a âãún b Vê du: symsum k^2 1/3*k^3-1/2*k^2+1/6*k symsum k^2 0 n-1 1/3*n^3-1/2*n^2+1/6*n symsum k^2 0 10 385 symsum k^2 11 10 0 symsum 1/k^2 -Psi(1,k) symsum 1/k^2 1 Inf 1/6*pi^2 symsum x^k/k! k 0 Inf exp(x) SYMVAR Xaïc âënh caïc biãún symbolic trong mäüt biãøu thæïc SYMVAR(S) tçm trong chuäùi s âãø láúy mäüt kyï tæû chæî thæåìng riãng biãût, khaïc 'i' hoàûc 'j', âoï laì mäüt pháön cuía 1 tæì taûo thaình tæì mäüt säú kyï tæû. Nãúu coï kyï tæû âoï vaì laì duy nháút thç traí vãö kyï tæû âoï. Nãúu khäng coï thç traí vãö ‘x’ Nãúu kyï tæû khäng duy nháút thç traí vãö mäüt kyï tæû gáön ‘x’ Nãúu coï raìng buäüc thç mäüt kyï tæû la tinh âæåüc choün SYMVAR(S,'t') choün biãún gáön 't' thay cho 'x' SYMVAR(S,N), våïi säú nguyãn vä hæåïng N, tçm N kyï tæû khaïc nhau trong, kãø caí 'i' vaì 'j' Nãúu coï N kyï tæû thç traí vãö danh saïch chuïng. Ngæåüc laûi thi kãút quaí laì mäüt läùi SYMVAR(S,N), våïi vectå nguyãn êt nháút 2 thaình pháön thç tçm mäüt säú kyï tæû khaïc nhau Khi N laì mäüt vectå thç SYMVAR(S,N) khäng bao giåì thäng baïo läùi. Nãúu säú tçm tháúy giæîa min(N) vaì max(N), thç traí vãö mäüt danh saïch. Nãúu säú tçm tháúy êt hån min(N), thç traí vãö mäüt ma tráûn räùng . Nãúu säú tçm tháúy låïn hån max(N), thç traí vãö NaN Vê duû: symvar('sin(x)') = 'x' symvar('sin(pi*t)') = 't' symvar('a+y') = 'y' symvar('3*i+4*j') = 'x' symvar('pi',[1 1]) = räùng f = '3*x+4*y'; symvar(f) = 'x' symvar(f,2) = 'x, y' g = 'Dx = y; Dy = -x + sin(t)'; symvar(g,2:3) = 't,x,y' symvar(g,[1 1]) = NaN

Page 254: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 253

Phan Thanh Tao - 2004

symvar(g,n) våïi vä hæåïng n ~= 3 laì mäüt läùi SYMVARS Thay thãú biãún symbolic F = SYMVARS(F,Y,X) thay âäúi biãún symbolic trong F tæì Y sang X Haìm naìy giäïng nhæ SUBS(F,Y,SYMVAR(F)) khäng duìng Maple TAYLOR Khai triãøn chuäùi Taylor TAYLOR(f) traí vãö khai triãøn chuäùi Taylor cuía f theo biãún xaïc âënh båíi SYMVAR TAYLOR(f,'v') duìng biãún 'v' TAYLOR(f,n) khai triãøn n haûng tæí thay cho ngáöm âënh n = 6 TRANSPOSE Chuyãøn vë ma tráûn symbolic TRANSPOSE(A) tênh chuyãøn vë cuía ma tráûn symbolic hoàûc ma tráûn säú A Vê duû: transpose(sym('[cos(x), sin(x); -sin(x), cos(x)]')) VECTORIZE Vectå hoïa mäüt biãøu thæïc symbolic VECTORIZE(F) cheìn mäüt '.' vaìo træåïc mäùi '^', '*' vaì '/' trong F VPA Chênh xaïc säú hoüc VPA(A) æåïc læåüng säú mäùi pháön tæí cuía A bàòng caïch duìng âäü chênh xaïc säú hoüc dáúu cháúm âäüng våïi D chæî säú tháûp phán , D laì caìi âàût hiãûn thåìi cuía DIGITS VPA(A,D) duìng D chæî säú, thay cho caìi âàût hiãûn thåìi cuía DIGITS. Mäùi pháön tæí cuía kãút quaí laì mäüt "säú symbolic ", laì mäüt chuäùi chæïa nhiãöu chæî säú VPA, khäng âäúi säú, æåïc læåüng biãøu thæïc symbolic træåïc Vê duû, ma tráûn : vpa(hilb(2),25) traí vãö [1. , .5000000000000000000000000] [.5000000000000000000000000, .3333333333333333333333333] vpa(hilb(2),5) traí vãö [1. , .50000] [.50000, .33333] Vê duû, daûng haìm: phi = '(1+sqrt(5))/2' laì "tè lãû vaìng " vpa(phi,75) laì chuäùi chæïa 75 chæî säú cuía phi Vê duû, daûng lãûnh:

Page 255: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phụ lục-Lệnh và hàm 254

Phan Thanh Tao - 2004

vpa pi 1919 laì mäüt maìn hçnh âáöy caïc säú cuía pi vpa exp(pi*sqrt(163)) 36 hiãûn mäüt säú "gáön nguyãn" ZETA Haìm Zeta Riemann ZETA(s) = sum(1/k^s,k=1..infinity) ZTRANS Biãún âäøi Z F = ZTRANS(f) laì biãún âäøi Z cuía biãøu thæïc symbolic f, F(z) = symsum(f(n)/z^n,'n',0,inf) F = ZTRANS(f,'v') laì haìm theo biãún 'v' thay cho 'z' F = ZTRANS(f,'v','x') giaí thiãút f laì haìm theo biãún 'x' thay cho 'n' F = ZTRANS, khäng âäúi säú, biãún âäøi kãút quaí træåïc Vê duû: ztrans 1 z/(z-1) ztrans a^n z/(z-a) ztrans sin(n*pi/2) z/(1+z^2) ztrans('x^k/k!','z','k') exp(1/z*x) ztrans('f(n+1)') z*ztrans(f(n),n,z)-f(0)*z

********************

Page 256: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phan Thanh Tao - 2004

TAÌI LIÃÛU THAM KHAÍO [1] USER’S GUIDE - MATHWORKS [2] WWW.MATHWORKS.COM [3] ÂÄÖ HOÜA VÅÏI MATLAB - ÂÀÛNG MINH HOAÌNG [4] CÅ SÅÍ MATLAB & ÆÏNG DUÛNG - NGUYÃÙN HÆÎU TÇNH

Page 257: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phan Thanh Tao - 2004

GIỚI THIỆU .................................................................................................................... 1 Hướng dẫn cài đặt MATLAB 7.0 .................................................................................... 2 Chương 1. CÁC KHÁI NIỆM CƠ BẢN .................................................................. 11

1.1. Nhập ma trận đơn giản...................................................................................... 11 1.2. Các phần tử của ma trận.................................................................................... 12 1.3. Câu lệnh và biến................................................................................................ 13 1.4. Cách lấy thông tin vùng làm việc ..................................................................... 14 1.5. Số và biểu thức số ............................................................................................. 15 1.6. Số phức và ma trận phức................................................................................... 16 1.7. Dạng thức xuất .................................................................................................. 17 1.8. Công cụ trợ giúp ............................................................................................... 19 1.9. Thoát và lưu vùng làm việc .............................................................................. 19 1.10. Các hàm ........................................................................................................ 20

Chương 2. CÁC PHÉP TOÁN TRÊN MA TRẬN ................................................. 22 2.1. Chuyển vị ma trận............................................................................................. 22 2.2. Cộng và trừ ma trận .......................................................................................... 23 2.3. Nhân ma trận..................................................................................................... 23 2.4. Chia ma trận...................................................................................................... 25 2.5. Lũy thừa ma trận............................................................................................... 26 2.6. Các hàm sơ cấp về ma trận ............................................................................... 26

Chương 3. CÁC PHÉP TOÁN TRÊN MẢNG ........................................................ 28 3.1. Cộng và trừ trên mảng ...................................................................................... 28 3.2. Nhân và chia trên mảng .................................................................................... 28 3.3. Lũy thừa trên mảng........................................................................................... 28 3.4. Phép toán quan hệ ............................................................................................. 29 3.5. Phép toán logic.................................................................................................. 31 3.6. Các hàm toán sơ cấp ......................................................................................... 32 3.7. Các hàm toán học đặc biệt ................................................................................ 34

Chương 4. THAO TÁC TRÊN VECTƠ VÀ MA TRẬN ....................................... 35 4.1. Cách phát sinh vectơ ......................................................................................... 35 4.2. Mô tả chỉ số....................................................................................................... 37 4.3. Mô tả chỉ số bằng vectơ 0-1.............................................................................. 39 4.4. Ma trận rỗng...................................................................................................... 40 4.5. Ma trận đặc biệt ................................................................................................ 40 4.6. Cách tạo ra ma trận lớn..................................................................................... 42 4.7. Thực hiện trên ma trận...................................................................................... 43

Chương 5. THAO TÁC TRÊN VECTƠ VÀ MA TRẬN ....................................... 45 5.1. Phân tích theo hướng cột .................................................................................. 45 5.2. Các giá trị bỏ qua .............................................................................................. 48 5.3. Cách xóa các giá trị quá hạn ............................................................................. 50 5.4. Hồi quy và đường cong thực nghiệm................................................................ 50

Chương 6. HÀM MA TRẬN..................................................................................... 53 6.1. Thừa số tam giác............................................................................................... 53 6.2. Thừa số trực giao .............................................................................................. 56 6.3. Tách giá trị kỳ dị ............................................................................................... 58 6.4. Giá trị riêng ....................................................................................................... 58 6.5. Hạng và điều kiện ............................................................................................. 59

Chương 7. ĐA THỨC VÀ XỬ LÝ TÍN HIỆU ........................................................ 61 7.1. Đa thức.............................................................................................................. 61 7.2. Xử lý tín hiệu .................................................................................................... 62 7.3. Lọc dữ liệu ........................................................................................................ 63 7.4. FFT(Fast Fourier Transform-Biến đổi Fourier nhanh) ..................................... 64

Chương 8. HÀM CÓ ĐỐI SỐ LÀ HÀM.................................................................. 67

Page 258: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phan Thanh Tao - 2004

8.1. Tích phân số ...................................................................................................... 67 8.2. Phương trình và tối ưu phi tuyến ...................................................................... 68 8.3. Phương trình vi phân......................................................................................... 69

Chương 9. ĐỒ THỊ .................................................................................................... 72 9.1. Hình vẽ trong mặt phẳng x-y ............................................................................ 73 9.2. Dạng thức cơ bản .............................................................................................. 73 9.3. Nhiều đường ..................................................................................................... 75 9.4. Kiểu đường và kiểu điểm.................................................................................. 76

9.4.1. Kiểu................................................................................................................. 76 9.4.2. Màu ................................................................................................................. 77

9.5. Dữ liệu ảo và phức ............................................................................................ 77 9.6. Hình vẽ loga, cực, và biểu đồ ........................................................................... 77 9.7. Vẽ mặt lưới 3 chiều và đường mức................................................................... 78 9.8. Điều khiển màn hình......................................................................................... 80 9.9. Cách chia đơn vị trục tọa độ ............................................................................. 82 9.10. Bản sao phần cứng ........................................................................................ 82

Chương 10. ĐIỀU KHIỂN LUỒNG .......................................................................... 83 10.1. Vòng lặp FOR............................................................................................... 83 10.2. Vòng lặp WHILE.......................................................................................... 85 10.3. Các lệnh IF và BREAK................................................................................. 87

Chương 11. SIÊU TỆP M-FILE ................................................................................. 89 11.1. Tệp nguyên bản............................................................................................. 89 11.2. Tệp hàm ........................................................................................................ 91 11.3. Các lệnh Echo, input, pause, keyboard ......................................................... 93 11.4. Xâu chữ và macro xâu chữ ........................................................................... 94 11.5. Chương trình bên ngoài ................................................................................ 96 11.6. Vấn đề về tốc độ và bộ nhớ........................................................................... 97

Chương 12. VỀ TỆP TRÊN ĐĨA................................................................................ 99 12.1. Thao tác về tệp.............................................................................................. 99 12.2. Chạy chương trình bên ngoài........................................................................ 99 12.3. Nhập và xuất dữ liệu ................................................................................... 100

PHỤ LỤC....................................................................................................................... 102 Quaín lyï Lãnh vaì haìm ............................................................................. 103 Quaín lyï caïc biãún vaì vuìng laìm viãûc .................................. 104 Laìm viãûc våïi tãûp vaì hãû âiãöu haình..................................... 106 Âiãöu khiãøn cæía säø lãûnh.................................................................... 106 Thäng tin chung................................................................................................. 108 Caïc haìm Logic................................................................................................. 109 Caïc haìm dæî liãûu cå baín.................................................................... 110 Vi phán xaïc âënh............................................................................................ 112 Caïc thao taïc vãö vectå ........................................................................... 112 Caïc hãû säú tæång quan ............................................................................. 113 Loüc vaì têch cháûp ....................................................................................... 113 Caïc pheïp biãún âäøi nghëch âaío Fourier .................................. 121 Caïc haìm læåüng giaïc................................................................................ 124 Caïc haìm muî vaì logarit......................................................................... 126 Caïc haìm phæïc .............................................................................................. 126 Haìm vãö säú nguyãn vaì thæûc ............................................................... 127 Caïc ma tráûn cå baín .................................................................................. 127 Phán têch ma tráûn ......................................................................................... 129 Phæång trçnh tuyãún tênh ........................................................................... 131 Giaï trë riãng vaì giaï trë kyì dë ................................................... 133 Caïc haìm ma tráûn ......................................................................................... 135

Page 259: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

Phan Thanh Tao - 2004

Caïc biãún vaì hàòng âàûc biãût .......................................................... 136 Thåìi gian vaì nháût kyì ........................................................................... 139 Thao taïc trãn ma tráûn ............................................................................. 139 Caïc haìm coï âäúi säú laì haìm .......................................................... 141 MATLAB laì mäüt ngän ngæî láûp trçnh .............................................. 146 Âiãöu khiãøn luäöng ....................................................................................... 147 Haìm vãö âa thæïc............................................................................................ 151 Näüi suy säú liãûu ......................................................................................... 154 Näüi suy Spline................................................................................................. 156 Haìm vãö xáu chæî............................................................................................ 156 Âäö hoüa X-Y cå baín..................................................................................... 162 Caïc lãûnh âäö thë X-Y âàûc biãût ..................................................... 164 Chuï giaíi trãn âäö thë ............................................................................. 168 Caïc lãûnh veî âæåìng vaì tä vuìng ................................................... 169 Veî âæåìng mæïc vaì caïc hçnh veî khaïc 2 chiãöu cuía dæî liãûu 3 chiãöu ................................................................................................... 171 Caïc lãûnh veî bãö màût vaì læåïi ..................................................... 173 Caïch thãø hiãûn hçnh aính ...................................................................... 177 Caïc âäúi tæåüng 3 chiãöu......................................................................... 179 Âiãöu khiãøn maìu............................................................................................ 179 Caïc baíng maìu................................................................................................. 181 Caïc haìm baíng maìu liãn quan............................................................. 182 Caïc mä hçnh saïng ......................................................................................... 184 Taûo cæía säø hçnh aính vaì caïc âiãöu khiãøn......................... 185 Taûo caïc truûc vaì caïc âiãöu khiãøn ......................................... 186 Caïc âäúi tæåüng theí âäö thë ............................................................... 189 Caïc thao taïc vãö theí âäö hoüa........................................................ 193 Baín sao cæïng vaì læu træî.................................................................... 195 Caïc phim vaì hçnh aính âäüng ............................................................... 198 Caïc haìm linh tinh ....................................................................................... 199 Caïc ma tráûn âàûc biãût ........................................................................... 202 Caïc haìm ám thanh täøng quaït............................................................. 205 Caïc haìm ám thanh chi tiãút ................................................................. 205 Caïc haìm âàûc biãût..................................................................................... 207 Måí vaì âoïng tãûp ......................................................................................... 212 Vaìo/Ra tãûp khäng daûng thæïc............................................................. 214 Nháûp/xuáút tãûp coï daûng thæïc........................................................ 215 Vë trê tãûp .......................................................................................................... 218 Chuyãøn âäøi chuäùi ....................................................................................... 220 Caïc ma tráûn thæa så cáúp ...................................................................... 221 Chuyãøn ma tráûn âáöy âuí thaình ma tráûn thæa ...................... 225 Laìm viãûc våïi caïc pháön tæí khaïc 0 cuía ma tráûn thæa..................................................................................................................................... 227 Xem caïc ma tráûn thæa................................................................................ 227 Caïc thuáût toaïn sàõp xãúp laûi........................................................ 228 Chuáøn, säú âiãöu kiãûn, vaì haûng ................................................... 229 Caïc thao taïc trãn cáy ............................................................................. 230 Caïc thao taïc linh tinh ........................................................................... 231 SYMBOLIC TOOLBOX .............................................................................................. 233

TAÌI LIÃÛU THAM KHAÍO ...................................................................................... 255

Page 260: Giáo trình Matlab, tác giả Phan Thanh Tao, DDHQG Đà Nẵng

THÔNG TIN VỀ TÁC GIẢ GIÁO TRÌNH “MATLAB”

1 Thông tin về tác giả : + Họ và tên : PHAN THANH TAO + Quê quán : + Cơ quan công tác :

KHOA CÔNG NGHỆ THÔNG TIN Trường Đại học Bách khoa, Đại học Đà Nẵng

+ Email: 2 Phạm vi và đối tượng sử dụng :

+ Giáo trình dùng tham khảo cho các ngành

+ Có thể dùng ở các trường có đào tạo các chuyên ngành

+ Từ khóa :.

+ Yêu cầu kiến thức trước khi học môn này :