Chúng ta chưa tìm hiểu sâu về cấu trúc và câu lệnh matlab vội. Bài này giúp bạn “vọc vạch” với code matlab để có cái nhìn khái quát đầu tiên và cũng để định hướng cần phải xem cái gì ở bài nào.
Bài này sẽ chia làm hai phần:
- Code chơi với vài lệnh matlab cơ bản để nhận biết các đối tượng cơ bản trong matlab sẽ được giới thiệu ở các bài tiếp theo.
- Thử code một bài tập nhỏ.
Vọc với code matlab
Khi bạn mới mở matlab lên và trước đó chưa có tạo gì hết (khung Editor chưa được mở), giao diện matlab sẽ giống như sau.

Bây giờ bạn hãy gõ vào những câu lệnh sau đây, mỗi câu lệnh 1 dòng và enter để thấy kết quả.

2+2
Bạn sẽ thấy xuất hiện ngay biến ans
có giá trị là 4 (khoan đã, biến là gì?) Biến ans này là biến matlab tự đặt tên để lưu các giá trị mà bạn không có đặt tên cho nó.

a=2+3
Bạn thấy đấy, nếu bạn đặt tên cho nó (a
) thì nó sẽ tạo thêm một cái a
ở bên Workspace và lúc này, biến ans
của chúng ta vẫn là cái lúc nãy.
Như đã nói ở bài trước, matlab là một ngôn ngữ được thiết kế dành riêng cho các ma trận, cái gì của nó cũng liên quan đến ma trận, ngay cả 1 con số nhỏ nhoi và đơn lẻ cũng được lưu vào một cái ma trận với số chiều là 1×1. Để hiện số chiều của mỗi biến trong Workspace, hãy làm như bên dưới

Bây giờ hãy thử tạo một vector xem sao nhé (ở các bài sau, chúng ta sẽ tìm hiểu chi tiết và đầy đủ các cách tạo vector, ma trận trên matlab, bài này chỉ việc…chơi thôi)

x=[1:10:50]
y=[5:5:55];
Hàng 1 và hàng 2 khác nhau ở dấu ;
, bạn xem bên kết quả cũng có sự khác nhau ở dòng của x
và của y
.
- Nếu có dấu
;
ở cuối câu lệnh thì kết quả của câu lệnh sẽ không hiển thị ở Command Windows. Cái này có lợi khi nào? Khi ma trận của bạn quá lớn (dẫn đến việc hiển thị rất mất thời gian) cũng như khi bạn viết nhiều câu lệnh riêng biệt trên cùng một dòng, các câu lệnh này sẽ cách nhau bởi dấu;
. - Hàng 1 là bạn tạo ra một biến
x
nhận giá trị là một vector gồm các số bắt đầu từ 1 và không lớn hơn 50, mỗi số cách nhau 10 đơn vị kể từ 1 (ta gọi đó là bước nhảy 10). - Hàng 2 là các số từ 5 và không lớn hơn 55, bước nhảy từ 1 là 5.
- Xem bên Workspace, cả hai biến
x
vày
đều được tạo ra và lưu vào “bộ nhớ”. Tuy nhiên cách biểu diễn của x và y lại tương đối khác nhau ở mục Value. Matlab sẽ hiển thị chi tiết giá trị của biến ra nếu nó đơn giản (ví dụ như x), còn nếu phức tạp, nó chỉ hiển thị thông tin về biến, kiểu 1×11 double của y. Còn thế nào là đơn giản, thế nào là phức tạp thì…chỉ có matlab biết.
Bây giờ bạn hãy thử nhấp đôi vào biến x bên khung Workspace xem chuyện gì xảy ra?

Một cửa sổ bảng biểu của biến sẽ hiển thị ra. Cái này giống như bảng trên excel vậy, gồm hàng và cột đại diện cho ma trận hai chiều. Đây là nơi bạn có thể quản lý các biến, cũng có thể copy-paste qua lại giữa matlab và excel (không tin mở excel làm thử nhé).
Ở trên là vector, tạo thử một cái ma trận bất kỳ xem sao,

rand(3,2)
Câu lệnh rand
viết tắt của “random” (ngẫu nhiên) sẽ cho phép bạn tạo ra một ma trận/vector/… bất kỳ (giá trị nằm trong khoảng 0 và 1). Nó có nhiều tác dụng lắm, thử gõ vào khung Help để xem giải thích cụ thể nhé.
Cặp số (3,2)
nói cho matlab biết là 3 dòng, 2 cột. Bạn đừng thấy lạ là tại sao bạn cũng gõ y chang tôi nhưng ma trận lại ra khác tôi. Đơn giản bởi vì nó tạo ngẫu nhiên nên mỗi lần dùng lệnh này nó lại tạo ra một cái ngẫu nhiên khác, mà ngẫu nhiên thì sẽ không thể giống nhau được.
Lần nữa, hãy để ý là tôi không có đặt tên (hay “gán”) rand(3,2)
cho bất kỳ biến gì nên matlab sẽ tự động đưa vào biến ans
. Ngó sang Workspace để thấy biến ans bây giờ đã nhận Value và Size khác rồi đấy.
Tạo ra được vector và ma trận rồi, bây giờ chúng ta thử “truy xuất” đến các thành phần của chúng xem sao.

kq=x(4)+y(5)
Lấy phần tử thứ 4 của x
cộng với phần tử thứ 5 của y
.
Bạn thấy đấy, matlab được thiết kế rất “tự nhiên”, bạn học về vector và ma trận ký hiệu ra sao thì trên matlab chúng ta cũng thao tác và gõ tương tự vậy.

% aa=5
bb=10
Không có gì xảy ra tại dòng có dấu %
!
Bạn thấy đấy, tất cả những gì phía sau dấu %
trên một dòng sẽ không có tác dụng khi matlab chạy. Matlab khi gặp ký tự này nó sẽ hiểu là “Ah, bỏ qua thôi” và nó bắt đầu xét dòng lệnh kế tiếp. Chúng ta dùng ký hiệu này để ghi “comment” (ghi chú) cho code của chúng ta. Việc ghi chú là rất cần thiết khi code vì nó sẽ giúp cho code dễ hiểu hơn, nhất là khi bạn chia sẻ code với người khác hay khi đoạn code quá dài và phức tạp.
Chúng ta sẽ kết thúc cuộc dạo chơi ở phần vẽ vời đơn giản. Hãy thử vẽ hàm số $f(x)=x^2$ xem nó ra cái gì nhé? Dữ liệu của x chính là x ở các bước trên

f = x.^2;
plot(x,f,'r-');
Matlab không vẽ hàm số mà thật ra nó vẽ các điểm (x,f(x)) rồi sau đó nối chúng lại với nhau. Một cửa sổ hình vẽ hiện lên mang tên Figure 1, bạn có thể thao tác với hình vẽ này bằng các công cụ trong cửa sổ hình vẽ này (zoom, save, ghi chú,…)
Sẽ có một bài viết chi tiết về việc vẽ hình trong matlab, ở đây ta chỉ đang vẽ một hàm rất rất đơn giản.
- Nhắc lại
x=[1,11,21,31,41]
, ta sẽ tìm giá trị của h tại từng giá trị của x. Do $f(x)=x^2$ nên chúng ta dùng lệnhf=x.^2
, dấu.
phía trước phép bình phương cho matlab biết là chúng ta sẽ bình phương từng phần tử của x. Kết quả ta đượcf=[1,121,441,961,1681]
. - Sau khi có đủ giá trị của x và h (hai cái này phải cùng kích thước), matlab sẽ vẽ các điểm tương ứng (1,1), (11,121),… đó chính là ý nghĩa của
plot(x,f)
. - Để có thể nối các điểm lại với nhau và thêm màu đỏ, ta dùng
'r-'
(r viết tắt của red).
Giải quyết một bài tập nhỏ
Vậy là bạn đã có một cái nhìn tổng quát về matlab và cách nó hoạt động. Bây giờ chúng ta hãy cùng nhau thử lập trình một ứng dụng nho nhỏ.
Bài tập 3.1
Hãy viết một hàm kiểm tra tính chẵn lẻ của một số được người dùng nhập vào. Sau đó xuất ra kết quả.
Bài này rất quen thuộc, chúng ta đã tiếp cận với nó ở bài Lập trình là gì và như thế nào. Vui lòng đọc lại giải thuật ở bài ấy, bây giờ chúng ta sẽ dựa vào giải thuật đó để viết nên hàm kiemTraChanLe()
trên matlab. Bên dưới là “đoạn code” ở bài trước
xuất-ra-màn-hình "Vui lòng nhập vào một số"
đọc-kết-quả-từ-bàn-phím-và-gán-vào-biến x
nếu x chia hết 2 thì
xuất-ra-màn-hình "x là số chẵn"
ngược-lại-thì
xuất-ra-màn-hình "x là số lẻ"
Vậy ta cần phải biết các lệnh tương ứng trong matlab là gì? Ví dụ xuất-ra-màn-hình
và đọc-kết-quả-từ-bàn-phím-và-gán-vào-biến
thì trong matlab là lệnh gì? Tôi cũng không biết nữa (tôi xạo đó). Vậy làm sao? Ta liên tưởng ngay xuất ra màn hình là “export”, “print”,… và đọc kết quả là “input”, “read”,… Mấy từ khóa này (tiếng Anh thôi nha) có tác dụng giúp bạn tìm kiếm dễ hơn trên Google (Vâng, tôi đang hướng dẫn bạn cách tìm câu trả lời sau này đấy).

Ngay kết quả thứ 2 sau khi gõ tìm trên Google là chúng ta đã có câu trả lời, đó là từ khóa input
(trong đường link đó còn có hẳn 1 đoạn code ví dụ cho bạn nữa). Có những thứ rất rất cơ bản, hay được sử dụng thì tôi sẽ đề cập đến trong loạt bài này, còn có những thứ ít dùng thì bạn cần phải biết cách để tìm kiếm.
Tương tự, bạn có thể tự tìm nếu...thì
, ngược-lại-thì
, chia-hết
, xuất-ra-màn-hình
là gì trong matlab. Ở đây tôi đã tìm được như thế này
- xuất-ra-màn-hình và đọc-kết-quả-từ-bàn-phím-và-gán-vào-biến :
input
- nếu…thì…ngược-lại-thì:
if...else...end
- chia-hết:
~mod(a,b)
(mod(a,b)
cho ra số dư trong phép chia a cho b, tuy nhiên thêm~
phía trước sẽ ra kết quả là1
(nếu a chia hết cho b) hoặc0
(nếu a không chia hết cho b). Sao tui biết tài thế? Tui nhờ bác Google tìm cho đó, với từ khóa “divisible by in matlab” và nhận được kết quả đầu tiên. - xuất-ra-màn-hình:
disp
Và đây là đoạn code của hàm kiemTraChanLe
, đoạn code này chứa trong file kiemTraChanLe.m (bạn có thể download file này tại đây)
function kiemTraChanLe()
thongbao = 'Vui long nhap vao mot so: '; % gia su ban nhap dung
x = input(thongbao);
if ~mod(x,2)
bienTam = [num2str(x),' la so chan.']; % chua doan tra loi
disp(bienTam); % xuat ra cau tra loi
else
bienTam = [num2str(x),' la so le.']; % chua doan tra loi
disp(bienTam); % xuat ra cau tra loi
end
end

- À há, bạn nhận ra chúng ta phải viết tất cả các đoạn code ở một file riêng, tôi đã đặt tên nó là
kiemTraChanLe.m
(bạn có thể download file này tại đây). Việc sử dụng file.m
cho phép chúng ta- Lưu lại đoạn code dài thườn thượt và chạy một lần duy nhất, cũng là để sử dụng sau này.
- Tạo ra các file hàm số để sử dụng (Oái, hàm số là gì? Sẽ có một bài viết chi tiết về nó sau, ở đây ta chỉ cần tạm hiểu nó là cái chúng ta sẽ gọi tên mỗi lần muốn chạy “phần mềm” trong bài tập này, cái này có tên
kiemTraChanLe()
). - Để có thể soạn thảo đọa đoạn code này trên một file .m, bạn cần mở trình Editor trong matlab (xem lại bài trước để biết nó là gì). Để có thể tạo một file mới, bạn chọn Home > New Script hay chỉ đơn giản nhấn Ctrl + N.
- Tại sao lại dùng
bienTam
vànum2str
? Vì yêu cầu của hàmdisp
là bên trong nó chỉ có thể là một biến kiểu string (chữ). Trong khix
(kiểu số) và chúng ta chưa biết (vì chưa biết người dùng nhập gì), chỉ có “la mot so chan” hay “la mot so le” đang là kiểu string thôi. Ta cần chuyểnx
từ kiểu số sang kiểu chữ nên dùng hàmnum2str
(viết tắt của “number to string”, hãy dùng chức năng Help trong matlab để xem nó là gì nhé). Sau khi chuyểnx
về string, ta cần ghép nó vào thành một câu hoàn chỉnh với “la mot so chan” bằng cách đặt chúng vào biếnbienTam
. - Bạn không nên dùng tiếng Việt có dấu trong matlab, nếu bạn dùng, nó sẽ hiển thị
?
ở mấy chỗ có dấu. Ví dụ thay vì nó hiện “là một số chẵn”, nó sẽ hiện “l? m?t s? ch?n
”.
Tổng kết cuộc dạo chơi
Vậy là sau bài đầu tiên, bạn đã biết được một số điều sau đây
- Một số loại biến trong matlab và chúng sẽ được hiển thị ở Workspace.
- Một số phép toán cơ bản.
- Tác dụng của dấu
;
. - Tác dụng của dấu
%
. - Cách đơn giản để tạo ra một vector hay ma trận ngẫu nhiên.
- Vẽ một hình chơi chơi bằng lệnh
plot
. - Viết được một hàm nho nhỏ bằng cách tạo một file .m.
- Cách tìm kiếm sơ khai những điều chưa biết tùy theo nhu cầu.
Kể từ bài tiếp theo, chúng ta sẽ đi chuyên sâu vào những thứ trên đây.