CHƯƠNG 1 Matlab cơ bản 1.1 Giới thiệu Matlab Matlab là một ngôn ngữ lập trình cấp cao được sử dụng rộng rãi trong môi trường học thuật và công nghệ. Matlab được xem là lựa chọn ưu tiên vì có khả năng hỗ trợ tối ưu cho việc nghiên cứu cũng như dạy học đối với các môn toán học, kỹ thuật và khoa học. Matlab được viết tắt từ MATrix LABoratory do mục đích ban đầu của Matlab là xây dựng nên một công cụ hỗ trợ việc tính toán các ma trận một cách dễ dàng nhất. Một trong nhiều lý do khiến người sử dụng thích dùng Matlab chính là chế độ tương tác (interactive mode).
Ở chế độ này, sau khi gõ câu lệnh và thực thi, kết quả sẽ được in ra ngay trong cửa sổ dòng lệnh (command win- dow). Tuy nhiên, nếu người dùng chỉ cần thực thi câu lệnh nhưng không cần in kết quả ra cửa sổ dòng lệnh, ta thêm dấu chấm phẩy (;) ngay sau câu lệnh. 6 Matlab cơ bản Hơn nữa, ở bên trái màn hình, người dùng có thể thấy 3 tab Current di- rectory, Workspace và Command history. Trong đó, • Current directory: thể hiện thư mục đang làm việc.
Khi muốn thực thi một tập tin .m nào đó, người dùng phải chắc chắn rằng tập tin .m phải được nhìn thấy trong tab này. • Workspace: chứa danh sách các biến đã được khai báo và sử dụng trong chương trình. Ở tab này, người dùng có thể đọc được tên biến, giá trị, kích thước của biến,. • Command history: chứa danh sách các câu lệnh đã được thực thi trong cửa sổ dòng lệnh (command window).
Người dùng có thể nhấp đôi vào một lệnh bất kì để chương trình thực hiện lại lệnh đó. Hoặc người dùng có thể dùng phím mũi tên lên (↑), xuống (↓) trong cửa sổ dòng lệnh để tìm lại các lệnh mà chương trình đã thực thi. Bên cạnh đó, Matlab vẫn duy trì chế độ kịch bản (script mode) hỗ trợ cho người dùng khi lập trình các hàm hay chương trình từ đơn giản đến phức tạp.1 Giới thiệu Matlab 7 Các câu lệnh sẽ được lưu trong một tập tin có đuôi .m) và được thực thi một lần khi chương trình khởi chạy. Để tạo một tập tin .m, người dùng vào File chọn New → M-File hay nhấn vào biểu tượng nằm trên thanh MATLAB Toolbar.
Trong Matlab, khi muốn viết một dòng chú thích, ta đặt dấu phần trăm (%) ở đầu dòng. Tiện lợi hơn, ta có thể sử dụng phím tắt Ctrl+R để biến các dòng đã chọn trở thành chú thích và Ctrl+T để loại bỏ ký hiệu chú thích trước các dòng chú thích. Để thực thi một tập tin .m, ta nhấn vào biểu tượng nằm trên thanh Editor Toolbar hoặc sử dụng phím tắt F5. Tương tự như các ngôn ngữ lập trình khác, ở chế độ kịch bản, Matlab cũng hỗ trợ công cụ debug giúp người dùng kiểm tra chương trình của mình từng bước nhằm phát hiện lỗi sai trong quá trình viết.2 Phép toán, biến, vector, ma trận 1.1 Biến Trong ngôn ngữ lập trình Matlab, một biến (variable) được khai báo và khởi tạo thông qua câu lệnh gán.
>> num = 98 num = 98 >> pi = 3.1416 >> msg = ’Good morning’ msg = Good morning Tên biến bao gồm các ký tự chữ, số và ký hiệu gạch dưới (_). Tên biến phải bắt đầu bằng ký tự chữ và có độ dài tùy thích. Tuy nhiên, Matlab chỉ ghi nhớ 31 ký tự đầu tiên. Đồng thời, Matlab luôn phân biệt chữ in và chữ thường khi đặt tên biến hoặc tên chương trình.
Các kiểu tên biến hợp lệ: arg1, no_name, vars, Vars Khi tên biến được đặt không hợp lệ, Matlab sẽ xuất hiện thông báo: >> 4rum = ’Forum’ ??? 4rum = ’Forum’ | Error: Unexpected MATLAB expression. Nếu tên biến chưa được khởi tạo mà xuất hiện khi chạy một dòng lệnh nào đó, Matlab sẽ xuất hiện thông báo: ??? Undefined function or variable. Chú ý: Trong ngôn ngữ lập trình Matlab, mỗi biến khi khởi tạo sẽ được xem như một mảng. Nếu biến có giá trị đơn thì mảng có kích thước 1x1.2 Phép toán, biến, vector, ma trận 9 biến là ma trận hoặc vector thì kích thước của mảng chính là kích thước của ma trận hoặc vector đó.
Đây là một điểm khác biệt của Matlab so với các ngôn ngữ lập trình khác. Để lấy kích thước của một biến, ta sử dụng hàm size(). >> size(num) ans = 1 1 >> size(msg) ans = 1 12 Ngôn ngữ lập trình Matlab xem chuỗi ký tự như mảng một chiều chứa các ký tự. Do đó, kích thước của biến msg là 1 dòng, 12 cột.2 Phép toán Matlab cung cấp các phép toán số học cơ bản như sau Phép toán Dạng đại số Matlab Cộng a+b a+b Trừ a−b a-b Nhân a∗b a*b Chia phải a/b a/b Chia trái b/a a\b Lũy thừa ab aˆb >> 1+2; 5-3; 2*4; 5 ˆ 2*(10-4); >> 9/3 ans = 3 >> 9\3 ans = 0.3333 10 Matlab cơ bản Hơn nữa, Matlab còn hỗ trợ một số hàm số học đơn giản như hàm làm tròn round (), làm tròn lên ceil (), làm tròn xuống floor (), lấy phần dư mod (), tìm ước chung lớn nhất gcd (), tìm bội chung nhỏ nhất lcm(), và hàm lấy căn sqrt().
Giá trị trả về của biểu thức so sánh sẽ bằng 1 nếu biểu thức đúng và bằng 0 nếu biểu thức sai. >> 1 ∼= 2 ans = 1 >> 5 == 10 ans = 0 Cuối cùng là các phép toán luận lý bao gồm and (&&), or (||) và not (!).2 Phép toán, biến, vector, ma trận 11 Một số khác 0 được xem là một giá trị đúng trong các phép toán luận lý của Matlab. Giá trị trả về của các biểu thức luận lý tương tự như biểu thức so sánh. >> n = 15 >> mod(n,2)==0 && mod(n,3)==0 ans = 0 >> mod(n,2)==0 || mod(n,3)==0 ans = 1 BÀI TẬP 1.
Tính bằng tay các biểu thức sau, rồi thử lại bằng Matlab: a. Tính bằng tay các biểu thức sau, rồi thử lại bằng Matlab: a. Dự đoán kết quả những câu sau, giải thích và kiểm tra lại bằng Matlab a.3 Vector Vector là một dạng đặc biệt của ma trận có một dòng hoặc một cột. Trong các ngôn ngữ lập trình khác, sinh viên đã được làm quen với vector thông qua tên gọi danh sách (list) hoặc mảng một chiều (1-D array).
Để khởi tạo vector dòng chứa các giá trị rời rạc, các phần tử trong vec- tor phải nằm trong cặp ngoặc vuông ([]) và được ngăn cách nhau bởi khoảng trắng hoặc dấu phẩy (,). Đồng thời, giá trị đầu và cuối của vector không cần thiết đặt trong cặp dấu ngoặc vuông ([]).2 Phép toán, biến, vector, ma trận 13 >> arr1 = 1:5 arr1 = 1 2 3 4 5 >> arr2 = [1:0.0000 >> arr3 = 10:-1:6 arr3 = 10 9 8 7 6 Hơn nữa, để tạo một vector rỗng - vector không chứa giá trị - trong Matlab, chúng ta khai báo như sau: >> emp_vect = [] emp_vect = [] Ngược lại, để tạo ra vector cột, chúng ta cần nghịch đảo vector cột bằng cách sử dụng dấu nháy đơn (’) hoặc sử dụng dấu chấm phẩy (;) để ngăn cách giữa các phần tử. >> col_arr = [1:3]’ >> col_arr = [1;2;3] col_arr = 1 2 3 Giá trị của một phần tử tại một vị trí bất kỳ trong vector được truy xuất thông qua chỉ số. Trong Matlab, chỉ số luôn bắt đầu từ 1 và có thể là một giá trị đơn hoặc một mảng.
• Trích phần tử thứ i: X(i) • Trích nhiều phần tử: X([danh sách vị trí]) 14 Matlab cơ bản >> arr = 10:-1:0 arr = 10 9 8 7 6 5 4 3 2 1 0 >> arr(5) ans = 6 >> arr(1:3) ans = 10 9 8 >> arr([10:-2:6]) ans = 1 3 5 >> arr([7,8,11]) ans = 4 3 0 Để xóa một phần tử trong vector, chúng ta sẽ gán phần tử đó với vector rỗng. >> arr([2 5]) = [] arr = 10 8 7 5 4 3 2 1 0 >> size(arr) ans = 1 9 BÀI TẬP 1. Cho x = [3 1 5 7 9 2 6], dự đoán kết quả các dòng lệnh sau và thử lại bằng Matlab a.2 Phép toán, biến, vector, ma trận 15 f. Cho x = [1 5 2 8 9 0 1] và y = [5 2 2 6 0 0 2], giải thích kết quả các dòng lệnh sau a.
Cho 2 vectơ a = [1 0 2] và b = [0 2 2], xác định giá trị các biểu thức sau. Kiểm tra lại bằng Matlab a. Cho x = 1:10 và y = [3 1 5 6 8 2 9 4 7 0], dự đoán kết quả, giải thích và thử lại bằng Matlab a.4 Ma trận Trong Matlab, ma trận đại diện cho mảng nhiều chiều có nhiều dòng và nhiều cột. Phương thức khai báo và khởi tạo ma trận tương tự như vector.
Tuy nhiên, để kết thúc một dòng trong ma trận, chúng ta sử dụng dấu chấm phẩy (;).2 Phép toán, biến, vector, ma trận 17 >> zeros(1,2) ans = 0 0 >> eye(2) ans = 1 0 0 1 >> diag([3 4 5]) ans = 3 0 0 0 4 0 0 0 5 >> rand(2,1) ans = 0.9058 >> ones(2) ans = 1 1 1 1 Tương tự như vector, giá trị của một phần tử tại một vị trí bất kỳ trong ma trận được truy xuất thông qua chỉ số dòng và chỉ số cột. • Trích phần tử tại dòng i cột j: A(i,j) • Trích nhiều phần tử: A([danh sách các dòng, danh sách các cột]) • Trích đường chéo chính của ma trận: diag(A) • Trích tất cả phần tử của ma trận: A(:) • Trích tất cả phần tử tại cột i: A(:,i) • Trích tất cả phần tử tại dòng j: A(j,:) 18 Matlab cơ bản >> mat = rand(2,3) ans = 0.0975 Chú ý: Trong Matlab, chỉ số cuối cùng của dòng hay cột của ma trận hoặc vector có thể được thay thế bởi chữ end. BÀI TẬP Cho x = [1 4 8], y = [2 1 5], và A = [2 7 9 7 ; 3 1 5 6 ; 8 1 2 5]. Xét xem dòng lệnh nào hợp lệ, dự đoán kết quả, giải thích và thử lại bằng Matlab a.3 Biểu thức Logic 19 1.3 Biểu thức Logic 1.1 Các toán tử logic Một biểu thức logic trong Matlab được xây dựng từ 6 toán tử quan hệ là: >, <, >=, <=, == (so sánh bằng), ∼= (không bằng) và 3 toán tử logic: ∼ (NOT), & (AND) và | (OR).
Kết quả của một biểu thức logic trả về 1 nếu biểu thức đúng và 0 nếu biểu thức sai. Nếu phần tử so sánh là vectơ thì kết quả sẽ là một vectơ chứa các giá trị 0 hoặc 1. Thực hiện các câu lệnh sau và nhận xét kết quả 1. a=1:5; b=[0 2 4 5 6]; a==b Độ ưu tiên của các toán tử Độ ưu tiên Toán tử 1.