Vi du chi tiet giai thich lap trinh gui trong matlab
1. TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
BÀI TẬP LỚN
MÔN: MATLAB VÀ ỨNG DỤNG
ĐỀ TÀI: LẬP TRÌNH GUIDE GIAO DIỆN
Giảng viên hướng dẫn: ĐỒNG SĨ THIÊN CHÂU
Sinh viên thực hiện: NGUYỄN LƯƠNG THÀNH
MSSV:
40900040
Lớp:
09040003
TP.Hồ Chí Minh ngày 26 /10 /2012
2.
3. Lời nói đầu:
Ngày xưa những công cụ tính toán thủ công bằng tay, hoặc những bàn tính cổ điển
để hỗ trợ toán học, giờ đây với sự đổi mới của ngành điện tử, công nghệ thông tin, các công cụ
tính toán hỗ trợ các ngành kĩ thuật hiện đại ra đời, với sự mạnh mẽ và nhanh chóng của các công
cụ phần mềm, các công cụ phần lớn đã thay thế cho việc thực hiện thủ công, giúp kiểm tra kết
quả một cách nhanh chóng, giảm chi phí. Cùng với đó chính là các phần mêm… các công cụ hỗ
trợ kĩ thuật như phần mềm Win cc, Protell, Protues, Mlap, Matlab…. Là những công cụ không
thể thiếu trong ngành kĩ thuật. sau đây mình sẽ giới thiệu phần mềm Matlab, một công cụ hỗ trợ
tính toán và mô phỏng hệ thống hết sức trực quan và chính xác.
Hẵn là phần mềm Matlab hiện nay không còn xa lạ gì với người dùng, nó là một
công cụ hỗ trợ tính toán và mô phỏng thực tế rất mạnh, ngoài các tính năng để thực hiện những
điều đó, Matlab còn hỗ trợ tạo giao diện người dùng (GUI), Chúng ta lần lượt tìm hiểu ứng dụng
từ cơ bản để hiểu rõ được dao diện GUI là gì, làm thế nào để bắt đầu với GUI…
Với đề tài về giao diện GUI chúng ta sẽ đi sâu vào nghiên cứu ứng dụng và phát
triển GUI, phát triển giao diện người dùng.
[Type text]
Page 1
4. Đề tài - bài 1:
Viết giao diện bao gồm những yêu cầu sau:
1) Cho phép chọn thực thi một trong những hàm sau: y=sin(x), y=cos(x), y=tg(x),
y=cotg(x), y=arcsin(x), y=arcos(x), y=arctg(x), y=arccotg(x), y=sinh(x), y=cosh(x),
y=tgh(x), y=cotgh(x)
2) Cho phép chọn nhập/hiển thị theo độ hoặc Radian.
3) Cho phép nhập khoản giá trị của x
4) Hiển thị đồ thì của hàm được chọn theo giá trị của x nhập vào ở câu 3 lên giao diện,
có nút cho phép giữ hoặc xóa hình khi vẽ hàm mới.
[Type text]
Page 2
5. Phụ lục:
PHẦN 1: SƠ LƯỢC VỀ LẬP TRÌNH GIAO DIỆN NGƯỜI DÙNG (GUIDE) TRONG
MATLAB…………………………………………………………………………..........Trang 04
I.
II.
III.
GUI LÀ GÌ?
BẮT ĐẦU VỚI GUI!
CÁC BƯỚC CẦN THỰC HIỆN TRƯỚC KHI BẮT ĐẦU
PHẦN 2: BẮT ĐẦU THAO TÁC VỚI GUI …………………………………………..Trang 06
I.
II.
III.
KHỞI ĐỘNG GUI………………………………………………………….Trang 06
MÔ TẢ CHỨC NĂNG CÁC CÔNG CỤ TRONG GIAO DIỆN GUI…….Trang 07
CHỈNH SỬA HỘP THOẠI INSPECTOR…………………………………Trang 08
PHẦN 3: THIẾT KẾ GIAO DIỆN (GUI)……………………………………………..Trang 10
I.
II.
III.
THIẾT KẾ GIAO DIỆN…………………………………………Trang 10
MỘT VÀI THUỘC TÍNH CỦA ĐỐI TƯỢNG TRONG MENU
INSPECTOR…………………………………………………….Trang 11
MỘT VÀI CHỨC NĂNG MỞ RỘNG…………………………..Trang 14
PHẦN 4 : THỰC THI HÀM TRONG GUIDE………………………………………...Trang 17
I. GIAO DIỆN TRONG MFILE…………………………………………...Trang 17
II. MỘT SỐ HÀM TRONG GUI….………………………………………..Trang 18
III.
KHÁI NIỆM BIẾN HỆ THỐNG…………………………………...Trang 19
PHẦN 5: LẬP TRÌNH CÁC ĐỐI TƯỢNG……………………………………………Trang 20
I.
NÚT NHẤN DEGREE TRONG BẢNG SELECT INPUT……..Trang 20
II.
NÚT NHẤN DEGREE TRONG BẢNG SELECT INPUT……..Trang 21
III.
NÚT NHẤN DẤU = ……………………………………………Trang 21
IV.
EDIT TEXT NHÂP X…………………………………………...Trang 24
V.
NÚT NHẤN PLOT ……………………………………………..Trang 26
VI.
CHECK BOX HOLD ON VÀ GRID ON……………………….Trang 29
VII. NÚT NHẤN DEFAULT…………………………………………Trng 29
VIII. CHECKBOX COLOR ON………………………………………Trang 29
IX.
NÚT EXIT……………………………………………………….Trang 31
PHẦN 6: CÁCH SỬ DỤNG GIAO DIỆN……………………………………………..Trang 32
PHẦN 7: CHƯƠNG TRÌNH:…………………………………………………………..Trang 35
[Type text]
Page 3
7. PHẦN 1: SƠ LƯỢC VỀ LẬP TRÌNH GIAO DIỆN NGƯỜI DÙNG (GUIDE)
TRONG MATLAB
-
-
-
-
-
I. GUIDE LÀ GÌ
GUI (Graphical User Interface) là giao diện đồ họa có điều khiển bởi nhiều thanh công cụ
được người lập trình tạo sẵn, cho tương tác giữa người dùng là giao diện chương trình,
Mỗi chương trình được người lập trình tạp sẵn giao diện thực hiện một vài chức năng
được người lập tình tạo sẵn và giao tiếp với người sử dụng.
Ứng dụng của Matlab lập trình giao diện rất mạnh và dễ thực hiện, nó có thể tạo ra giao
diện người dùng tương tự VBB, C++…
GUI bao gồm đầy đủ các chương trình hỗ trợ như thực hiện phép toán LOGIC, mô phỏng
không gian 2D,3D, đọc hiển thị dữ liệu, liên kết đa phương tiện.Giao tiếp với người dùng
thông qua hình ảnh, các nút nhấn thực thi ...
Hầu hết GUI chỉ thực hiện (trả lời) lệnh người dùng thông qua các tác động của người
dùng lên giao diện, người sử dụng không cần biết cấu trúc chương trình vẫn có thể thực
hiện được. GUI được thực hiện thông qua các hàm CALLBACK. Khi người dùng tác
động lên giao diện bằng các cách khác nhau, hàm CALLBACK sẽ được gọi để thực thi.
II. BẮT ĐẦU VỚI GUI
Có 2 phương pháp để lập trình GUI
+ Cách đơn giản nhất là sử dụng công cụ có sẵn trong GUI Matlab để lập trình. Ưu điểm
của cách này là dễ thực hiện và các hàm FUNCTION được GUI tự tạo sẵn.
+ Cách này được lập trình từ siêu tệp Mfile bằng các hàm FUNCTION do người lập trình
tự viết, nó có ưu điểm là tùy biến cao. Tuy nhiên cách này khó hơn và đòi hỏi người lập
trình phải có hiểu biết sâu và trình độ.
Ở đây với những bài tập đơn giản về giao diện, ta thực hiện cách thứ nhất để lập trình
giao diện với nhưng công cụ được hỗ trợ sẵn trong Matlab
Khi thao tác trên giao diện chúng ta không thể thay đổi các hàm trong nó.
III.
CÁC BƯỚC CẦN THỰC HIỆN TRƯỚC KHI BẮT ĐẦU
Trước tiên để bắt đầu lập trình ta cần phải xác định mục đích của chương trình là gì?
Sau đó tiến hành xác định các bước thực hiện để mo phỏng giao diện người dùng sao cho
hợp lí và chính xác
Bước cuối cùng là viết chương trình và thực thi.
Sơ đồ sau đây mô phỏng trình tự thực hiện vơi GUI:
[Type text]
Page 5
8. Sơ đồ khối mô tả cách thức hoạt động của GUI khi thao tác trên giao diện
-
-
Khi bắt đầu với GUI, GUI tự động tạo ra các mã tập tin được thực thi bởi hàm Callback
function. GUI thao tác trên những kí tự mà người dùng nhập vào vào chuyển sang dạng số
học, nói cách khác, giao diện GUI tương tự như những lệnh thực thi trong Comment
Windowns.
Tất cả các hàm callback thực thi những lệnh chứa trong nó.
Chúng ta nên sử dụng chức năng HELP của Matlab để tìm hiểu them tất cả cách hàm thực
thi trong GUI, cách tạo và thao tác với GUI …
[Type text]
Page 6
9. PHẦN 2: BẮT ĐẦU THAO TÁC VỚI GUI
Đây là phiên bản Matlab R2011B, các phiên bản khác cũng có thể thao tác tương tự.
-
-
-
IV.
KHỞI ĐỘNG GUI
Thực hiện khởi động Matlab đến GUI theo hình sau:
+ Khởi động Matlab từ biểu tượng Matlab trên màn hình desktop
+ Trong cửa sổ Comment Windowns gõ lệnh “guide” và enter: ta được giao diện màn
hình như sau:
Chọn: Dòng “Blank GUI (Default)”: để tao một giao diện gui bắt đầu với giao diện trống.
Các dòng còn lại để khởi động GUI với một giao diện được tạo sẵn.
+ Chú ý: Trong Matlab GUI hỗ trợ sẵn hộp thoại công cụ “Modal Question Dialog” để
tạo ra giao diện với 2 nút tùy chọn “yes no question” để thực thi lệnh. Ta có thể ứng dụng
để tọa lệnh thoát khỏi chương trình bằng nút nhấn Exit.
Nhấp chọn OK để tạo một giao diện bắt đầu với giao diện trống. ta được hình ảnh giao
diện trong GUI như sau:
Trước khi tạo giao diện ta lưu File lại, Matlab sẽ tự động lưu 2 file, một file đuôi .m và
một file đuôi .fig. hoặc ta có thể nhấn F5, Matlab sẽ chuyển đường dẫn đến thư mục lưu
file, chọn nơi cần lưu và nhấn Save.
[Type text]
Page 7
10. V.
-
-
MÔ TẢ CHỨC NĂNG CÁC CÔNG CỤ TRONG GIAO DIỆN GUI
Trong giao diện trên chúng ta có thể thao tác để tùy biến các thanh công cụ phù hợp với
mục đích sử dụng.
Mô tả chức năng các công cụ cơ bản:
1) Nhấp chuột vào để thay đổi độ rộng của giao diện
2) Là nơi để cân chỉnh các nút, biểu tượng trên giao diện.
3) Là nơi để tạo giao diện con liên kết với giao diện chính.
4) Nút Play (Run) để thực thi chương trình.
Phía bên trái là nhóm các biểu tượng được Matlab GUI hỗ trỡ sẵn:
+ Push Button: là nút nhấn, khi nhấn vào sẽ thực thi lệnh trong cấu trúc hàm callback của
nó
+ Slider: là thanh trượt cho phép người dùng di chuyển thanh trượt để thục thi lệnh.
+ Radio Button: Nó giống như Check Box nhưng thường được sử dụng để tạo sự lựa
chọn duy nhất, tức là 1 lần chỉ được chọn 1 trong số các nhóm nhiều nút. Khi một ô được
chọn thì các ô còn lại trong nhóm bị bỏ chọn.
+ Check box: Sử dụng để đánh dấu tích (thực thi) vào và có thể check nhiều ô để thực thi
+ Edit Text: là nơi các kí tự được nhập vào từ người dùng, người dùng có thể thay đổi
được
+ Static Text: Là các kí tự được hiển thị thông qua các callback, hoặc thông thường để
viết nhãn cho các biểu tượng, người dùng không thể thay đổi nội dung.
[Type text]
Page 8
11. -
-
+ Pop-up Menu: mở ra danh sách các lực chọn khi người dùng nhấp chuột vào. Chỉ chọn
được 1 mục trong danh sách các mục.
+ List Box: hộp thoại danh sách cách mục, cho phép người dùng chọn một hoặc nhiều
mục.
+ Toggle Button: là nút nhấn có 2 điều khiển, khi nhấp chuột và nhả ra, nút nhấn được giữ
và lệnh thực thi, khi nhấp chuột vào lần thứ 2, nút nhấn nhả ra, hủy bỏ lệnh vừa thực thi.
+ Table: tạo ra một bảng tương tự trong Excel.
+ Axes: Đây là giao diện đồ họa hiển thị hình ảnh, nó có nhiều thuộc tính bao gồm: không
gian 2D (theo trục đứng và trục ngang), 3D (hiển thị không gian 3 chiều)
+ Panel: Tạo ra một mảng nhóm các biểu tượng lại với nhau giúp ta dễ kiểm soát và thao
tác khi di chuyển
+ Button Group: quản lí sự lựa chọn của nút Radio Button.
+ Active Control: Quản lí một nhóm các bút hoặc các chương trình liên quan với nhau
trong Active.
VI.
GIỚI THIỆU HỘP THOẠI INSPECTOR
Tất cả các hộp thoại bên trái vừa nêu trên để sử dụng, chúng ta nhấp chọn và kéo thả vào
vùng cần thiết kế, mỗi hộp thoại có các thông số chỉnh riêng, để chỉnh các thông số liên
quan đến hộp thoại nào ta nhấp đôi vào hộp thoại đó (hoặc click chuột phải chọn Property
Inspector) hộp thoại Inspector hiện ra như sau, dùng thanh trượt kéo xuống để xem hết
chức năng:
Phía bên trái của Menu Inspector là tên thuộc tính, có thể gọi thực thi các thuộc tính này
bằng các lệnh.
Phía bên trái là giá trị của thuộc tính, giá trị này do người dùng đặt, có thể thay đổi thông
qua các lệnh gọi (callback), hoặc được thiết lập trước.
[Type text]
Page 9
12.
[Type text]
Ở trên là sơ lược cơ bản về giao diện guide người dùng, sau đây sẽ trình bày chi tiết
cách tạo một giao diện thực tế với yêu cầu của bài toán đề ra.
Page 10
13. PHẦN 3: THIẾT KẾ GIAO DIỆN (GUI)
-
-
-
-
Trong phần này, giải thích các thông số trong Inspector đồng thời chỉnh sửa trên
từng hộp thoại sẽ được trình bày song song.
I. THIẾT KẾ GIAO DIỆN
Nhấn tổ hợp phím Ctrl + S để thực hiện lưu file, sau khi chọn đường dẫn để lưu file (Chú
ý không lưu file với các biến đặc biệt hoặc bằng các con số khởi đầu), nhấn save Matlab
sẽ tự động tạo ra 2 file gồm một file .m và một file .fig, trong đó file .m là Mfile chứa các
hàm Matlab đã tạo sẵn hỗ trợ giao diện.
Lần lượt kéo thả các nút như hình sau:
Mỗi hộp thoại có Inspector , bằng cách nhâp đúp chuột vào hoặc chuột phải chọn Property
Inspector.
Sau đây là hình ảnh được đánh số để đánh dấu từng thay đổi một:
[Type text]
Page 11
14. -
II. MỘT VÀI THUỘC TÍNH CỦA ĐỐI TƯỢNG TRONG MENU INSPECTOR
Sau đây là bảng mô tả các giá trị và thuộc tính của các hộp thoại trong hình, chúng ta tiến
hành thay đổi các giá trị tương ứng theo bảng sau:
STT
1
2
[Type text]
Tên thuộc tính
String
Fontsize
Giá trị thuộc tính
Select Function
10
String
sin
cos
tan
cotg
arcsin
arccos
arctan
arccotg
sinh
cosh
tanh
cotgh
Giải thích
Là Fontsize của String
Giá trị trong mọi ô String đều được hiển thị lên giao
diện, nó thường được dùng để làm nhãn chỉ dẫn.
Nó hiển thị khi được gọi bởi hàm, hoặc được thiết
lập trước từ người lập trình. Hình ảnh chi tiết minh
họa bên dưới (1)
Page 12
17. -
+ Sau khi viết xong, nhấn OK để lưu lại
Sauk hi chỉnh sửa các thông số ta dùng chuột để di chuyển các hộp thoại, bố trí hộp thoại
theo mong muốn, ta được giao diện như sau:
[Type text]
Page 15
18. -
III.
MỘT VÀI CHỨC NĂNG MỞ RỘNG
Chú ý, để tạo sự thẳng hàng, cột của các hộp thoại cho đẹp mắt ta làm như sau:
Nhấn giữ phím Ctrl và nhập vào các hộp thoại muốn chỉnh sửa, Trên Menu chọn Align
Objects
[Type text]
. Hộp thoại Align hiện ra như sau:
Page 16
19. -
-
Trong hộp thoại trên ta có thể cân chỉnh các nút, nhóm nút sao cho chúng thẳng hàng,
thẳng cột và đều nhau. Sau khi cân chỉnh nhấn nút Apply để lưu thay đổi.
Bây giờ ta thiết lập thuộc tính chung cho giao diện (toàn bộ vùn thiết kế hay nền giao
diện)
+ Nhấp đúp chuột vào bất cứ vị trí nào trên nền giao diện để vào hộp thoại Inspector
(hoặc trên menu chọn View -> Property Inspector), hộp thoại Inspector hiện ra như sau:
+ Thiết lập Tag là “exit”
Tiếp tục tùy chọn nâng cao , vào Menu Tools -> GUI Options
Hộp thoại hiện ra như sau :
-
Trên hộp thoại Resize behavior chọn dòng số 2 (Proportional), dòng này cho phép người
dùng thay đổi khích thước của giao diện và các đối tượng cũng tự động thay đổi kích
thước phù hợp với nền giao diện, nhấn OK để lưu thay đổi
[Type text]
Page 17
20. PHẦN 4 : THỰC THI HÀM TRONG GUIDE
-
Ở phần này từng câu lệnh sẽ được giải thích khi thực thi.
I. GIAO DIỆN TRONG MFILE
Khi đã cân chỉnh xong toàn bộ giao diện trong GUI, nhấn F5 (hoặc nhân tổ hợp phím
Ctrl + T hoặc nhấp vào biểu tượng
trên thanh Menu).
Khi Run, Matlab sẽ tự chạy file .m và hiển thị doa diện đồ họa lên màn hình. ở đây ta bắt
đầu thao tác với file .m
[Type text]
Page 18
21. -
-
-
-
Khi ta chưa thao tác trong Trong file .m xuất hiện như trên hình, trong đó, tất cả các hàm
function đều được Matlab hỗ trợ tạo sẵn các hàm chức năng có liên quan, ta chỉ việc thao
tác trên đó.
Mỗi sau một hàm bất kì đều có các chú thích bên dưới (sau dấu %), ta có thể xóa toàn bộ
chúng đi đễ dễ nhìn cũng không ảnh hưởng đến các hàm.
Trong Mfile có sẵn các hàm callback, ta có thể tìm trong Mfile các hàm liên quan để viết
câu lệnh, tuy nhiên, để nhanh hơn chúng ta có thể làm như sau:
+ Quay lại màn hình giao diện GUI vừa thiết kế, nhấp vào hộp thoại muốn thực thi hàm
callback, nhấp chuột phải chọn View Callbacks -> Callback, Như hình sau:
+ Sau đó hàm callback sẽ tự động được gọi và con trỏ chuột sẽ tìm đến vị trí của nó trong
Mfile.
Bây giờ khi muốn gọi một hàm nào ta cũng có thể thực hiện như trên. Sau đó tiến hành
viết câu lệnh cho nó.
II. MỘT SỐ HÀM TRONG GUI
Hàm callback được lập trình cho các nút button, checkbox, edit text… nhưng static text
và axes… thì không có hàm callback.
Mỗi một callback được viết với cấu trúc như sau:
function Tag_Callback(hObject, eventdata, handles)
-
-
Với Tag chính là giá trị của Tag mà ta đã đặt khi tạo giao diện. Các hàm chứa bên trong
callback bao gồm hObject, evendata,handles
+ hObject là hàm truy cập nội bộ của mỗi function riêng lẽ
+ Evendata là hàm xác đinh thuộc tính của function
+ Handles là hàm truy cập liên kết giữa các function, nó bao gồm tất cả các cấu trúc của
người dùng, được sử dụng để truy xuất qua các điều khiển khác.
Hàm Get cho phép ta gọi thuộc tính của đối tượng.
Hàm Set cho phép ta đặt giá trị cho thuộc tính của đối tượng
[Type text]
Page 19
22. III.
KHÁI NIỆM BIẾN HỆ THỐNG
Để dễ dàng trong việc tạo sự liên kết giữa các hàm callback với nhau, Matlab GUI hỗ
hợ một biến chung gọi là biến hế thống giúp các hàm callback đều sử dụng được, sau
đây là cách sử dụng:
Trước khi bắt đầu lập trình ta tìm dòng sau trong Mfile và them một dòng mới như sau:
(hình mình họa):
-
Giải thích: handles.unit_input lúc này là biến trung gian trong hệ thống, bất cứ hàm
callback nào cũng có thể sử dụng nó, ban đầu ta gán cho nó giá trị =0. Chúng ta phải đặt
nó ở hàm function OpeningFcn (xem hình) để biến này có thể được khởi động ngay khi
chương trình bắt đầu chạy.
Để lấy giá trị của nó ta chỉ việc viết câu lệnh tương tự như sau:
-
Hai hàm cơ bản nhất ta sẽ thường xuyên sử dụng đến là:
Biến hệ thống được lưu lại với lệnh:
Handles(hObject,handles)
Đặt lệnh trên ngay khi kết thúc hàm function mà ta đặt biến hệ thống
Biến hệ thống có thể có nhiều tùy ý nhưng không được trùng tên.
Ở phần cuối sẽ có ví dụ cụ thể để hiểu rõ sự liên hệ giữa các biến đơn lẻ và biến
hệ thống.
d=handles.unit_input; % gia tri dược lưu vào biến d
-
[Type text]
Page 20
23. PHẦN 5: LẬP TRÌNH CÁC ĐỐI TƯỢNG
I.
NÚT NHẤN DEGREE TRONG BẢNG SELECT INPUT
- Thực hiện thao tác như bước vừa nói trên (minh họa trong hình), hàm callback sẽ tự động
gọi:
Lần lượt viết các câu lệnh sau vào bên dưới:
b = str2num(get(handles.input,'string'));
handles.unit_input = b*pi/180;
guidata(hObject, handles)
Giải thích:
Câu lệnh 1: b = str2num(get(handles.input,'string'));
+ b ở đây là một biến được gán.
+ lệnh handles.input: dùng để truy cập đến thuộc tính của ô edit text có Tag là “input”
+ Lệnh Get dùng để lấy giá trị thuộc tính của String , Ở đây giá trị của String được nhập
từ bàn phím, Matlab sẽ hiểu nó là một chuỗi các kí tự.
get(handles.input,'string'))% lấy giá trị của string trong ô input
+ lệnh Str2num (hoặc str2double) là lệnh chuyển chuỗi kí tự thành một số để thực hiện
các phép toán logic
b = str2num(get(handles.input,'string')); % lấy chuỗi giá trị chứa
% trong ô input và chuyễn chuỗi đó thành số rồi lưu vào biến b.
Câu lệnh 2: handles.unit_input = b*pi/180;
+ lúc này b là một con số, do đó b*pi/180 là phép toán cho phép
+ handles.unit_input : là một biến chung có thể được sử dụng giữa các hàm callback
khác nhau.
handles.unit_input = b*pi/180;
có nghĩa giá trị của biến handles.unit_input = b*pi/180
Câu lệnh 3: guidata(hObject, handles)
+ Câu lệnh trên để lưu handles (biến) của handles.unit_input vào hệ thống dữ liệu chung.
+ guidata: lưu biến (handles.unit_input)
Vậy sau khi nhập xong như sau:
[Type text]
Page 21
24.
Tóm tắt: Vì yêu cầu để tài là cho phép chọn nhập vào theo Độ hoặc radian nên: khi
nhấn nút Degree, giá trị nhập vào trong ô input được chuyển thành dạng số tiếp theo
thực hiện lệnh tính toán để chuyển từ radian sang độ, nó đã được thay đổi và lưu vào
biến hệ thống handles.unit_input. Như vậy nút Degree lúc này tương ứng với lựa chọn
đầu vào là nhập theo độ (chuyển đổi từ Radian sang độ = Radian*pi/180), chỉ khi nào
nút này được nhấn thì chúng mới được thực thi.
II.
NÚT NHẤN RADIAN TRONG BẢNG SELECT INPUT
- Tương tự nút nhấn Degree, gọi callback của nút radian và viết callback cho nó như sau:
function radian_Callback(hObject, eventdata, handles)
handles.unit_input = str2num(get(handles.input,'string'));
guidata(hObject, handles)
Giải thích:
Khi nhấn nút nhấn Radian thì giá trị nhập vào trong ô input được chuyển thành số và lưu
trực tiếp vào biến hệ thống handles.unit_input, tương ứng với lựa chọn nhập hàm vào theo
Radian, tức là giá trị ta nhạp vào bao nhiêu sẽ được giữ nguyên và lưu vào biến
handles.unit_input, chỉ khi nào nút này được nhấn thì chúng mới được thực thi
III.
NÚT NHẤN DẤU =
- Tương tự ta gọi đến callback của nó và nhập vào hàm như sau:
function ok_Callback(hObject, eventdata, handles)
d=handles.unit_input
y=get(handles.ham,'Value')
if y==1;
e=sin(d)
elseif y==2;
e=cos(d)
elseif y==3;
e=tan(d);
elseif y==4;
e=cot(d);
elseif y==5;
e=asin(d);
elseif y==6;
e=acos(d);
elseif y==7;
e=atan(d);
elseif y==8;
e=acot(d);
elseif y==9;
[Type text]
Page 22
25. e=sinh(d);
elseif y==10;
e=cosh(d);
elseif y==11;
e=tanh(d);
elseif y==12;
e=coth(d);
end
if and(e<0.000001,e>-0.000001)
set(handles.kq,'string','0');
elseif or(e>1000,e<-1000)
set(handles.kq,'string','Math error');
else
set(handles.kq,'string',num2str(e));
end
-
-
-
Giải thích:
Ở trên ta thực hiện lệnh vòng lặp if –elseif – end
Cấu trúc lệnh vòng lặp if –elseif – end như sau:
>> if biểu_thức_logic_1
các_phát_biểu_1
>> elseif
biểu_thức_logic_2
các_phát_biểu_2
…..
>> elseif
biểu_thức_logic_n
các_phát_biểu_n
>> end
Ở trong cấu trúc hàm trên thì:
y=get(handles.ham,'Value')==1;
+ Ý nghĩa : lấy giá trị thuộc tính (Value) của ô có Tag là “ham” và so sánh với 1 và gán
vào biến y, ở đây Tag “ham” là Pop-up Menu chứa các hàm lượng giác (xem bảng), thuộc
tính Value của nó được chọn tương ứng với hàng của nó:
Ví dụ ta chọn SIN, thì SIN ở dòng thứ nhất, do đó Value của nó = 1 tương úng với
dòng 1
Hoặc nếu ta chọn COS, khi đó giá trị Value của nó = 2 tương ứng với COS ở dòng
số 2
Như vậy với đoạn code trên, Biểu thức logic được ta chọn để thực thi phát biểu, mỗi một
biểu thức logic đúng thì nó sẽ thức thi phát biểu ngay sau nó, tương ứng với các hàm
lương giác, thao tác trên biến d.
+ Với ví dụ :
Elseif y==1
e=cos(d);
[Type text]
Page 23
26. -
Giả sử trong Pop-up Menu ta chọn hàm COS, COS nằm ở dòng số 2 nên phát phiểu trên
sẽ đúng và lệnh e=cos(d) sẽ thực thi (tính giá trị hàm cos của d).
Dòng lệnh
if and(e<0.000001,e>-0.000001)
set(handles.kq,'string','0');
elseif or(e>1000,e<-1000)
set(handles.kq,'string','Math error');
else
set(handles.kq,'string',num2str(e));
end
-
Lệnh and là lệnh điều kiện hợp, cấu trúc:
And(điều_kiện_1,điều_kiện_2,….,điều_kiện_n);
Các điều kiền bên trong lệnh and phải đồng thời thõa mãn thì lênh anh trả về kết quả logic
1 (true), nếu bất cứ một điều kiện nào không thõa thì kết quả trả về logic 0 (false)
- Lênh or tương tự lệnh and, nhưng điều kiện bên trong lệnh or chỉ cần 1 trong số các điều
kiện thõa mãn lệnh or sẽ trả về logic 1 (true)
- Hàm set cho phép ta đặt giá trị cho thuộc tính String là e, giá trị của e sẽ hiện lên màn
hình của ô có Tag là “kq”. ở đây e là giá trị được gán trong hàm tính ở vòng lặp ( Ví dụ
e=cos(d) )
+ lệnh num2str cho phép ta biến số thành một chuỗi để hiển thị lên giao diện (có thể hiển
thị được số phức)
+ Trong Matlab khi tính một hàm số 1/∞ thì Matlab xuất ra một số rất bé nhưng khác
không, do đó dòng lệnh trên để so sánh giá trị hàm tính được với một số rất bé bất kì, nếu
số đó quá bé sẽ xuất ra giá trị là 0.
Ví dụ khi tính:
d= Cos(pi/2)
d=
6.1232e-017
Như vậy điều kiện trong vòng lăp giúp ta biết rằng d<<0.000001 nên kết quả hàm
trả về sẽ hiện thị là 0.
+ Tương tự cho kết quả của 1/0, kết quả trả về sẽ là một số rất lớn -> ∞, nhưng thức tế
không có kết quả đó, do đó ta trả về dấu hiệu báo phép tính lỗi (Math error)
Tóm tắt: như vậy sau khi thực hiện cài đặt tất cả các thuộc tính của các button và viết hàm
cho callback để chúng thực thi thì đã giải quyết được bài toán “cho phép chọn thực hiện
một trong các hàm lượng giác ở trên, cho phép chọn nhập hiển thị theo độ hoặc Radian”
- Khi nhân nút “=” trên giao diện, kết quả (e) sẽ đươc đưa ra màn hình ở ô có Tag là “kq”
(output)
IV.
EDIT TEXT NHẬP X:
- Gọi callback và viết cấu trúc hàm như sau:
function x_Callback(hObject, eventdata, handles)
try
t = eval(get(handles.x_input,'String'));
[Type text]
Page 24
27. if ~isnumeric(t)
set(handles.plotx,'String','x is not numeric')
elseif length(t) < 2
set(handles.plotx,'String','x must be vector')
elseif min(diff(t)) < 0
set(handles.plotx,'String','x must increase')
else
set(handles.plotx,'String','Plot')
set(handles.plotx,'Enable','on')
return
end
catch
set(handles.plotx,'String','Cannot plot x');
end
-
Giải thích:
Cấu trúc try-catch: được thức hiện giống như vòng lặp, cấu trúc như sau:
Try
Các_biểu_thức_logic
………………….
Catch
Các_phát_biểu_logic
End
-
+ Các biểu thức logic phía hàm try có thể lồng ghép nhiều các hàm hoặc vòng lặp…, nếu
1 biểu thức của hàm try sai (false) nó sẽ trả về cho hàm Catch thực thi lệnh, nếu biểu thức
hàm try đúng (true) nó sẽ thực hiện các biểu thức, phát biểu phía sau nó. Nói tóm tại, hàm
Catch chỉ thực hiện các phát biểu khi có logic 0 trên hàm try
Giả thích dòng lệnh như sau:
+ set(handles.plotx,'Enable','off')
+ thuộc tính Enable không là thuộc tính cho phép hay không cho phép thực thi, có 2 trạng
thái on và off tương ứng.
+ Khi ta đang thao tác nhập vào khoảng x, nút Plot ở trạng thái khóa (off), sau khi nhập
xong:
t = eval(get(handles.x,'String'));
+ dòng lệnh này để xét xem x có phải là một vector hay không, nếu không phải vector thì
hàm trả về logic 0, và chuyển lệnh sang cho hàm catch thực thi:
set(handles.plotx,'String','Cannot plot x');
lúc này nút Plot vẫn chưa được lệnh bật, string của nó sẽ hiển thị dòng “cannot plot
x”
+ Nếu x là một vector thì lệnh tiếp theo trong hàm try sẽ thực thi:
[Type text]
Page 25
28. if ~isnumeric(t)
set(handles.plotx,'String','x is not numeric')
+ Hàm isnumeric xem xét x có phải là một mảng hay không, nếu đúng thì:
set(handles.plotx,'String','x is not numeric')
Nút Plot vẫn khóa và thông báo “x is not numeric” (x không phải là mảng)
+ Nếu sai thì lệnh tiếp theo thực hiện:
elseif length(t) < 2
set(handles.plotx,'String','x must be vector')
+ Hàm length(t) xét độ dài của mảng t, nếu mảng t <2 tương ứng với 1 số và dấu 2 chấm
Ví dụ: x=-5:
Rõ ràng đây không phải là vector, do đó nút Plot khóa và hiện lên dòng thông báo “x
must be vector” (x không phải là vector).
+ Hoặc nếu x nhập vào có bước nhảy là số âm thì dòng sau sẽ thực thi:
elseif min(diff(t)) < 0
set(handles.plotx,'String','x must increase')
+ Nghĩa là lấy giá trị nhỏ nhất trong đạo hàm của mảng t, nếu giá trị bước nhảy nhỏ mà
âm thì đạo hàm của chúng sẽ <0 lệnh thực thi, nút Plot vẫn khóa và hiện lên dòng “x
must increase” (phải tăng x lên).
+ Nếu tất cả các trường hợp trên đều không xảy ra, nghĩa là x nhập vào hợp lệ, dòng lệnh
sau se thực thi:
else
set(handles.plotx,'String','Plot')
set(handles.plotx,'Enable','on')
return
+ Cho phép nút Plot được hoạt động (Enable =on), String của nó hiện lên chứ Plot.
+ Thực thi xong nó sẽ quay về lại ban đầu từ lệnh Try để tiếp tục thực hiện khi ta nhập
mảng x mới.
V.
NÚT NHẤN PLOT:
- Thực hiện thao tác tương tự như những nút nhấn khác, gọi đến hàm callback của Mfile,
sau đó điền vào các lệnh như sau:
function plotx_Callback(hObject, eventdata, handles)
set(handles.axes1,'Visible','on');
set(handles.nhan,'Visible','on');
c=eval(get(handles.x,'string'));
if get(handles.ham,'Value') == 1;
plot(handles.axes1,c,sin(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 2;
plot(handles.axes1,c,cos(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 3;
plot(handles.axes1,c,tan(c),'LineWidth',2);
[Type text]
Page 26
29. elseif get(handles.ham,'Value') == 4;
plot(handles.axes1,c,cot(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 5;
plot(handles.axes1,c,asin(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 6;
plot(handles.axes1,c,acos(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 7;
plot(handles.axes1,c,atan(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 8;
plot(handles.axes1,c,acot(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 9;
plot(handles.axes1,c,sinh(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 10;
plot(handles.axes1,c,cosh(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 11;
plot(handles.axes1,c,tanh(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 12;
plot(handles.axes1,c,coth(c),'LineWidth',2);
end
if get(handles.grid,'Value') == 1
grid on
else
grid off
end
if get(handles.hold,'Value') == 1
hold on
else
hold off
end
-
Giải thích:
Lệnh:
set(handles.axes1,'Visible','on');
-
+ Đặt thuộc tính của axes1 ở trạng thái on (hiện), như vậy khi nhân nút Plot thì axes1 hiện
ra trên màn hình giao diện
Lệnh:
-
+ Tương tự như lệnh trên, đặt thuộc tính của “nhan” ở trạng thái on, như vậy khi nhân nút
Plot thì chữ Plot(x) hiện ra trên màn hình giao diện
Lệnh:
set(handles.nhan,'Visible','on');
c=eval(get(handles.x,'string'));
+ Hàm eval cho phép ta chuyễn đổi một chuỗi thành một vector hay mảng.
Ví dụ: thực hiện lệnh
a=eval('0:1:5')
>> a =
0
1 2 3 4 5
Kết quả trả về là vector từ 0 đến 5 có bước nhảy là 1.
Như vậy với câu lệnh trên ta phải nhập vào ô giá trị của x là một vector có dạng:
[Type text]
Page 27
30. Số_đầu:bước_nhảy:số_cuối
Bước nhảy có thể có hoặc không cần cũng được (nếu không có Matlab sẽ mặc
định là 1)
+ Vậy sau khi thực hiện lệnh c=eval(get(handles.x,'string')); thì thuộc
tính nhập vào x sẽ được chuyển về dạng vector và lưu vào biến c.
-
Cấu trúc lặp vòng if – elseif – end:
ở phần trước ta đã giải thích cấu trúc này, sau đây chỉ để cập đến ý nghĩa câu lệnh:
Giả sử:
get(handles.ham,'Value') == 1;
plot(handles.axes1,c,sin(c),'LineWidth',2);
+ get(handles.ham,'Value') == 1; xét giá trị (Value) của ô “ham” (đã giải thích ở
phần trước), nếu đúng nó sẽ thực thi lệnh:
plot(handles.axes1,c,sin(c),'LineWidth',2);
+ Lệnh Plot (2D) trong GUI:
-
-
Câu trúc:
Plot(địa_chỉ _vẽ,x,y,’ các thuộc tính’);
Ở đây địa_chỉ_vẽ được gọi bằng hàm handles.axes1 (đến địa chỉ có Tag là axes1), thực
hiện vẽ y theo x, ở đây x là hàm được chọn nhập vào trong ô x (đã được gán vào biến c),
y là hàm theo x (ở trên là y = sin(c) ).
Các_thuộc_tính ở đây bao gồm nhiều lựa chọn, ví dụ như LineWidth. (độ rộng của nét
vẽ), ở trên ta thực hiện lệnh plot(handles.axes1,c,sin(c),'LineWidth',2);
Nghĩa là độ rộng của nét vẽ được đặt là 2 (đơn vị cell).
Như vậy sau khi thực hiện chuỗi các câu lệnh trên bằng cách nhấn nút Plot trên giao diện
thì Matlab sẽ hiện đồ thị lên màn hình, trên đồ thị là hàm lượng giác được vẽ theo khoảng
x nhập vào.
Vòng lặp ở cuối:
if get(handles.grid,'Value') ==
grid on
else
grid off
end
if get(handles.hold,'Value') ==
hold on
else
hold off
end
+ Lệnh:
get(handles.grid,'Value')
get(handles.hold,'Value')
1
1
== 1;
== 1;
hàm trên tìm giá trị Value của ô Grid on và Hold on tương ứng, nếu được chọn tương ứng
với Value = 1, nếu bỏ chọn tương ứng với Value = 0.
Giả sử hàm sau đúng
get(handles.grid,'Value') == 1
grid on
Thì grid = on, Lưới điểm được bật
+ Tương tự cho Hold on
[Type text]
Page 28
31. VI.
LẬP TRÌNH CHO Ô HOLD ON VÀ GRID ON:
- Gọi Callback của 2 ô trên và viết vào các hàm sau:
% --- Executes on button press in grid.
function grid_Callback(hObject, eventdata, handles)
set(handles.axes1);
grid
% --- Executes on button press in hold.
function hold_Callback(hObject, eventdata, handles)
set(handles.axes1);
hold
Giải thích: hàm
set(handles.axes1);
Cho phép gọi thiết lập thuộc tính cho axes1
Value = 1 tương ứng với bật grid (hold) hoặc Value = 0 tương ứng với tắt grid
(hold)
Tóm lại: khi đánh dấu tích vào bất cứ ô nào thì Value của nó = 1, nó sẽ thực thi
lệnh nếu đúng.
VII. THIẾT LẬP NÚT NHẤN DEFAULT:
- Gọi hàm callback của nút Default sau đó viết vào các hàm sau:
set(handles.input,'string','');
set(handles.kq,'string','');
set(handles.x,'string','');
set(handles.hold,'Value',0);
set(handles.grid,'Value',0);
set(handles.color,'Value',0);
set(handles.ham,'Value',1);
set(handles.axes1,'Visible','off');
set(handles.axes1)
cla;
set(handles.nhan,'Visible','off');
+ Đối với tất cả các ô Edit Text và Static Text được thiết lập trước đó ta sẽ đưa thuộc tính
String chúng về trạng thái rỗng ‘ ‘ (mặc định ban đầu)
+ Đối với Check Box: ta đưa thuộc tính Value của chúng về trạng thái “0”, mặc định ban
đầu.
+ Đối với Pop-up Menu: ta đưa Value của chúng về trang thái “1”, mặc định ban đầu
(SIN tương ứng với Value =1).
+ Đối với axes1 và static text (Plot(x)) : ta đưa thuộc tính Visible của chúng về trạng thái
“off”, trạng thái ban đầu.
+ lệnh cla viết tắt của clear all, nghĩa là xóa toàn bộ những gì có trên axes1
VIII. CHECKBOX COLOR ON:
Các màu trong Matlab hỗ trợ :
[Type text]
Page 29
32. -
Trên đây là những màu cơ bản được Matlab hỗ trợ bằng kí tự, còn những màu khác chúng
ta phải sử dụng mã màu (gồm 3 màu trộn lại). để xem các mã màu của đối tượng ta nhâp
đúp vào đối tượng đó và nhấp vào theo hình, rê chuột đến vị trí màu nào, mã màu sẽ hiện
lên. Hình minh hoạ:
Gọi callback của nút Color on và viết vào các hàm sau:
function color_Callback(hObject, eventdata, handles)
if get(handles.color,'Value')==1;
set(handles.input,'BackgroundColor','b');
set(handles.kq,'BackgroundColor','y');
set(handles.exit,'Color',[0.98,0.97,0.97]);
set(handles.option,'BackgroundColor',[1,0.69,0.39]);
set(handles.axes1,'Color',[0.95,0.87,0.73]);
set(handles.button,'BackgroundColor','red');
elseif get(handles.color,'Value')==0;
set(handles.input,'BackgroundColor','white');
set(handles.kq,'BackgroundColor',[0.94,0.94,0.94]);
set(handles.exit,'Color',[0.94,0.94,0.94]);
set(handles.option,'BackgroundColor',[0.94,0.94,0.94]);
set(handles.axes1,'Color','w');
set(handles.button,'BackgroundColor',[0.94,0.94,0.94]);
end
[Type text]
Page 30
33. + Hàm
get(handles.color,'Value')==1;
Đã được giải thích ở phần trên. Giả sử nếu ô Color on được chọn hàm trên sẽ thực thi:
+ set(handles.input,'BackgroundColor','b');
b = blue (xem bảng)
Ở đây để đặt thuộc tính màu bất kì cho đối tượng ta sử dụng lệnh có cấu trúc:
Set(handles.nhãn_ex,’thuộc_tính’,’màu’)
Hoặc
Set(handles.nhãn_ex,’thuộc_tính’,[mã_màu])
+ Nhãn_ex là thuộc tính Tag của đối tượng
+ Thuộc_tính là thuộc tính màu của đối tượng, có thể là màu nền, màu Font
chữ…. Xem thuộc tính màu phía bên trái của Menu Inspector
+ Màu: là các màu đã được mã hóa bằng kí tự.
+ Mã_màu: là mã màu của đối tượng (xem hướng dẫn ở trên).
- Như vậy với bất cứ thuộc tính nào ta ta đều có thể chỉnh màu cho chúng.
- Cấu trúc if-else để xét thuộc tính của ô color on tương ứng với được chọn hoặc không
chọn
IX.
NÚT EXIT:
Gọi callback của nút Exit và viết vào các lệnh sau:
function exit_Callback(hObject, eventdata, handles)
set(handles.all,’Visible’,’off’)
-
Thuộc tính Visible = off cho phép ẩn cửa sổ giao diện có Tag là all, ở đây là cửa sổ nền
giao diện, tương ứng với thoát khỏi giao diện
[Type text]
Page 31
34. -
-
PHẦN 6: CÁCH SỬ DỤNG GIAO DIỆN
Để bắt đầu với giao diện, chúng ta làm theo một trong những cách sau:
+ Trong màn hình thiết kế giao diện, nhấn phím F5 trên bàn phím
+ Nhấn vào biểu tượng nút Play
trong màn hình thiết kế giao diện
+ Trong màn hình thao tác trên Mfile, nhấn phím F5 để chạy chương trình
Trước khi muốn sử dụng ta có thể sắp xếp các menu theo trình tự tùy ý.
I.
TÍNH HÀM LƯỢNG GIÁC
Bước 1: chọn hàm cần tính từ menu đổ xuống:
-
Bước 2: nhập giá trị vào trong ô input
Bước 3: chọn giá trị nhập vào ở ô input theo bảng Select Input (Degree hoặc Radian)
Bước 4: nhấn vào dấu bằng
Kết quả phép tính sẽ được hiển thị ở ô output
[Type text]
Page 32
35. II.
VẼ HÀM SỐ LƯỢNG GIÁC
Bước 1: Chọn hàm muốn vẽ:
Bước 2: Nhập vào khoảng giá trị của x
Chú ý: x phải được nhập đúng dạng đã được đề cập trong phần thiết kế giao
diện.
Bước 3: Nhấn nút Plot để vẽ hàm
[Type text]
Page 33
36. + Có thể tùy chọn bật lưới điểm, giữ hàm cũ khi vẽ hàm mới…:
III.
SỬ DỤNG NÚT COLOR ON
Đánh dấu vào ô Color on để bật màu cho giao diện, bổ chọn sẽ trở về màu mặc định.
-
IV.
SỬ DỤNG NÚT EXIT
Nếu bạn không muốn sử dụng nữa, nhấn vào nút Exit, cửa sổ mới hiện ra với tiêu đề “are
you sure you want to Close ?, chọn “Yes” để đóng giao diện, chọn “No” để trở lại màn
hình giao diện
Khi nhấn vào Nút Default, tất cả các trạng thái sẽ quay về ban đầu
[Type text]
Page 34
37. PHẦN 7: CHƯƠNG TRÌNH
function varargout = baitaplonMatlab_bai_1(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @baitaplonMatlab_bai_1_OpeningFcn, ...
'gui_OutputFcn', @baitaplonMatlab_bai_1_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback',
[]);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before baitaplonMatlab_bai_1 is made visible.
function baitaplonMatlab_bai_1_OpeningFcn(hObject, eventdata, handles,
varargin)
% Choose default command line output for baitaplonMatlab_bai_1
handles.output = hObject;
handles.unit_input = 0;
% Update handles structure
guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = baitaplonMatlab_bai_1_OutputFcn(hObject, eventdata,
handles)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes during object creation, after setting button properties.
function ham_CreateFcn(hObject, eventdata, handles)
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes during object creation, after setting button properties.
function input_CreateFcn(hObject, eventdata, handles)
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
[Type text]
Page 35
38. end
% --- Executes on button press in degree.
function degree_Callback(hObject, eventdata, handles)
b = str2num(get(handles.input,'string'));
handles.unit_input = b*pi/180
guidata(hObject, handles)
% --- Executes on button press in radian.
function radian_Callback(hObject, eventdata, handles)
handles.unit_input = str2num(get(handles.input,'string'));
guidata(hObject, handles)
% --- Executes during object creation, after setting button properties.
function x_input_CreateFcn(hObject, eventdata, handles)
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in plotx.
function plotx_Callback(hObject, eventdata, handles)
set(handles.nhan,'Visible','on');
c=eval(get(handles.x_input,'string'));
if get(handles.ham,'Value') == 1;
plot(handles.axes1,c,sin(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 2;
plot(handles.axes1,c,cos(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 3;
plot(handles.axes1,c,tan(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 4;
plot(handles.axes1,c,cot(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 5;
plot(handles.axes1,c,asin(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 6;
plot(handles.axes1,c,acos(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 7;
plot(handles.axes1,c,atan(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 8;
plot(handles.axes1,c,acot(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 9;
plot(handles.axes1,c,sinh(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 10;
plot(handles.axes1,c,cosh(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 11;
plot(handles.axes1,c,tanh(c),'LineWidth',2);
elseif get(handles.ham,'Value') == 12;
plot(handles.axes1,c,coth(c),'LineWidth',2);
end
if get(handles.grid,'Value') == 1
grid on
else
grid off
[Type text]
Page 36
39. end
if get(handles.hold,'Value') == 1
hold on
else
hold off
end
% --- Executes on button press in grid.
function grid_Callback(hObject, eventdata, handles)
set(handles.axes1);
grid
% --- Executes on button press in hold.
function hold_Callback(hObject, eventdata, handles)
set(handles.axes1);
hold
% --- Executes on button press in ok.
function ok_Callback(hObject, eventdata, handles)
d=handles.unit_input
y=get(handles.ham,'Value')
if y==1;
e=sin(d)
elseif y==2;
e=cos(d)
elseif y==3;
e=tan(d);
elseif y==4;
e=cot(d);
elseif y==5;
e=asin(d);
elseif y==6;
e=acos(d);
elseif y==7;
e=atan(d);
elseif y==8;
e=acot(d);
elseif y==9;
e=sinh(d);
elseif y==10;
e=cosh(d);
elseif y==11;
e=tanh(d);
elseif y==12;
e=coth(d);
end
if and(e<0.000001,e>-0.000001)
set(handles.kq,'string','0');
elseif or(e>1000,e<-1000)
set(handles.kq,'string','Math error');
else
set(handles.kq,'string',num2str(e));
end
guidata(hObject,handles)
% --- Executes on button press in clc.
function clc_Callback(hObject, eventdata, handles)
[Type text]
Page 37
40. set(handles.input,'string','');
set(handles.kq,'string','');
set(handles.x_input,'string','');
set(handles.hold,'Value',0);
set(handles.grid,'Value',0);
set(handles.color,'Value',0);
set(handles.ham,'Value',1);
set(handles.axes1,'Visible','off');
set(handles.axes1);
cla;
set(handles.nhan,'Visible','off');
% --- Executes when user attempts to close button.
function all_CloseRequestFcn(hObject, eventdata, handles)
% Hint: delete(hObject) closes the figure
delete(hObject);
% --- Executes on button press in color.
function color_Callback(hObject, eventdata, handles)
if get(handles.color,'Value')==1;
set(handles.input,'BackgroundColor','b');
set(handles.kq,'BackgroundColor','y');
set(handles.all,'Color',[0.73,0.83,0.96]);
set(handles.option,'BackgroundColor',[1,0.69,0.39]);
set(handles.axes1,'Color',[0.95,0.87,0.73]);
set(handles.exit,'BackgroundColor','red');
else
set(handles.input,'BackgroundColor','white');
set(handles.kq,'BackgroundColor',[0.94,0.94,0.94]);
set(handles.all,'Color',[0.94,0.94,0.94]);
set(handles.option,'BackgroundColor',[0.94,0.94,0.94]);
set(handles.axes1,'Color','w');
set(handles.exit,'BackgroundColor',[0.94,0.94,0.94]);
end
% --- Executes on button press in exit.
function exit_Callback(hObject, eventdata, handles)
set(handles.all,'Visible','off');
function x_input_Callback(hObject, eventdata, handles)
set(handles.plotx,'Enable','off');
try
t = eval(get(handles.x_input,'String'));
if ~isnumeric(t)
set(handles.plotx,'String','t is not numeric')
elseif length(t) < 2
set(handles.plotx,'String','t must be vector')
elseif min(diff(t)) < 0
set(handles.plotx,'String','t must increase')
else
set(handles.plotx,'String','Plot')
[Type text]
Page 38
42. Tài liệu tham khảo:
Website:
http://www.mathworks.com/
http://z13.invisionfree.com
Matlab: Examples, Help
Thông tin Sinh viên:
Họ tên: Nguyễn Lương Thành
Lớp: 09040003
MSSV: 40900040
Khóa: ĐH 13
Email: thanhnl0502@gmail.com
ĐT: 01648911181
[Type text]
Page 40