42
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.HChí Minh ngày 26 /10 /2012

Vi du chi tiet giai thich lap trinh gui trong matlab

Embed Size (px)

Citation preview

Page 1: Vi du chi tiet  giai thich lap trinh gui trong matlab

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

Page 2: Vi du chi tiet  giai thich lap trinh gui trong matlab
Page 3: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 1

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.

Page 4: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 2

Đề 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.

Page 5: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 3

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. GUI LÀ GÌ? II. BẮT ĐẦU VỚI GUI! III. 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. KHỞI ĐỘNG GUI………………………………………………………….Trang 06 II. MÔ TẢ CHỨC NĂNG CÁC CÔNG CỤ TRONG GIAO DIỆN GUI…….Trang 07 III. CHỈNH SỬA HỘP THOẠI INSPECTOR…………………………………Trang 08

PHẦN 3: THIẾT KẾ GIAO DIỆN (GUI)……………………………………………..Trang 10

I. THIẾT KẾ GIAO DIỆN…………………………………………Trang 10 II. MỘT VÀI THUỘC TÍNH CỦA ĐỐI TƯỢNG TRONG MENU

INSPECTOR…………………………………………………….Trang 11 III. 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

Page 6: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 4

Page 7: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 5

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:

Page 8: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 6

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 …

Page 9: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 7

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.

Page 10: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 8

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.

Page 11: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 9

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

Page 12: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 10

Ở 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 13: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 11

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:

Page 14: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 12

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 Tên thuộc tính Giá trị thuộc tính Giải thích

1 String Select Function

Fontsize 10 Là Fontsize của String

2 String

sin cos tan cotg

arcsin arccos arctan arccotg

sinh cosh tanh cotgh

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 15: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 13

Tag ham

Tag là giá trị của thuộc tính. Thuộc tính Tag cực kì quan trọng, nó là nhãn của một đối tượng, được sử

dụng để gọi thuộc tính của đối tượng thông qua các hàm để thay đổi giá trị của thuộc tính… giá trị

của Tag có phân biệt chữ in hoa, chữ thường, không được đặt tên Tag trùng với tên file đã lưu hay trùng với bất cứ các kí tự đặc biệt nào...Mỗi hộp thoại chỉ có một Tag duy nhất và độc quyền.

Fontsize 15

3 String Input

Fontsize 10

4 String

Tag input Fontsize 15

5 String Select input

Fontsize 10

6 String Degree

Tag degree Fontsize 15

7 String Radian

Tag radian Fontsize 15

8 String =

Tag ok Fontsize 15

9 String Output

Fontsize 10

10 String

Fontsize 15 Tag kq

11 String Clear all

Fontsize 15 Tag clc

12 String Colors on

Fontsize 15 Tag color

13 String Enter the range of

x

Fontsize 10

14 String

Fontsize 15 Tag x_input

15 String Options

Page 16: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 14

Fontsize 10

16

String Plot Fontsize 15

Tag plotx

Enable off thuộc tính Enable là thuộc tính cho phép hay không

cho phép đối tượng hoạt động, tương ứng với 2 trạng thái on và off

17 String Hold on

Fontsize 15 Tag hold

18 String Grid on

Fontsize 15 Tag grid

19 Tag axes1

Visible off thuộc tính Visible Là thuộc tính cho phép chọn hiện (on) hay ẩn (off) cửa sổ giao diện của nó

20

String Plot(x) Fontsize 15 Visible off

Tag nhan

21 String Exit

Fontsize 15 Tag exit

- Hình sau mô tả cách thay đổi giá trị trong ô String của Select Function:

Page 17: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 15

+ 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:

Page 18: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 16

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 . Hộp thoại Align hiện ra như sau:

Page 19: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 17

- 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

Page 20: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 18

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

Page 21: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 19

- 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

Page 22: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 20

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:

d=handles.unit_input; % gia tri dược lưu vào biến d - 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.

Page 23: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 21

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:

Page 24: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 22

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;

Page 25: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 23

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);

Page 26: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 24

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'));

Page 27: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 25

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:

Page 28: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 26

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);

Page 29: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 27

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: set(handles.nhan,'Visible','on');

+ 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: 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:

Page 30: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 28

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') == 1 grid on else grid off end if get(handles.hold,'Value') == 1 hold on else hold off end

+ Lệnh: get(handles.grid,'Value') == 1; get(handles.hold,'Value') == 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

Page 31: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 29

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ợ :

Page 32: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 30

- 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

Page 33: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 31

+ 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

Page 34: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 32

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

Page 35: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 33

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

Page 36: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 34

+ 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

Page 37: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 35

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');

Page 38: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 36

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

Page 39: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 37

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)

Page 40: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 38

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')

Page 41: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 39

set(handles.plotx,'Enable','on') return end catch set(handles.plotx,'String','Cannot plot t'); end

Page 42: Vi du chi tiet  giai thich lap trinh gui trong matlab

[Type text] Page 40

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: [email protected] ĐT: 01648911181