Lập trình giao diện GUI trong Matlab (Phần 1)

Mình viết bài này để tổng hợp lại các hướng dẫn về thiết kế giao diện GUI trong Matlab để các bạn dễ dàng thực hiện.

Phần mềm: Matlab R2007a

Bài đầu tiên mình sẽ giới thiệu các bạn giao diện GUI.

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

>> guide

Trong cửa sổ GUIDE Quick Start có nhiều lựa chọn theo một trong các khuân mẫu sau:

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 GUI trống không có một điều khiển uicontrol nào cả.
  • GUI with Uicontrols: Hộp thoại GUI với một vài uicontrol như button, ... Chương trình có thể chạy ngay.
  • GUI with Axes and Menu: Hộp thoại GUI 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.

Open Existing GUI: mở một project có sẵn.

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

2. Cửa sổ GUI hiện ra

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ác bạn 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. Xin nói qua một vài điều khiển hay dùng:

  • Push Button: giống như nút Command Button trong VB. Là các nút bấm như nút OK, Cancel mà ta vẫn bấm.
  • Slider : Thanh trượt có một con trượt chạy trên đó.
  • Radio Button : Nút nhỏ hình tròn để chọn lựa
  • Check Box
  • Edit Text
  • Static Text
  • Pop-up Menu
  • List Box
  • Axes
  • Panel
  • Button Group
  • ActiveX Control
  • Toggle Button

Các bạn hãy thử gắp thả vài điều khiển vào trong giao diện bên phải xem hình dạng thế nào ?? Hình dạng ra sao nhỉ ??

Còn menu thì quan trọng nhất là menu Tools có:

  • Run (Ctr + T) : nhấn vào để chạy chương trình mà ta đã viết. Có lỗi là hiện ra ngày Big Grin
  • Align Object: dùng để làm cho các điều khiển sắp xếp gọn đẹp theo ý mình như cùng căn lề bên trái, ...
  • Grid and Rulers : dùng để cấu hình về lưới trong giao diện vì nó sẽ coi giao diện như một ma trận các ô vuông nhỏ, ta sẽ thay đổi giá trị này để cho các điều khiển có thể thả ở đâu tùy ý cho đẹp.
  • Menu Editor : trình này để tạo menu cho điều khiển
  • Tab Order Editor : sắp xếp Tab order là thứ tự khi ta nhấn phím Tab
  • Gui Options : lựa chọn cho giao diện GUI.

Các bạn nên vào menu Help để xem hướng dẫn thêm trong Help.

Các bạn save dưới tên: TUT01, khi đó đồng thời xuất hiện cửa sổ Editor và đang mở file TUT01.m của bạn. Trong thư mục bạn save sẽ có 2 file là:

  • TUT01.fig : file này chứa giao diện của chương trình
  • TUT01.m : file 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,... (sẽ nói chi tiết vào bài khác).

3. Kéo thả các điều khiển

Nói hơi nhiều nên các bạn ghét rồi, nên hãy làm một ví dụ đơn giản cho vui còn học tiếp nào.

Hãy kéo vào trong giao diện 2 edit box, 1 static box và 1 Push Button.

Chương trình có chức năng khi nhấn vào nút bấm thì kết quả của phép tính cộng giữa 2 số được gõ vào 2 ô sẽ hiện lên trong Static Text.

4. Thay đổi các thuộc tính của các điều khiển

Click đúp vào Edit Text bên trái để xuất hiện cửa sổ các thuộc tính của điều khiển. Có thể sắp xếp theo chức năng hoặc theo thứ tự A-Z của tên thuộc tính bằng nút hiện ở gõ bên trái.

Các thuộc tính này các bạn hãy thử thay đổi xem nó thế nào nhỉ ??

Thuộc tính quan trọng của Edit Box bao gồm:

  • Tag: đây là thuộc tính giống như Caption trong Visual Basic để đặt tên đ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. Mình đặt tên là: editStr1.
  • String : là xâu kí tự hiện lên Edit Box. Các bạn xóa cái này đi.

Tương tự, thay đổi thuộc tính tag của Edit Box thứ 2 thành editStr2. Static Box cũng tương tự thành staticStr3.

Push Button: thuộc tính tag = buttonCalculate, string = calculate

5. 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ế nên 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, như hàm ngắt trong vi điều khiển vậy :D.

Click chuột phải vào nút Calculate chọn Callback. Trong này còn một số hàm nữa sẽ tính sau.

src="http://i280.photobucket.com/albums/kk189/ngohaibac_dot_net/Matlab_TUT/Maltab_tutorial_006.gif" />

Nhìn vào định nghĩa của hàm trong Editor bạn 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
  • 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 cái này để truy suấ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 editStr1, editStr2,editStr3 bằng lệnh getset.

get(handles.tag_dieu_khien, 'ten thuoc tinh');

set(handles.tag_dieu_khien, 'ten_thuoc_tinh', gia_tri);

và hàm quan trọng nữa biến từ string sang số là hàm: str2num và num2str để biến trở lại.

Vậy chúng ta sẽ viết hàm như sau:

Nhấn nút Run kiểm tra kết quả xem nào:

Tham khảo

Ngô Hải Bắc, Lập trình GUI trong Matlab, www.dientuvietnam.net, 2005

Ngô Hải Bắc, Giao tiếp RS232 trên PC qua Matlab, www.picvietnam.com, 2006

{ 211 comments… add one }

  • thanhthoa October 30, 2010, 12:26 am

    Anh Bắc ơi giúp em với!
    Làm cách nào để đưa 1 matran vào Edit text và thực hiện các phép toán được vậy anh?
    Anh cho em 1 vi dụ nhập 2 matran và xuất ra matran tổng được không ạ?
    Em cảm ơn anh nhe!
    Giúp em với anh! Em đang cần gấp nè.

    Reply
  • lợi November 1, 2010, 8:22 am

    anh ơi em có cái tiểu luận làm phần con led đơn điều khiển sáng tắt dùng giao diện matlab,ngòai ra có thêm phần hiện lổi khi có sự cố phần cứng em không biết làm phần này thế nào anh chỉ giúp em được không

    Reply
  • yu-chan December 20, 2010, 3:27 pm

    Chào bạn. Cho mình hỏi làm sao vẽ được đồ thị y=a sin3x(b cosx + c sinx) trong gui được không.
    Mình còn một bài nhập năm rồi kiểm tra xem đó có phải năm nhuận không rồi in ngày tháng trong năm. Bạn giúp mình với

    Reply
  • NB December 29, 2010, 3:57 am

    Anh Bắc cho em hỏi? có phải bản Matlab nhà em bị lỗi không?
    em viết 1 chương trình đơn giản: nhấn nút pushbutton -> hiện lên chữ trên edit textbox. vậy mà nhấn nút chẳng thấy có gì xảy ra.

    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject handle to pushbutton1 (see GCBO)
    % eventdata reserved – to be defined in a future version of MATLAB
    % handles structure with handles and user data (see GUIDATA)
    set(handles.edit1,’String’,’12345′);

    em có down một số ví dụ,cả demo có sẵn cũng không chạy được.Nó không báo lỗi gì hết. chỉ có cái là không thấy nó thực thi lệnh gì hết.Không biết nó bị lỗi gì?

    Reply
  • sks March 4, 2011, 6:53 pm

    Các bạn có ai biết thiết kế tab trong GUIE của matlab ko vậy? chỉ cho mình với, cảm ơn nhiều!

    Reply
  • Tran Van Dien March 16, 2011, 11:01 pm

    Chao anh! giup em voi, em dang lap trinh GUI, muon 2 axes deu hien mot lan thi sao a.
    Em cam on!

    Reply
  • Nguyen Thang March 26, 2011, 10:47 am

    Các bạn cho mình hỏi, mình có một vần đề thế này.
    Mình muốn vẽ một hình, ví dụ như hình chữ nhật chẳng hạn, nếu muốn chú thích kích thước của chiều cao hình chữ nhật thì mình lệnh text là được rồi. Nhưng vấn đề là kích thước của chiều cao không nằm bám theo chiều cao mà lại nằm ngang. Mình muốn các bạn giúp mình đẻ chuyển chữ số đó nằm bám theo chiều cao hình chữ nhật.
    Mình xin cảm ơn mọi người!

    Reply
  • Kiên_Đào March 27, 2011, 6:53 pm

    Anh ơi em đang thực hiện đề tài môn học, đề tài đó là nhận dạng đối tượng. Thầy nói ví dụ cho 1 bức hình thì phân biệt được đâu là con người hoặc cái cây. Em chưa có ý tưởng gì. Mong anh và các bạn giúp đỡ. Xin cám ơn rất nhiều!

    Reply
  • viet April 9, 2011, 12:27 pm

    a Bac ơi, e đang dùng ver 7.0, k có chức năng add table vào trong guide(cái này trong matlab 2008) vậy làm cách nào để add cái table hay có cái table này trong guide vậy a
    nếu mua đĩa mới thì phỉa dùng loại version mấy? thanks a
    nhờ a chỉ giáo giúp vì e đang làm luận văn và muốn dùng chức năng này để hiển thị kết quả (ý tưởng),mong a chỉ giáo giúp

    Reply
  • mailinh June 8, 2011, 7:51 am

    anhBac oi.e dg lam bao cao ve tinh fuzzy logic ung dung trong Matlab,de tai cua e la may bay khong nguoi lai.a co the cho e hoi minh lam GUI nhu the nao k a?bay gio e da tao dc FIS,neu e vao rule de xem truc tiep thi ok.nhung y e la tu GUI,nhap so lieu cua bien dau vao de xuat ra gia tri dau ra.Xin a giup e voi…

    Reply
  • thanhtruc July 9, 2011, 7:00 pm

    Em đang đi vào ngõ cụt rồi các bác ơi. Em làm đề tài truyền nhận tín hiệu giao diện matlab. Nhận được nhưng không hiển thị lên edit_text mà chỉ hiển thị ở command windown. Ai biết lỗi này do đâu giúp em với. em làm theo chương trình của anh Bắc đó. Nhưng sao chương trình của anh hiển thị được mà chương trình của em không hiển thị được

    Reply
  • khanh August 13, 2011, 11:54 pm

    ban oi giup minh voi
    minh lam bai tap lon phan thiet ke guide ve dem so lan kich chuot

    Reply
  • hung September 30, 2011, 12:24 am

    em dang thiet ke bo dieu khien hoi tiep trang thai , cho ham nac don vi r(t), 1 bo dieu khien U va 1 doi tuong, ngo ra la C, voi u= -6×1+x2+r, va dieu khien doi tuong la c=x1;
    dx1/d=x1(x2-1)+u,
    dx2/d=x1^2 – x2 +u ,
    biet doi tuong ca bo dieu khien la 2 subsystem

    Reply
  • dinh luong October 6, 2011, 9:53 am

    các bác ơi giup em với .
    em dang làm bài tập lớn viết giao diện để giảu pt vi phân
    cho phép nhập1 số hàm tương tự như:
    vd: d^2x/d^2t+10*dx/dt+5x=11
    cho phép nhập các diều kiện đầu
    giải pt trên và hiện thị kết quả

    Reply
  • magiz433 October 19, 2011, 12:47 pm

    Anh bắc ơi giúp em về chọn vẽ đáp ứng với tín hiệu vào là hàm parabol đơn vị trong hệ thống điều khiển tự động. em lập Gui biểu diễn hàm truyền.từ hàm truyền chon vẽ đáp ứng. hàm nấc, hàm dốc, và hàm parbol. em dùng popupmenu để chọn đáp ứng vẽ. hàm nấc (lenh step(G)), hàm dốc ( Impulse ??? ) còn hàm parabol thì sao ah??

    Reply
  • linhnhi November 7, 2011, 4:20 pm

    Chào a Bắc, em xin phép được hỏi anh vấn đề sau, mong anh sớm trả lời:
    Làm thế nào để liên kết hai giao diện GUI ạ, tức là khi mình nhấn vào một nút nào đó sẽ mở giao diện khác lên, đồng thời tắt giao diện hiện tại đi ạ.
    Cám ơn anh trước nha

    Reply
  • vanchung December 8, 2011, 6:46 am

    em mới học matlap chưa biết gì nhiều,mong a admin giúp đỡ em trong thời gian tới,em cảm ơn!

    Reply
  • ruanyou December 14, 2011, 9:36 am

    a Bắc ơi!làm ơn chỉ giúp e làm thế nào để kết nối dữ liệu giữa 2 function dàng word

    Reply
  • quangha37 February 14, 2012, 6:57 pm

    anh ơi.anh có thể giúp em đề tài này dc ko ạ?tìm hiểu về UI controls trong matlab và ứng dụng”anh có thể cho em 1 số tài liệu để tham khảo dc ko ạ.

    Reply
  • Tien March 8, 2012, 9:33 pm

    kq = get(handles.edit_KQ,’String’);
    kq =[ kq,'1'];
    set(handles.edit_KQ,’String’,’kq’);

    em làm theo hướng dẫn cũa anh, nhưng khi ấn pus 1, nó lại hiện ra trên edit text la kq, và chĩ ấn được 1 lần, em đang dùng matlab 10. Cãm ơn anh

    Reply
  • Pham Quyet Tien April 10, 2012, 11:26 am

    Da chao anh Bac!
    Khi lap trinh phan gui trong matlab lúc trước em lưu lại có tên là TUT01 thì sẽ tạo ra 3file là:TUT01.m và TUT01.fig và TUT01.asv thì chương trình chạy rất tốt.
    Nhưng không biết bây giờ bị lỗi gì mà khi em lưu thì chỉ tao ra 2file là:TUT01.m và TUT01.fig nên chương trình không chạy được.
    Xin trả lời giúp em với.
    Em chân thành cảm ơn!

    Reply
  • Hoàn April 15, 2012, 8:46 am

    Em chào anh Bắc.Em đang làm đồ án về SC-FDMA trong LTE 4G,gặp vấn đề mô phỏng nhờ anh giúp đỡ.
    Em muốn thiết kế giao diện GUI để mô phỏng.
    Em muốn dùng popupmenu cho Modulation và một ô nhập giá trị cho Rolloff Factor
    Modulation la dạng String(có 2 giá trị là Q-PSK và 16QAM),Rolloff Factor có giá trị từ 0 đến 1.
    Sau đó gán dataType=giá trị của Modulation,Alpha=gia tri Roloff Factor và sử dụng dataType và Alpha làm giá trị biến đầu vào để chạy File.m khác.
    Nhờ anh chỉ giúp em với.Mail:hoan07dt3@gmail.com
    Cảm ơn anh nhiều!

    Reply
  • ngaongao April 24, 2012, 5:34 pm

    Chào anh! Em đang làm thực tập tốt nghiệp về sử dụng thuật toán di truyền để giải bài toán phi tuyến. Trong phần giao diện em muốn nhập một ma trận thì làm thế nào ạ?

    Reply
  • vuphuongsphn August 11, 2012, 2:39 pm

    Em chào bác admin và các cao thủ matlab!

    Em là dân trong lĩnh vực datamining.

    Bác có thể giúp em việc này được không ạ?

    1/Hiện tại; e đang dùng tool trong mạng noron. em muốn phá code tool đó; sửa theo ý của mình.

    e ko rõ cách bố trí file của 1 tool trong matlab như thế nào?

    Ví dụ; em đang dùng tool nprtool. Em có tìm được file nprtool.m; xong giờ e muốn tìm file xử lý giao diện .fig của nó? Vào đâu để tìm ạ? hay nó dùng cách khác tạo ra giao diện GUI của tool này?
    2/ Và như vậy, 1 tool trong matlab gồm những file nào; và tác động; vào file nào; đối tượng nào ở đâu để mình thêm bớt được ạ? Em giờ đang cần gấp; nên rất mong bác giúp

    Thanks bác và cả nhà trước

    Reply
  • Hồ Thành Luân October 14, 2012, 9:13 am

    Anh bắc ơi! Anh cho e hỏi tí được ko ?
    giờ em đang làm đề tài ‘giải phương trình bậc nhất’ ax+b=0 => x=-b/a
    Vậy anh cho e hỏi muốn tạo nút reset thì phải làm như thế nào ?
    Phải viết dòng lệnh ra sao ?
    Mong anh hồi âm sớm !
    e cảm ơn anh nhiều!

    Reply
  • gioheomay December 27, 2012, 9:53 pm

    a ơi.cho e hỏi. chạy 1 chương trình trên matlab thì như thía nào vây?các a giúp em với???????

    Reply
  • trungthu August 6, 2013, 8:04 am

    anh bắc cho em hỏi một chút, em đang làm về nhận dạng chữ , em làm phần GUI,
    - bây giờ em muốn tạo một khung để vẽ ảnh vào đó, khi vẽ xong ảnh đó mình ấn nút nhận dạng thì nó hiện ra một khung để mình lưu tên ảnh đó lại, sau khi nó lưu thì nó sẽ nhân dạng ảnh đó luôn.
    - ý tưởng của em là vậy nhưng giờ cái chỗ vẽ khung ảnh kia, và lưu ảnh, em không biết. mong anh chỉ em với

    Reply
  • Khang October 11, 2013, 11:30 pm

    Anh ngohaibac ơi cho em hỏi chút, ví dụ giờ ô edit text em dùng hàm
    a=get(handles.edit1,’String’)

    Nếu mình ko nhập gì vào a hết, em muốn khi nhấn push button thì hiện lên static text chữ “Hello”

    if a==0
    set(handles.statictext,’String’,’Hello’)
    else
    end

    Nhưng em viết vậy thì không dc, em muốn hỏi là có cách nào lấy giá trị khi không gõ gì vào edit text không? Em cám ơn anh trước.

    Reply
  • phạm hồng ngọc December 19, 2013, 12:43 am

    anh có thể giúp em làm cái này được không ạ ?
    Viết chương trình có giao diện (GUI) chuyển đổi qua lại giữa các hệ đơn vị đo lường
    sau:
    - Nhiệt độ: Celsius, Fahrenheit, Kelvin.
    - Độ dài: Mét, Foot, Inch
    - Diện tích: Mét vuông, yard vuông.
    - Thể tích: Lít, Gallon.

    Reply
  • admin April 26, 2008, 12:46 pm

    Chào em.

    Em chỉ cần cho thêm một Static Text vào là được em ạ. Sau đó thay đổi thuộc tính String của nó = xâu kí tự mà em muốn hiển thị.

    Chúc em thành công.

    Reply
  • admin April 26, 2008, 12:47 pm

    Anh gõ nhầm đó em ạ. Em dùng lệnh imshow nhé. Anh edit lại bài ở trên rồi :D. Thanks em.

    Reply
  • admin April 28, 2008, 8:52 am

    Em download hướng dẫn này tại đây của bọn Mathworks xem sao.

    Mathworks

    Thực chất là dùng các nút PushButton và một Panel, và các điều khiển.

    Để cho giống với TabPanel thì khi nhấn một nút ở trên Tab thì hiện ra các control tương ứng (set on,off thuộc tính visible).

    Chúc em thành công.

    Reply
  • admin April 28, 2008, 2:50 pm

    Không có gì mà em. Cố gắng học cho giỏi vào.

    Reply
  • ngohaibac April 28, 2008, 5:34 pm

    Khi mình nhấn vào 1 tab để hiện control nào thì em set thuộc tính visible thành on, cho ẩn thì set thành off.Các lệnh này em viết trong hàm ButtonDownFcn nhé.

    Cái hình đó chỉ mang tính minh họa thôi em ạ.

    Em mở cái example đó lên, có thấy là có nhiều điều khiển ở cùng vị trí không ??

    Anh chưa viết chương trình đó em ạ.

    Reply
  • admin April 28, 2008, 10:04 pm

    Theo anh nghĩ là không. Vì sự kiện chỉ xảy ra khi em nhấn chuột trái vào nó thôi mà. Đây là sự kiện ButtonDown mà. Em viết lệnh trong hàm này.

    Cố gắng lên, coi như bài tập để mà luyện tập thôi mà em.

    Chúc em thành công.

    Reply
  • hung_dtvt April 28, 2008, 10:19 pm

    Đang làm đồ án sắp nộp rồi anh ơi. :P .Thời gian này đang gấp rút đây.Hehe

    Reply
  • hung_dtvt April 28, 2008, 11:13 pm

    úi mình làm trong hàm callback là được aB ơi.Hehe.Thêm được 1 đống kinh nghiệm.Phuphu

    Reply
  • admin April 29, 2008, 12:26 am

    Tốt quá rồi em. Cố lên.

    Reply
  • admin May 8, 2008, 10:30 pm

    Để tí anh xem cho nhé. Bây giờ anh đang bận tẹo.

    Mà có lỗi thì em post lỗi hiện ra ở trong cửa sổ Command cho anh xem chứ em.

    Reply
  • admin May 9, 2008, 12:53 pm

    Chào em.

    Em thử thay lệnh axes(‘axes1′) bằng lệnh axes(axes1) xem sao nhé. Vì có khi anh nhớ lộn k biết có dấu nháy 2 bên không ấy mà.

    Reply
  • hung_dtvt May 8, 2008, 11:30 pm

    Úi, mới mò ra có tí thôi. Còn phải học hỏi a nhiều. :D

    Reply
  • User_vietnam May 12, 2008, 9:17 am

    Bác nào cho tài liệu hướng dẫn về Gui và các tập lệnh của matlab có thể gởi cho mình được không? Email của mình là: romantic3222@yahoo.com. Cảm ơn các bác nhiều.

    Reply
  • admin May 12, 2008, 2:37 pm

    Cách thiết lập là tùy thuộc vào ý tưởng của bạn. Bạn muốn nhập mỗi phần tử ở một ô Edit Text thì nhập thôi.

    Còn hiển thị thì mình đã có ví dụ hiển thị lên Edit Text rùi mà. Bạn search xem nhé.

    Reply
  • admin May 12, 2008, 2:50 pm

    Tệp lệnh của GUI là tất cả lệnh mà Matlab hỗ trợ. Các lệnh cần quan tâm hơn là các lệnh liên quan đến các điều khiển của GUI, còn các lệnh khác là tùy vào mục đích của ứng dụng.

    Ví dụ, hiển thị đồ thị, thì lệnh axes() là focus vào điều khiển đó, còn plot là lệnh mà bạn vẫn dùng để vẽ đồ thị bình thường đúng không ?

    Góp ý với bạn: mình là MOD của nhiều diễn đàn điện tử nên mình biết cách hỏi của bạn là không hợp lý. Bạn không nên bảo là ai có tệp lệnh thì gửi cho mình. Bạn nên hỏi cách học như thế nào thì hay hơn, nên thảo luận sẽ tiến bộ hơn rất nhiều. Vì thực tế, chẳng ai gửi cho bạn cả đâu. Mình quá hiểu kiểu này rồi.

    Cố gắng lên bạn nhé.

    Reply
  • admin May 21, 2008, 8:16 am

    Anh đã làm gì đâu mà em cảm ơn thế :mrgreen:

    Reply
  • student May 25, 2008, 5:09 am

    Bac admin cho minh hoi them ti nua nhe
    Bay gio minh muon khai bao bien w theo kieu double chu khong phai la syms nua thi minh lam the nao ha bac? Boi vi tat ca deu da la hang so ngoai tru w va t thoi va minh da co phuong trinh vi phan cua w roi.

    Reply
  • admin May 25, 2008, 7:02 am

    Matlab thì không cần phải khai báo biến gì cả. Bạn cứ gán cho w các giá trị kiểu double thì nó sẽ là kiểu double thôi, hoặc kiểu dẫn suất của double đều được.

    Chúc bạn thành công.

    Reply
  • student May 25, 2008, 7:17 pm

    Bac admin oi, bac giup minh them ti nua nhe, that su la minh ko biet phai lam the nao.
    Minh co pt vi phan: dw/dt = (1/2H)(g + Tm)
    voi g = (Tref +kg*w)/(1+s*Tg)
    Tm = g/(1 + s*Ts)
    Voi Tref, kg, Tg, Ts la hang so
    s la toan tu laplapce
    bay gio em muon tinh w theo t va plot ra do thi (w,t)nhung minh lam hoai ko ra. Bac lam on chi can ke hon giup minh voi. Thanks bac

    Reply
  • admin May 25, 2008, 11:01 pm

    Để vẽ được đồ thị theo thời gian t thì đầu tiên bạn phải chuyển hết các phương trình đó sang miền ảnh Laplace rồi giả ra w(s).

    Sau đó dùng hàm để chuyển w(s) sang miền thời gian t w(t) rồi dùng lệnh plot bình thường thôi.

    Kiến thức về miền ảnh Laplace và miền thời gian đã được học trong Lý thuyết mạch rồi mà bạn.

    Chúc bạn thành công.

    Reply
  • admin May 26, 2008, 7:07 am

    Em đọc tham khảo tại đây về các lệnh liên quan đến axes.

    Để cho nó hiển thị ở giữa thì em chỉ cần set thuộc tính xmin, xmax, ymin, ymax theo gợi ý:

    axis([xmin xmax ymin ymax]) sets the limits for the x- and y-axis of the current axes.

    Như vậy em chỉ cần cho xmin = – xmax, ymin = -ymax là được.

    Chúc em thành công.

    Reply
  • student May 28, 2008, 7:41 am

    Mình sẽ thử xem. Cảm ơn bác Admin nhiều nhé.

    Reply
  • student May 30, 2008, 8:37 pm

    Chào bác Admin,
    Với cách của bác chỉ mình thì chỉ áp dụng được cho những phương trình đơn giản thôi, còn với những phương trình và hệ phương trình phức tạp thì mình không thể giải bằng tay theo cách này được. Mình ví dụ nhé:mình có hệ pt sau:

    ddelta/dt = w0(w-1)
    dw/dt=1/2H(Tm-Te + kd*ddelta/dt+g)
    dlamdad/dt = ed + ra.id + w0.w.lamdaq
    dlamdaq/dt = eq + ra.iq + w0.w.lamdad
    Te = lamdad.iq + lamdaq.id

    g = (Tref +kg*w)/(1+s*Tg)
    Tm = g/(1 + s*Ts)
    Voi Tref, kg,kd,w0 Tg, Ts la hang so
    s la toan tu laplapce.
    Nếu mà giải hệ pt này bằng tay, mình nghĩ sẽ rất dễ sai sót. Không biết trong matlab có giải pháp nào nữa không bác admin?

    Reply
  • admin May 31, 2008, 1:30 am

    Ai bảo bạn làm bằng tay. Với hệ này, chuyển hết các phương trình thành trên miền ảnh laplace s. Rồi sau đó tính toán dùng ma trận thôi.

    Sau đó, lại dùng hàm chuyển về miền ảnh t. Thế là xong.

    Học lý thuyết mạch, chắc bạn đã học các định luật Kiecsop 1, 2 rồi lập rất nhiều phương trình dạng tổng quát đúng không ? Không dùng ma trận của Matlab thì giải làm sao được. Mà rõ ràng là giải trên miền S.

    Bạn nghiên cứu lại đi nhé.

    Reply
  • student May 31, 2008, 8:20 pm

    cảm ơn bác admin nhiều.
    Mình sẽ nghiên cứu lại xem sao. Có gì mong bác admin chỉ giúp mình nữa với nhé!

    Reply
  • student June 2, 2008, 7:20 pm

    Hi bác admin!
    mình đã xem lại, nhưng bây giờ mình lại gặp 1 vấn đề đó là hệ pt này ko tuyến tính. Nếu bác admin xem pt3, pt4 sẽ thấy trong pt có phần tử w.Lq và w.Ld.Mình ko biết lập ma trận những pt này trong matlab thế nào. Bác admin có cao kiến gì không giúp mình với. Cảm ơn bác nhiều.

    Reply
  • admin June 3, 2008, 4:20 am

    Chào bạn.

    Nếu hệ phương trình không tuyến tính thì bạn dùng các phương pháp tuyến tính hóa như tuyến tính hóa tại điểm làm việc, … để giải hệ.

    Chúc bạn thành công.

    Reply
  • admin June 15, 2008, 2:20 am

    Chào bạn.

    Bạn dùng hàm dsolve để giải phương trình vi phân nhé.

    Chúc bạn thành công.

    Reply
  • admin June 15, 2008, 10:57 am

    Yahoo ID của mình: haibac_ac_hut

    Chúc bạn thành công.

    Reply
  • admin June 24, 2008, 10:09 am

    Chào em.

    Anh nghĩ nên làm một cái GUI có các chức năng sau:

    1. Một cái Axes dùng để hiển thị ảnh gốc lên. Một cái axes để hiển thị ảnh kết quả.

    2. Các nút bấm gồm: nút load để load ảnh trong PC lên, các nút lựa chọn thuật toán thực thi và nút thực hiện từng thuật toán đã lựa chọn.

    Vấn đề xử lý ảnh em xem trong Help phần Image Processing Toolbox nhé. Cái này nó nói khá rõ rồi.

    Khi em load ảnh vào thì Matlab đã chuyển cái ảnh đó thành ma trận ảnh cho em thực hiện rồi em ạ.

    Chúc em thành công.

    Reply
  • bqthanh June 24, 2008, 7:17 pm

    anh Bắc ơi, có cách nào để khi click vào nút load ảnh thì cho phép mình chọn bất kỳ cái ảnh nào trong pc không ạ

    Reply
  • admin June 25, 2008, 12:32 am

    Chào em.

    Thế này nhé, có phải là load ảnh thì có tham số là đường dẫn đúng không ?? Vậy thì khi em nhấn nút load ảnh cho phép người dùng chọn lựa một ảnh nào đó là được mà em.

    Gợi ý, khi nhấn nút Load thì hiện ra cửa sổ mới như Open trong các hộp thoại đó, có liệt kê tất cả các file ảnh của thư mục đó, khi đó user sẽ chọn ảnh theo ý của họ.

    Chúc em thành công.

    Reply
  • admin June 25, 2008, 12:33 am

    Chào em.

    Cảm ơn em đã quan tâm đến các bài viết của anh. Anh cảm thấy Help của Matlab là thư viện đầy đủ nhất. Anh chỉ toàn học ở trong đó ra mà.

    Cố gắng lên nhé em.

    Chúc em thành công.

    Reply
  • admin June 25, 2008, 12:34 am

    Chào em.

    Anh viết ít bài về xử ý ảnh bởi vì nhiều cao thủ ở đó lắm em ạ :mrgreen: .

    Xử lý tín hiệu số không phải là chuyên ngành của anh đâu.

    Chúc em thành công.

    Reply
  • bqthanh June 25, 2008, 7:54 am

    Nhiều cao thủ nhưng em chả thấy ai nhiệt tình giúp đỡ mọi người như anh. Nên dù họ có là cao thủ cũng chẳng có ý nghĩa gì hết.

    Reply
  • admin June 25, 2008, 7:57 am

    Chào em.

    Có 2 cách để tạo ra giao diện: bằng giao diện GUI hoặc bằng lệnh trong các M file.

    Nếu không có thấy file .fig thì chứng tỏ chương trình tạo ra giao diện nhờ các lệnh tạo ra các điều khiển. Em xem sẽ có các lệnh như uipanel, … Em đọc kĩ lệnh của nó và tra lệnh bằng Help nhé.

    Chúc em thành công.

    Reply
  • bqthanh June 25, 2008, 8:00 am

    anh Bắc ơi,ý em là như vậy đó.Sau khi nhấn nút Open thì mở ra cửa sổ để mình chọn 1 ảnh bất kỳ trong pc. Nhưng em chưa biết viết lệnh cho nút mở để load ảnh, anh có thể chỉ rõ hơn cho em được không ạ,

    Reply
  • bqthanh June 25, 2008, 8:09 am

    anh Bắc ơi,ý em là như vậy đó.Sau khi nhấn nút Open thì mở ra cửa sổ để mình chọn 1 ảnh bất kỳ trong pc. Nhưng em chưa biết viết lệnh cho nút mở để load ảnh, anh có thể chỉ rõ hơn cho em được không ạ. Em ngồi mấy ngày vừa đọc help vừa làm loay hoay mãi mà chưa làm được gì cả vì tiếng anh em cũng chỉ ở mức độ trung bình, lo quá

    Reply
  • admin June 25, 2008, 11:35 am

    Chào em.

    Việc này không có gì khó cả. Khi nhấn nút Load thì sẽ hiện ra một form khác. Vì thế em chỉ cần đi thiết kế một giao diện Open mà thôi.

    Gợi ý: em dùng lệnh dir để lấy đường dẫn của các file và thư mục trong thư mục hiện tại. Hãy xem giá trị trả về là kiểu gì ??

    Và dùng Listbox để hiển thị giá trị đó ra màn hình.

    Chúc em thành công.

    Reply
  • bqthanh June 25, 2008, 7:42 pm

    cảm ơn anh em đã làm được rùi, em dùng lệnh uigetdir:
    ten_biến = uigetdir(‘start_path’);

    à anh Bắc ơi, làm sao xem giá trị trả về vậy anh?

    Reply
  • admin June 25, 2008, 7:50 pm

    Chào em.

    Trước hết em thực hiện mấy lệnh này trong cửa sổ command để xem kiểu trả về.

    Nếu như anh thì anh làm như sau:

    1. Thử xem lệnh đó nó ra cái gì ?
    2. Chưa hiểu lắm, muốn làm chủ thì gõ lệnh Help command đó, để xem bọn nó nói gì. Rồi thử cho kết quả vào các biến.
    3. Gõ lệnh whos để xem kiểu dữ liệu từng biến đó. Hoặc xem trong workspace.

    Chúc em thành công.

    Reply
  • ngohaibac October 4, 2008, 2:48 am

    Chào em.

    Em muốn làm application có cả thanh toolbar và menu đúng không em?

    Cái đó đơn giản em ạ. Em tìm hiểu về Menu Editor trong GUI nhé. Em search trong Help thử xem nhé.

    Còn gọi một GUI khác thì chỉ cần gõ tên của GUI đó ra mà thôi.

    Chúc em thành công.

    Reply
  • ngohaibac October 26, 2008, 3:24 pm

    Chào bạn.

    Bạn đã focus vào từng axes chưa ? Ví dụ:

    axes(axes1);
    % Plot y1

    axes(axes2);
    % Plot y2

    Chúc bạn thành công.

    Reply
  • ngohaibac November 14, 2008, 9:26 am

    Em upload chương trình của em lên cho anh xem nào em? Có như thế góp ý mới nhanh.

    Em upload lên SkyDriver nhé. Nếu chưa có tài khoản thì đăng ký 1 cái email ở trên nhé.

    Chúc em thành công.

    Reply
  • QH November 15, 2008, 11:06 pm

    Em đã làm được rồi, nhưng không biết có cách nào khác ko. Còn em làm bằng cách:
    axes(handles.axes_input);
    hinput=mesh(xx,yy,inp,'Parent',handles.axes_input);
    set(hinput,'position',axis([0 2 0 2 0 4]));

    Reply
  • QH November 15, 2008, 11:15 pm

    Xin lỗi vì quá nóng vội. Làm như vậy vẫn có lỗi:

    ??? Error using ==> axis at 192
    Too many output arguments.

    Error in ==> demodct>pushbutton_input_Callback at 157
    set(hinput,’position’,axis([0 2 0 2 0 4]));

    Error in ==> gui_mainfcn at 96
    feval(varargin{:});

    Error in ==> demodct at 42
    gui_mainfcn(gui_State, varargin{:});

    ??? Error while evaluating uicontrol Callback

    Nhưng ở bên ngoài giao diện GUI (tức trong axes_input) tọa độ vẫn thiết lập được. Ko hiểu vì sao?

    Too many output arguments. Tại sao lại vậy được. Có lện axis([x1 x2 y1 y2 z1 z2]) cơ mà

    Reply
  • ngohaibac November 28, 2008, 7:49 pm

    Chào em.

    Nếu về tính toán thì em nên tận dụng Matlab, bởi vì cho thằng VB tính toán thì hơi mệt đó em ạ.

    Chúc em thành công.

    Reply
  • ngohaibac December 13, 2008, 5:52 am

    Chào em.

    Tài liệu đó đây

    Chúc em thành công.

    Reply
  • ngohaibac December 13, 2008, 7:46 pm

    Em đọc bài này nhé. Có code đầy đủ đó.

    Chúc em thành công.

    Reply
  • ngohaibac December 13, 2008, 10:59 pm

    Cái này có phức tạp gì đâu. Làm GUI để báo cáo cho hoành tráng thôi mà.

    Đề nghị em gõ tiếng Việt nhé. Website đã tích hợp bộ gõ rồi mà.

    Chúc em thành công.

    Reply
  • ngohaibac January 18, 2009, 5:52 am

    Chào em.

    Để có thể thực hiện Real-Time trên Matlab, em cần phải có Realtime Windows Target.

    Để vẽ theo thời gian thì em dùng Timer Object

    Chúc em thành công.

    Reply
  • Hoàn April 15, 2012, 9:52 am

    Em chào anh Bắc.Em đang làm đồ án về SC-FDMA trong LTE 4G,gặp vấn đề mô phỏng nhờ anh giúp đỡ.
    Em muốn thiết kế giao diện GUI để mô phỏng.
    Em muốn dùng popupmenu cho Modulation và một ô nhập giá trị cho Rolloff Factor
    Modulation la dạng String(có 2 giá trị là Q-PSK và 16QAM),Rolloff Factor có giá trị từ 0 đến 1.
    Sau đó gán dataType=giá trị của Modulation,Alpha=gia tri Roloff Factor và sử dụng dataType và Alpha làm giá trị biến đầu vào để chạy File.m khác.
    Nhờ anh chỉ giúp em với.Mail:hoan07dt3@gmail.com
    Cảm ơn anh nhiều!

    Reply
  • Nguyễn Tuấn Minh September 30, 2013, 1:36 am

    Em chào anh ạ. Hiện tại thì em đang làm đề tài liên quan đến việc Mô phỏng các phương pháp nâng cao chất lượng ảnh trong miền không gian và tần số ạ. Ai có tài liệu tham khảo gì thì có thể gửi cho em với được không ạ. Em xin cảm ơn

    Reply

Leave a Comment