Bài giảng Matlab căn bản - Thái Duy Quý (Phần 2)

CHƯƠNG 4. LẬP TRÌNH GIAO DIỆN NGƯỜI DÙNG (GUI)

Chương này sẽ hướng dẫn người dung lập trình bằng cửa sổ, đây là dạng lập trình giao

diện người dùng thường thấy ở các ngôn ngữ cấp cao hiện nay.

1. Cách thực hiện

Mở phần mềm Matlab, gõ lệnh sau vào cửa sổ Command:

>> guide

Cửa sổ GUIDE Quick Start hiện ra như sau:

Trong cửa sổ GUIDE Quick Start có nhiều lựa chọn theo các khuôn mẫu như sau:

Thẻ Create New GUI: Tạo một hộp thoại GUI mới theo một trong các loại sau:

- Blank GUI (Default): Hộp thoại trống, không có một điều khiển uicontrol nào cả.

- GUI with Uicontrols: Hộp thoại với một vài uicontrol như button,.

- GUI with Axes and Menu: Hộp thoại với một uicontrol axes và button, các menu để hiển

thị đồ thị.

- Modal Question Dialog: Hộp thoại đặt câu hỏi Yes, No.

Thẻ Open Existing GUI: giúp người dùng mở một project có sẵn đã tạo trước.

Trong hướng dẫn này, khi tạo một project mới sẽ chọn Blank GUI

pdf 29 trang yennguyen 6800
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Matlab căn bản - Thái Duy Quý (Phần 2)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Matlab căn bản - Thái Duy Quý (Phần 2)

Bài giảng Matlab căn bản - Thái Duy Quý (Phần 2)
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 43 
y = vy*t; 
Tính các thành phần của vec tơ vận tốc và hiển thị bằng các dùng quiver3: 
u = gradient(x); 
v = gradient(y); 
w = gradient(z); 
scale = 0; 
quiver3(x, y, z, u, v, w, scale) 
axis square 
17. Kết chương 
Trong chương này, sinh viên đã làm quen với một số lệnh cơ bản trong vẽ đồ thị dựa trên 
dữ liệu. Chương cũng giúp sinh viên làm quen với một số lệnh vẽ đồ thị 3D và nâng cao. 
Chương tiếp theo sẽ giúp sinh viên làm quen với phương pháp lập trình giao diện đồ họa 
người dùng trên Matlab 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 44 
CHƯƠNG 4. LẬP TRÌNH GIAO DIỆN NGƯỜI DÙNG (GUI) 
Chương này sẽ hướng dẫn người dung lập trình bằng cửa sổ, đây là dạng lập trình giao 
diện người dùng thường thấy ở các ngôn ngữ cấp cao hiện nay. 
1. Cách thực hiện 
Mở phần mềm Matlab, gõ lệnh sau vào cửa sổ Command: 
>> guide 
Cửa sổ GUIDE Quick Start hiện ra như sau: 
Trong cửa sổ GUIDE Quick Start có nhiều lựa chọn theo các khuôn mẫu như sau: 
Thẻ Create New GUI: Tạo một hộp thoại GUI mới theo một trong các loại sau: 
- Blank GUI (Default): Hộp thoại trống, không có một điều khiển uicontrol nào cả. 
- GUI with Uicontrols: Hộp thoại với một vài uicontrol như button,... 
- GUI with Axes and Menu: Hộp thoại với một uicontrol axes và button, các menu để hiển 
thị đồ thị. 
- Modal Question Dialog: Hộp thoại đặt câu hỏi Yes, No. 
Thẻ Open Existing GUI: giúp người dùng mở một project có sẵn đã tạo trước. 
Trong hướng dẫn này, khi tạo một project mới sẽ chọn Blank GUI 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 45 
2. Lập trình giao diện với Blank GUI 
Giao diện rất giống với các chương trình lập trình giao diện như Visual Basic, Visual 
C++, C# ... Di chuột qua các biểu tượng ở bên trái sẽ thấy tên của các điều khiển. 
Sau đây là một số điều khiển thường dùng: 
 Push Button: Là các nút bấm như nút OK, Cancel mà ta vẫn bấm (tương tự Button 
trong các ngôn ngữ bậc cao) 
 Slider: Thanh trượt có một con trượt chạy trên đó. 
 Radio Button: Chọn lựa 1 điều kiện trong một tập điều kiện. 
 Check Box: Chọn lựa nhiều điều kiện trong một tập điều kiện. 
 Edit Text: Là một ô cho người dung nhập văn bản 
 Static Text: Là ô hiễn thị văn bản của người dùng 
 Pop-up Menu: Người dùng chọn một đối tượng trong danh sách sổ xuống. 
 List Box: Cho phép người dùng chọn 1 đối tượng trong danh sách hiện ra. 
 Axes: Thực hiện vẽ hệ trục tọa độ. 
 Panel: Là một dạng phân ô của các thành phần trên giao diện. 
 Button Group: Nhóm các button. 
 ActiveX Control: Các Control do người dung nhúng thêm vào. 
 Toggle Button: Dạng nút bấm bật - tắt. 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 46 
Phía trên cùng là menu, trọng nhất là menu Tools có: 
 Run (Ctr + T): Chạy chương trình đã viết, sẽ báo lỗi nếu chương trình chứa lỗi. Để 
chạy được chương trình, hệ thống bắt buộc người dùng phải lưu lại ứng dụng. 
 Align Object: dùng để sắp xếp các điều khiển và căn lề cho các đối tượng. 
 Grid and Rulers: Hiễn thị lưới và thước trong giao diện. 
 Menu Editor: Tạo menu cho ứng dụng. 
 Tab Order Editor: sắp xếp thứ tự các xuất hiện chuột lên đối tượng khi nhấn phím 
Tab lúc chạy ứng dụng. 
 Gui Options: Một số lựa chọn cho giao diện GUI. 
Khi ta lưu lại (vào File\Save hoặc nhấn Ctrl + S) với một tên nào đó (ví dụ: vidu), khi đó hệ 
thống đồng thời xuất hiện hai cửa sổ là cửa sổ soạn thảo và cửa sổ thiết kế. Trong thư mục 
vừa lưu sẽ có hai tập tin: 
 vidu.fig: Tập tin này chứa giao diện của chương trình, là nơi cho người dung thiết kế 
bằng cách kéo thả các điều khiển để tạo ứng dụng. 
 vidu.m: tập tin này chứa các mã thực thi cho chương trình như các hàm khởi tạo, các 
hàm callback... 
3. Kéo thả và thiết lập thuộc tính cho các điều khiển 
Ví dụ: Thực hiện chương trình cho người dùng nhập vào hai số, khi nhấn nút sẽ hiễn thị 
kết quả phép tính cộng của 2 số vừa nhập. 
Thực hiện các bước như sau: 
- Tạo một Blank GUI: Vào File\New\GUI chọn Blank GUI, đặt tên là vidu.fig 
- Kéo thả vào trong giao diện 2 Edit Text, 1 Static Box và 1 Push Button. 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 47 
Click đôi vào Edit Text để xuất hiện cửa sổ các thuộc tính của điều khiển như sau: 
Một số thuộc tính quan trọng nhất của Edit Box bao gồm: 
 Tag: đây là tên của điều khiển. Dùng tên này có thể thao tác đến các thuộc tính của 
đối tượng. Ở đây ta đặt tên là: txtX. 
 String: là xâu kí tự hiện lên Edit Box. Có thể để trống hoặc thiết lập bằng 0. 
Tương tự, thay đổi thuộc tính tag của Edit Box thứ 2 thành txtY, Static Box cũng tương tự 
thành txtKetQua. 
Với Push Button: thuộc tính tag đặt là cmdCalculate, String đặt là “ket qua” 
4. Viết lệnh cho chương trình 
Chương trình có tác dụng khi nhấn vào nút Push Button sẽ hiện lên kết quả ở Static Box. 
Vì thế sẽ phải viết vào hàm nào mà khi nhấn vào Push Button sẽ gọi. Chính là hàm 
Callback. Điều khiển nào cũng có hàm callback, giống như hàm ngắt trong vi điều khiển 
vậy. 
Click chuột phải vào nút “+” chọn View Callbacks\ Callback: 
Trong phần này còn một số hàm nữa sẽ giới thiệu sau. 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 48 
Nhìn vào định nghĩa của hàm trong Editor ta sẽ thấy là: hàm này được thực hiện khi nhấn 
vào nút buttonCalculate. 
Hàm có một số tham số: 
 hObject : handle của điều khiển buttonCalculate 
 eventdata: dữ liệu khi sự kiện xẩy ra. 
 handles: là một cấu trúc chứa tất cả các điều khiển và dữ liệu người dùng, dùng để 
truy xuất các điều khiển khác. 
Qua thuộc tính tag của các điều khiển ta sẽ truy suất đến thuộc tính string của các điều 
khiển txtX, txtY, txtKetQua bằng lệnh get và set. 
get(handles.tag_dieu_khien, 'ten thuoc tinh'); 
set(handles.tag_dieu_khien, 'ten_thuoc_tinh', gia_tri); 
Một hàm quan trọng nữa biến từ chuỗi sang số: str2num và num2str để biến trở lại. Vậy 
chúng ta sẽ viết hàm như sau: 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 49 
Nhấn nút Run kiểm tra kết quả: 
5. Các tính chất của các điều khiển trong GUIDE Matlab 
Để hiện cửa sổ các tính chất Property Inspector của một điều khiển, có 3 cách sau: 
 Nhấn đúp chuột vào mỗi điều khiển. 
 Chọn điều khiển rồi vào menu View, chọn Property Inspector. 
 Chọn điều khiển rồi nhấn vào biểu tượng Property Inspector, gần chỗ M-file editor. 
Khi đó, cửa sổ Property Inspector sẽ hiện ra. Khi nhấn vào các điều khiển khác thì cửa sổ 
này sẽ hiện thông tin tương ứng cho điều khiển đó. 
Một vài tính chất chung của các điều khiển mà các bạn nên chú ý: 
Tính chất (property) Giá trị (value) Mô tả 
Enable on, inactive, off 
Mặc định là: on 
Xác định khi nào thì điều khiển hiển thị lên giao 
diện. Đặt = off, thì điều khiển sẽ không xuất hiện. 
Max Mặc định là 1. Giá trị lớn nhất, tùy thuộc vào từng điều khiển. 
Min Mặc định là 0 Giá trị nhỏ nhất, tùy thuộc vào từng điều khiển. 
Position Vector gồm 4 phần tử 
(left, bottom, width, 
height) 
Kích thước của điều khiển và vị trí tương đối của 
nó với điều khiển chứa nó. 
String Chuỗi hiển thị 
Units Đơn vị đo lường dùng trong xác định vị trí. 
Value Vô hướng hoặc vector Giá trị của component, tùy thuộc vào từng 
component. 
Ngoài ra, thuộc tính cực kì quan trọng mà các bạn phải chú ý là tag. Thuộc tính này chính 
là tên của đối tượng, là duy nhất dùng để phân biệt đối tượng này và đối tượng khác. 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 50 
6. Tổng quan về hàm Callback trong lập trình GUI 
Sau khi tạo giao diện xong thì phần lập trình rất quan trọng, chính là lập trình các hành vi 
của các điều khiển để đáp ứng lại các sự kiện như nhấn phím, kéo thanh trượt, khi chọn 
menu, ... đó chính là các hàm Callback (giống như các hàm sự kiện trong các ngôn ngữ 
khác). 
a. Thế nào là hàm Callback 
Callback là một hàm mà khi viết miêu tả hành vi của một thành phần GUI xác định hoặc 
là của chính GUI figure, điều khiển các hành vi của chúng bằng cách thực hiện một số hành 
động được viết trong hàm, để đáp ứng lại một sự kiện của chính thành phần đó. Cách lập 
trình này thường gọi là: Lập trình lái sự kiện (event driven programming). 
Ví dụ, khi bạn nhấn một Button thì vẽ đồ thị, tính tổng,  Vậy thì khi nhấn phím thì hiển 
nhiên đã gọi hàm Callback nhấn phím của Button đó, và trong hàm Callback này sẽ thực 
hiện lệnh vẽ đồ thị, tính tổng,  tương ứng. 
b. Các loại hàm Callback 
Mỗi thành phần có nhiều hàm Callback khác nhau, sau đây liệt kê các loại hàm Callback 
và các điều khiển có thể có hàm này. 
Callback property Sự kiện xảy ra Thành phần có hàm này 
ButtonDownFcn Thực hiện khi người dùng nhấn 
chuột lên hoặc trong 5 pixels của 
component hoặc figure. Nếu là 
component thì thuộc tính Enable phải 
on ( tất nhiên rùi ). 
Axes,figure,button 
group,panel,user 
interfacecontrols 
Callback Hành động của các component, ví dụ 
như thực thi khi người dùng click lên 
Push Button hoặc chọn một thành 
phần menu. 
Contextmenu, 
menu,userinterface 
controls 
CloseRequestFcn Thực thi trước khi figure đóng. Figure 
CreateFcn Tạo các thành phần.Nó được dùng để 
khởi tạo các thành phần khi nó được 
Axes,figure,button 
group,contextmenu, 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 51 
tạo ra. Nó thực thi sau khi thành 
phần hoặc figure được tạo, nhưng 
trước khi hiển thị lên trên giao diện 
người dùng. 
menu,panel,user 
interfacecontrols 
DeleteFcn Xóa thành phần. Nó có thể được 
dùng để thực hiện hành động xóa bỏ 
trước khi component hoặc figure bị 
hủy bỏ. 
Axes,figure,button 
group,contextmenu, 
menu,panel,user 
interfacecontrols 
KeyPressFcn Thực thi khi người dùng nhấn một 
phím trong keyboard và component 
hoặc figure của hàm callback đó 
đang được focus. 
Figure,userinterface 
controls 
KeyReleaseFcn Thực thi khi người dùng nhả một 
phím đang bấm và figure vẫn đang 
được focus. 
Figure 
ResizeFcn Thực thi khi người dùng thay đổi 
kích thước của panel, button group, 
hoặc figure với điều kiện thuộc tính 
Resize của figure = on. 
Buttongroup,figure, panel 
SelectiononChangeFcn Thực thi khi người dùng lựa chọn 
một nút Radio Button khác hoặc 
toggle button khác trong thành phần 
Button Group. 
Buttongroup 
WindowButtonDownFcn Thực thi khi bạn nhấn chuột (trái 
hoặc phải) trong khi con trỏ vẫn nằm 
trong vùng cửa sổ figure. 
Figure 
WindowButtonMotionFcn Thực thi khi bạn di chuyển con trỏ 
trong vùng cửa sổ figure. 
Figure 
WindowButtonUpFcn Ban đầu bạn nhấn chuột (trái, hoặc 
phải) thì khi nhả phím đó ra thì hàm 
Figure 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 52 
này sẽ được gọi. 
WindowScrollWheelFcn Thực thi khi nút cuộn của chuột cuộn 
trong khi figure vẫn trong tầm focus. 
Figure 
7. Chương trình Calculator 
Có rất nhiều cách để tạo ra một chương trình "Máy tính bấm tay" hay Calculator. Ví dụ 
sau đây sẽ hướng dẫn tạo ra một chương trình máy tính bấm tay đơn giản sử dụng kỹ thuật 
trùng "Callback" trong lập trình giao diện GUI. 
 Sử dụng GUIDE, thiết kế giao diện của chương trình như sau: 
Đặt thuộc tính cho các đối tượng như sau: 
- Edit Text: Tag=edit1 (mặc định); FontSize=20; Enable=Inactive; HorizontalAligment=right;... 
- Đặt thuộc tính Tag của tất cả các nút là: pushadd (ngoại trừ 3 nút: "=" và "%" và "C") 
- Nút "=": Tag=pushequal 
- Nút "%": Tag=pushpercent 
- Nút "C": Tag=pushclear 
Điều chỉnh kích thước và sử dụng công cụ "Align Objects" để sắp xếp vị trí các nút như hình 
trên. 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 53 
Lưu lại fig-file với tên mycalc.fig, trong file mycalc.m tìm các hàm tương ứng và thêm vào 
các lệnh sau: 
% --- Executes on button press in pushadd. 
function pushadd_Callback(hObject, eventdata, handles) 
textstr = get(handles.edit1,'String'); 
addstr = get(hObject,'String'); 
newstr = strcat(textstr, addstr); 
set(handles.edit1,'String', newstr) 
% --- Executes on button press in pushequal. 
function pushequal_Callback(hObject, eventdata, handles) 
textstr = get(handles.edit1,'String'); 
try 
 set(handles.edit1,'String', eval(textstr)) 
catch err 
 set(handles.edit1,'String', err.message) 
end 
% --- Executes on button press in pushpercent. 
function pushpercent_Callback(hObject, eventdata, handles) 
textstr = get(handles.edit1,'String'); 
try 
 set(handles.edit1,'String', 100*eval(textstr)) 
catch err 
 set(handles.edit1,'String', err.message) 
end 
% --- Executes on button press in pushclear. 
function pushclear_Callback(hObject, eventdata, handles) 
set(handles.edit1,'String','') 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 54 
Lưu lại file mycalc.m và chạy chương trình. Sử dụng chuột click các nút để nhập vào một 
phép tính, sau đó Click nút "=" để thu được kết quả: 
Cuối cùng, Click nút "C" để bắt đầu một phép tính khác. 
8. Kết chương 
Trong chương này, sinh viên tìm hiểu các vấn đề liên quan đến lập trình giao diện người 
dùng. Thông qua tìm hiểu hàm Callback, kết hợp với ví dụ về chương trình Calculator sinh 
viên sẽ có cái nhìn rõ hơn về lập trình giao diện người dùng GUI. 
Chương tiếp theo sẽ giới thiệu một số phương pháp lập trình xử lý với Matlab. 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 55 
CHƯƠNG 5. MỘT SỐ PHƯƠNG PHÁP XỬ LÝ TÍNH TOÁN 
TRÊN MATLAB 
1. Tính định thức của ma trận 
Cho một ma trận vuông cấp n. Ta cần tìm định thức của nó. Trước hết nhắc lại một số 
tính chất quan trọng của định thức: 
- Nếu nhân tất cả các phần tử của một hàng (hay cột) với k thì định thức được nhân với k. 
- Định thức không đổi nếu ta cộng thêm vào một hàng tổ hợp tuyến tính của các hàng 
còn lại. 
- Nếu đổi chỗ hai hàng cho nhau thì định thức đổi dấu 
Trước khi đi đến định nghĩa về định thức ta tìm hiểu khái niệm về hoán vị và phép thế. 
Cho một dãy số, nếu ta đổi chỗ các số trong dãy cho nhau thì ta đã thực hiện một phép hoán 
hoán vị. Ví dụ 123, 132,.. là các hoán vị của dãy số {1, 2, 3}. Trong hoán vị 
α1α2αiαjαn ta nói αi làm một nghịch thế với αj nếu i αj. Ví dụ trong hoán 
vị 1432 số 4 làm với số 3 một nghịch thế, số 4 làm với số 2 một nghịch thế, số 3 làm 
với số 2 một nghịch thế. Một hoán vị gọi là chẵn nếu tổng số nghịch thế trong hoán vị 
đó là một số chẵn; một hoán vị gọi là lẻ trong trường hợp ngược lại. Như vậy 1432 là một 
hoán vị lẻ. 
Cho một dãy số, nếu ta tạo ra một dãy số mới bằng cách đổi chỗ các phần tử cho nhau 
thì ta đã thực hiện một phép thế. 
Ví dụ 
3241
3412
p là phép thế biến 2 thành 1, 1 thành 4, 4 thành 2 và 3 thành 3. 
Một phép thế gọi là chẵn nếu tính chẵn lẻ của dòng trên và dòng dưới như nhau và lẻ 
trong trường hợp ngược lại. Phép thế trên là phép thể lẻ. 
Cho ma trận vuông [A] cấp n. Các phần tử của hàng thứ i là ai,1, ai,2,,ai,n. Các 
phần tử của cột thứ j là a1,j, a2,j ,, an,j. Ta xem hàng thứ i là một vector, kí hiệu là Ai* và cột 
thứ j cũng là một vec tơ, kí hiệu là A*j. Với mỗi phép thế: 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 56 
n
n
jjj
iii
p
...
...
21
21 (1) 
ta lập tích: 
nn jijiji
aaa ...
2211
 (2) 
Trước mỗi tích (2) ta đặt dấu + nếu và dấu ‐ nếu phép thế (1) lẻ. Sau đó ta lập tổng của n! 
tích có dấu như vậy, nghĩa là tổng: 
 
p
jijiji
pt
nn
aaa ...)1(
2211
)( (3) 
trong đó: 
 t(p) = 1 nếu phép thế p lẻ 
 t(p) = 0 nếu phép thế p chẵn 
Tổng (4) được gọi là định thức của ma trận vuông [A], cấp n. 
Ta xây dựng hàm determinant() để tính định thức của ma trận theo định nghĩa: 
 function d = determinant(A) 
% DETERMINANT tinh dinh thuc theo dinh nghia. 
[m, n] = size(A); 
if ( m ~= n ) 
 fprintf ( ʹ\nʹ ); 
 fprintf ( ʹ Chi ma tran vuong moi co dinh thuc!\nʹ ); 
 return 
end 
p = zeros(1, n); 
nf = prod([1:n]); 
d = 0.0; 
for i = 1:nf 
 p = nextperm(p); 
 s = permsign(p); 
 x = diag(A([1:n],p)); 91 
 d = d + s*prod(x); 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 57 
end 
function psign = permsign(p) 
% PERMSIGN tra ve dau phep the . 
% +1, neu phep the chan, 
% ‐1, neu phep the le. 
n = length ( p ); 
psign = 1; 
for i = 1:n‐1 
 j = i; 
 while (p(j) ~= i) 
 j = j + 1; 
 end 
 if ( j ~= i ) 
 temp = p(i); 
 p(i) = p(j); 
 p(j) = temp; 
 psign = ‐ psign; 
 end 
end 
function q = nextperm(p) 
n = length(p); 
q = p; 
if(n == 1) 
 q = 1; 
elseif (q == 0) 
 q = [1:n]; 
else 
 i = n ‐ 1; 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 58 
 while (q(i) > q(i+1)) 
 i = i ‐ 1; 
 if (i == 0) 
 break; 92 
 end 
 end 
 if (i == 0) 
 q = [1:n]; 
 else 
 j = n; 
 while (q(j) < q(i)) 
 j = j ‐ 1; 
 end 
 t = q(j); 
 q(j) = q(i); 
 q(i) = t; 
 q(i+1:n) = q(n:‐1:i+1); 
 end 
end 
 Để tính định thức ta dùng chương trình ctdeterminant.m: 
clear all, clc 
%a = [1 2; 3 5]; 
a = [1 3 5; 3 4 6; 4 6 3]; 
d = determinant(a) 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 59 
2. Nghịch đảo ma trận bằng cách dùng Minor 
 Cho ma trận [A], ta có: 
]det[
)( ,,
1
A
A
a ijji 
Trong đó: (a-1)i,j là phần tử ở hàng i, cột j của ma trận [A]‐1 , Ai,j là phần bù đại số của 
phần tử ai,j của ma trận [A]. 
Ta xây dựng hàm minorinv() để thực hiện thuật toán trên: 
 function c = minorinv(a) 
% Tim ma tran nghich dao bang thuat toan minor 
n = size(a, 1); 
ms = det(a); 
for i = 1:n 
 for k = 1:n 
 b = cofactor(a, i, k); 
 c(i, k) = b/ms; 
 end 
end 
c = transpose(c); 
Để tìm ma trận nghịch đảo ta dùng chương trình ctminorinv.m: 
clear all, clc; 
a = [1 3 5; 3 4 9; 5 9 6]; 
b = minorinv(a) 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 60 
3. Nghịch đảo ma trận bằng thuật toán gauss-Jordan. 
Cho ma trận [A] và ma trận đơn vị [E] tương ứng. Dạng của ma trận [E] cấp 4, là: 
1000
0100
0010
0001
E 
 Như vậy, vấn đề là ta cần tìm ma trận [A]‐1. Phương pháp loại trừ để nhận được ma 
trận nghịch đảo [A]‐1 được thực hiện qua n giai đoạn, mỗi một giai đoạn gồm hai bước. 
Đối với giai đoạn thứ k: 
- Chuẩn hoá phần tử akk bằng cách nhân hàng với nghịch đảo của nó. 
- Làm cho bằng không các phần tử phía trên và phía dưới đường chéo cho đến cột thứ k. 
Khi k = n thì [A](k) sẽ trở thành ma trận đơn vị và [E] trở thành [A]‐1 
Ta xây dựng một hàm nghịch đảo invmat(): 
function x = invmat(a) 
% Nghich dao ma tran a 102 
%Cu phap: x = invmat(a) 
k = size(a, 1); 
n = k; 
b = eye(n); 
a = [a, b]; 
i = 1; 
while i<=n 
 if a(i, i) ~= 0 
 c = a(i, i); 
 a(i, i:2*n) = a(i, i:2*n)/c; 
 end 
 for k = 1:n 
 if k~=i 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 61 
 c = a(k, i); 
 a(k, i:2*n) = a(k, i:2*n)‐ a(i, i:2*n)*c; 
 end 
 end 
 i = i+1; 
end 
x(:, 1:k) = a(:, (1+k):(2*k)); 
Để nghịch đảo ma trận: 
211
121
112
][A 
ta dùng chương trình ctinvmat.m: 
 clear all, clc 
a = [ 2 1 1; 1 2 1; 1 1 2]; 
b = invmat(a) 
4. Lập trình giao diện: Giải phương trình bậc 2 
Chạy Matlab, vào Menu File\New\GUI sẽ thấy hiện ra hộp thoại sau: 
Chọn Blank GUI, nhấn OK. 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 62 
Trong hộp thoại hiện ra, kéo thả các điều khiển Push button, Edit Text và Static 
Text vào figure như giao diện sau: 
Mỗi điều khiển đều có nhiều thuộc tính, có 2 thuộc tính quan trọng nhất là: Tag, 
String. Tag là thuộc tính chỉ địa chỉ của điều khiển (dùng để gọi khi cần). String là thuộc 
tính chứa nội dung (sẽ được hiển thị ra ngoài) của điều khiển. Sau đây ta đặt các thuộc tính 
này: 
- Push button 1: 
+ Tag : start 
+ String : Bat dau 
- Push button 2: 
+ Tag : close 
+ String : Close 
- Edit Text 1: 
+ Tag : heso_a 
+ String : (xóa trắng) 
- Edit Text 2: 
+ Tag : heso_b 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 63 
+ String : (xóa trắng) 
- Edit Text 3: 
+ Tag : heso_c 
+ String : (xóa trắng) 
- Edit Text 4: 
+ Tag : nghiem_x1 
+ String : (xóa trắng) 
- Edit Text 5: 
+ Tag : nghiem_x2 
+ String : (xóa trắng) 
- Static Text 1: (Đối với các Static Text thuộc tính Tag không quan trọng, trừ các trường 
hợp đặc biệt) 
+ String : Giai phương trinh bac 2: ax2 + bx + c = 0 
- Static Text 2: 
+ String : a = 
- Static Text 3: 
+ String : b = 
- Static Text 4: 
+ String : c = 
- Static Text 5: 
+ String : Ket luan 
- Static Text 6: 
+ Tag : kl 
+ String : (xóa trắng) 
- Static Text 7: 
+ String : x1 = 
- Static Text 8: 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 64 
+ String : x2 = 
- figure: (click đúp vào nền của figure): 
+ Tag : fig1 
+ Name : Giai phương trinh bac 2 
Sau khi đặt các thuộc tính, căn chỉnh (sử dụng chuột hoặc công cụ Align Objecs) 
được figure có dạng như sau: 
Lưu lại figure (Menu File\Save) dưới tên GPTB2.fig. Sau đó Matlab tự sinh file 
GPTB2.m; trong file này tìm hàm start_callback và đánh vào các dòng lệnh sau: 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 65 
Hàm set là hàm đặt thuộc tính cho điều khiển. 
Hàm get là hàm lấy giá trị thuộc tính của điều khiển 
Hàm str2double là hàm biến chuỗi thành số 
Cuối cùng ghi lại file m (GPTB2.m) và chạy chương trình (nhấn F5 hoặc nút run hình 
tam giác màu xanh). Nhập vào các hệ số a, b, c và click nút Bat dau để xem kết quả. 
5. Kết chương 
Trong chương này, sinh viên đã làm quen với một số phương pháp lập trình phức tạp trên 
Matlab. Thông qua các ví dụ, sinh viên sẽ có điều kiển hiểu rõ hơn các phương pháp xử lý 
lập trình trên Matlab hiện nay. 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 66 
PHỤ LỤC 
Hướng dẫn sử dụng công cụ Simulink 
Simulink là một công cụ trong Matlab dùng để mô hình, mô phỏng và phân tích các 
hệ thống động với môi trường giao diện sử dụng bằng đồ họa. Việc xây dựng mô hình được 
đơn giản hóa bằng các hoạt động nhấp chuột và kéo thả. Simulink bao gồm một bộ thư viện 
khối với các hộp công cụ toàn diện cho cả việc phân tích tuyến tính và phi tuyến. 
Simulink là một phần quan trọng của Matlab và có thể dễ dàng chuyển đổi qua lại trong 
quá trình phân tích, và vì vậy người dùng có thể tận dụng được ưu thế của cả hai môi 
trường. 
Có thể mở Simulink bằng 2 cách: 
- Click vào biểu tượng như hình dưới (Simulink icon) 
- Từ cửa sổ lệnh, đánh lệnh simulink và enter 
Cửa sổ thư viện Simulink sẽ hiển thị: 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 67 
Tạo một mô hình mới bằng cách: 
- Click vào icon New model hoặc gõ Ctrl-N 
- Menu File\New\Model 
Cửa sổ xây dựng mô hình xuất hiện: 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 68 
Tạo các khối: từ thư viện Simulink chọn khối cần dùng, nhấp chuột vào và kéo ra ra cửa 
sổ mô hình: 
Lưu trữ mô hình bằng lệnh Save (File\Save) hoặc nhấp vào icon Save. Dịch chuyển các 
khối đơn giản bằng cách nhấp vào khối đó và kéo thả: 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 69 
Nối tín hiệu: Đưa con chuột tới ngõ ra của khối (dấu “>”), khi đó con chuột sẽ có dạng 
“+”. Kéo rê chuột tới ngõ vào của một khối khác và thả ra để kết nối tín hiệu. 
Mô phỏng mô hình: Dùng lệnh Start (Menu Simulation\Start) hoặc nhấp chuột vào 
icon Start 
Xem tín hiệu từ Scope: nhấp đôi vào khối Scope: 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 70 
Chỉnh thông số của một khối bằng cách nhấp đôi vào khối cần chỉnh 
Trước khi mô phỏng mô hình Simulink, chúng ta cần đặt các thông số mô phỏng bằng 
cách chọn menu Simulation  Configuration Parameters 
Ở cửa sổ Configuration Parameters, chúng ta có thể đặt một số thông số như Start time, 
Stop time (second – giây), và phương pháp giải Solver, Solver options,.. sau đó nhấn nút OK 
Giáo trình Matlab căn bản Thái Duy Quý 
Trang 71 
TÀI LIỆU THAM KHẢO 
[1].Phan Thanh Tao, Giáo trình Matlab, Đại học Đà Nẵng, 2004 
[2].Trần Văn Chính, Matlab toàn tập, Đại học Bách Khoa hà Nội, 2005. 
[3].Ebook, The Student Edition of Matlab, Mathworks, Inc; 
[4].Brian R. Hunt Ronald L. Lipsman JonathanM. Rosenberg, A Guide to MATLAB 
for Beginners and Experienced Users, Cambridge University Press, 2001. 
[5].  
Và một số tài liệu tham khảo khác trên Internet. 

File đính kèm:

  • pdfbai_giang_matlab_can_ban_thai_duy_quy_phan_2.pdf