Các hàm cơ bản trong matlab

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ạn đang xem: Các hàm cơ bản trong matlab

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ỏ.

Bạn đang xem: Các hàm cơ bản trong matlab

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+2Bạn sẽ thấy xuất hiện ngaybiếnanscó 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+3Bạn thấy đấy, nếu bạn đặt tên cho nó (a) thì nó sẽ tạo thêm một cáiaở bênWorkspacevà lúc này, biếnanscủ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 trongWorkspace, hãy làm như bên dưới


*

Bây giờ hãy thửtạo một vectorxem 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=y=;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ủaxvà củay.

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ếnxnhậ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ênWorkspace, cả hai biếnxvà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ụcValue. 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ểu1×11 doublecủ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 khungWorkspacexem 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áima trận bất kỳxem sao,


rand(3,2)Câu lệnhrandviế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ếnans. Ngó sang Workspace để thấy biến ans bây giờ đã nhậnValueSizekhác rồi đấy.

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.

Xem thêm: Lỗi Dấu Cách Trong Word 2010, Cách Sửa Lỗi Cách Chữ Trong Word 2010

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.

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ầnvẽ 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ênFigure 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ệcvẽ hình trong matlab, ở đây ta chỉ đang vẽ một hàm rất rất đơn giản.

Nhắc lạix=, 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=.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ủaplot(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ỏ.

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àiLậ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àmkiemTraChanLe()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 xnế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ìnhvàđọc-kết-quả-từ-bàn-phím-và-gán-vào-biếnthì 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óainput(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ìmnếu...thì,ngược-lại-thì,chia-hết,xuất-ra-màn-hìnhlà gì trong matlab. Ở đây tôi đã tìm được như thế này

xuất-ra-màn-hìnhđọc-kết-quả-từ-bàn-phím-và-gán-vào-biến:inputnếu…thì…ngược-lại-thì:if...else...endchia-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àmkiemTraChanLe, đoạn code này chứa trong filekiemTraChanLe.m(bạn có thể download file nàytại đây)

function kiemTraChanLe() thongbao = "Vui long nhap vao mot so: "; % gia su ban nhap dung x = input(thongbao); if ~mod(x,2) bienTam = ; % chua doan tra loi disp(bienTam); % xuat ra cau tra loi else bienTam = ; % chua doan tra loi disp(bienTam); % xuat ra cau tra loi endendÀ 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àytại đây). Việcsử dụng file .mcho phép chúng taLư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ênkiemTraChanLe()).Tại sao lại dùngbienTamvànum2str? Vì yêu cầu của hàmdisplà bên trong nó chỉ có thể là một biến kiểustring(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ểustringthôi. Ta cần chuyểnxtừ 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ểnxvề 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ệnhplot.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.