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

April 4, 2008

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

Các bài viết liên quan:

  1. Các tính chất của các điều khiển trong GUIDE Matlab Chào các bạn. Mình xin gửi các bạn tài liệu Matlab 7 – Creating Graphical User Interfaces, là tài liệu dạng .pdf của tài liệu trong Help của Matlab. Các bạn nào có thể tự đọc hiểu được English thì tài liệu này là quá đầy đủ rồi. Các bài viết của mình dựa một [...]...
  2. Tổng quan về hàm Callback trong lập trình GUI Sau khi các bạn tạo cái giao diện đã xong thì đến phần lập trình rất quan trọng, chính là lập trình các hành vi của các điều khiển để đáp ứng lại các sự kiện như nhấn phím, kéo thanh trượt, khi chọn menu, … đó chính là các hàm Callback (giống như các [...]...
  3. Tạo hình nền cho giao diện GUI Chào các bạn. Trong bài này mình sẽ hướng dẫn các bạn tạo hình nền hoặc một phần của giao diện GUI. Ý tưởng: dùng một Axes control để load hình ảnh. Như vậy, ngay khi chạy GUI thì ảnh đã hiển thị lên axes rồi nên trông như là hình nền của GUI vậy. [...]...
  4. Tạo file .exe cho giao diện GUI Matlab Chào các bạn. Sau khi các bạn đã biết cách để viết một giao diện GUI, biết cách dịch ra file .exe tự chạy trên một máy khác thì bây giờ mình kết hợp làm sao đây ?? Bài này mình dịch một project GUI tương đối là nhiều thành phần: RS232 Communication đã được [...]...
  5. Lập trình giao tiếp RS232 qua Matlab Chào các bạn. Mình xin tổng hợp lại một số bài viết của mình về lập trình giao tiếp RS232 trên PC bằng phần mềm Matlab. I. Đối tượng Serial Object Việc giao tiếp này cũng rất dễ dàng thực hiện, không có gì là quá cao siêu cả. Mình đã giao tiếp thành công [...]...
  6. Tạo file .exe trong Matlab dùng Matlab Compiler Có nhiều bạn khá băn khoăn về việc dịch một ứng dụng trong Matlab ra file .exe để chạy độc lập trên các máy không cài Matlab đúng không ?? Hay là cách để đóng gói sản phẩm của mình thì nên làm thế nào ? Để có thể dịch ra file .exe yêu cầu [...]...

{ 176 comments… read them below or add one }

1 dongden_87 May 15, 2008 at 10:29 pm

anh oi ,cho em hoi minh muon the hien hai ket qua tren cung 1 edittext thi phai lam the nao a,cam on anh, :?:

Reply

2 dongden_87 May 16, 2008 at 4:18 am

cam on anh , :D

Reply

3 student May 16, 2008 at 7:37 am

Cac ban cho minh hoi minh dung ham ilaplace de bien doi tu ham F(s) sang ham F(t)-mien thoi gian. Nhung khi the t vao de tinh F(t) thi bao loi. Cac ban chi giup minh cach khac phuc trong truong hop nay voi.

Reply

4 dongden_87 May 20, 2008 at 8:19 pm

anh Bac oi,em viet the nay thi no chay binh thuong :
y = sin(a*L*x) + cos(x);
plot(x,y);
con em sua dau + thanh dau * thi no lai bao loi ,vay thi do cai gi vay anh? :?:

Reply

5 dongden_87 May 21, 2008 at 5:08 am

ah,em tim ra loi roi,cam on anh nhe : :lol:

Reply

6 dongden_87 May 26, 2008 at 5:14 am

Anh oi,cho em hoi
Khi vẽ đồ thị,y=f(x),làm sao để đặt hệ trục tọa độ ở chính giữa 1 axes trong gui vay anh?

Reply

7 dongden_87 May 26, 2008 at 10:20 pm

Cam on anh nhieu nhe, :D

Reply

8 student June 15, 2008 at 1:55 am

Chào bác Admin,
Bác admin cho mình hỏi bác admin có biết cách giải hệ phương trình vi phân phi tuyến bằng cách thành lập ma trận dạng X = Ax + Bu không? Nếu bác biết thì chỉ mình cách làm với nhé. Cảm ơn bác nhiều.

Reply

9 student June 15, 2008 at 6:27 am

Chào bác Admin,
Cảm ơn bác đã reply lại cho mình.Nhưng vấn đề của mình là hệ pt vi phân phi tuyến và không có điều kiện đầu vì vậy mình không thể tìm được hằng số C và không thể plot ra đồ thị được. Do đó, mình phải chuyển nó về dạng ma trận vector để giải nhưng mình chưa hiểu lắm về cách lập này và cách plot vector theo thời gian.Mình cũng muốn trao đổi với bác admin về matlab. Bác admin có account YM không có thể cho mình được không để mình có thế dễ dàng trao đổi với bác. YM của mình là romantic3222. Mong sớm nhận được hồi âm của bác.
Chào bác

Reply

10 bqthanh June 24, 2008 at 8:29 am

anh Bắc ơi giúp em với. Em đang làm thực tập chuyên ngành đề tài của em là: ứng dụng Matlab để cài đặt một số thuật toán nâng cao chất lượng ảnh.Em chưa biết phải bắt đầu từ đâu. Anh có thể mở những bước đi đầu tiên cho em được không ạ, em phải bắt đầu từ đâu,cảm ơn anh nhiều

Reply

11 bqthanh June 24, 2008 at 7:22 pm

em đã đọc nhiều trong help của Matlab, nhưng quả thật khó hiểu, vì em mới nhập môn, đọc mấy bài của anh dễ hiểu thật,một lần nữa cảm ơn anh.

Reply

12 bqthanh June 24, 2008 at 8:00 pm

sao trong diễn đàn điện tử việt nam.Ít thấy anh Bắc viết bài hướng dẫn về xử lý ảnh vậy

Reply

13 bqthanh June 25, 2008 at 2:26 am

Chào anh Bắc, để mở các demo thiết kế(name.fig) có sẵn trong help vào chỗ nào vậy anh, em gõ Guide và tìm trong đó , nhưng chưa tìm ra cái file thiết kế mẫu đó.

chúc anh thành công trong sự nghiệp.

Reply

14 admin May 16, 2008 at 12:21 am

Chào em.

Em chỉ cần gán thuộc tính string của editext đó bằng 2 giá trị đó thôi mà em.

str = [str1,' ', str2];

hoặc là viết theo định dạng thì dùng lệnh sprintf.

Chúc em thành công.

Reply

15 bqthanh June 25, 2008 at 7:48 am

chào anh Bắc em đang dùng bộ Matlab 7. Trong phần help có cái demo: Examples of images and colormaps .Em đã thử tìm cái thiết kế giao diện của nó, để xem cách nó viết sự kiện cho các đối tượng, nhưng không tìm thấy, mấy cái demo khác thì có. Có khi nào nó chỉ có file .m mà không có file .fig không vậy anh Bắc. Nếu có anh có thể chỉ giúp em với.

Cảm ơn anh nhiều. Chúc anh thành công trong sự nghiệp.

Reply

16 bqthanh June 25, 2008 at 8:46 am

cảm ơn anh,em sẽ xem lại ngay.

À anh Bắc ơi.Sau khi nhấn nút Open thì sẽ mở ra 1 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õ từng bước 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á anh ơi.

mà mình nên load ảnh này lên trên axes hay là lên figure vậy anh

Reply

17 admin May 16, 2008 at 8:50 am

Góp ý với bạn, khi bạn trao đổi về lỗi gì thì bạn nên report code mà bạn đã dùng và lỗi hiện ra thì mình mới giúp bạn được. Bạn để trong thẻ b-quote nhé.

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

Reply

18 PHAP October 4, 2008 at 1:36 am

chao anh nhe!em muon lam chuong trinh co hien thanh tieu de, khi dup chuot vao no thi ket noi toi chuong trinh khac thi sao ha a?anh giup em voi.cam on anh nha

Reply

19 bang1902 October 25, 2008 at 10:51 pm

Chào các bạn, mình viết một chương trình, trong đó có 3 hàm thay đổi theo biến lambda là y1(λ), y2(λ) và y3(λ). Mình muốn hiển thị 3 hàm này trên 3 axes. Có các nút bấm là plot để hiển thị đồ thị, grid on để hiện lưới, grid off để tắt lưới và close để đóng chương trình. Nhưng khi mình viết thì nó chỉ hiển thị y1(λ) trên axes thứ 3 mà thôi. Các nút bấm cũng chỉ có tác dụng hoạt động trên axes3. Ai có cách nào giúp mình hiển thị cả 3 hàm trên 3 axes và cho các nút hoạt động chung cho cả 3 axes với.
Thanks!

Reply

20 Vương Đình Tuấn November 1, 2008 at 11:36 am

Chào anh.Xin anh giúp em về RS232.
Em tạo một GUI trên đó có một push button.khi click vào push button này thì dữ liệu truyền ra sẽ được nhận về và hiển thị lên textbox(em làm như anh đã hướng dẫn là nối chân Txd và Rxd lại với nhau).Nhưng em làm không hiển thị được.
Em mới bước đầu làm quen với mathlab.mong được anh giúp đỡ.

Reply

21 nhân November 14, 2008 at 8:47 am

chào anh. Em đang viết 1 cái gui để vẽ ảnh động của bài toán ném xiên vật. Input v đầu, góc ném rồi bấm nút để vẽ quỹ đạo và cái véctơ vận tốc và gia tốc, chương trình chạy dc. Nhưng khi thay đổi thông số nhập vào và cho vẽ lại thì ko đc, nó chỉ vẽ lại cái cũ. Phải tắt và mở lại thì mới nhập đc thông số mơi. Xin ý kiến của anh ạ.

Reply

22 QH November 15, 2008 at 10:58 pm

Chào bác Bắc!

Em có một vấn đề:
- dùng hàm:
hinput=mesh(xx,yy,inp,’Parent’,handles.axes_input);
—> có kết quả hiện ra trong axes_input. Nhưng các tọa độ x,y,z lúc này là mật định.

?: Em đã tìm chác set lại cái thuộc tính này,nhưng hok biết đưa cái dòng lệnh: axis([0 2 0 2 0 4]) và trong axes_input như thế nào. Nghĩa là thiết lập lại tọa độ của axes_input theo ý mình.

Như em đã đọc trong phần trên ảnh nói focus vào axes1. Và em đã thực hiện:

axes(‘axes_input’);
hinput=mesh(xx,yy,inp,’Parent’,handles.axes_input);

—> ??? Error using ==> axes
Value must be a handle.

Error in ==> demodct>pushbutton_input_Callback at 155
axes(‘axes_input’);

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

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

??? Error while evaluating uicontrol Callback

Sửa lại: axes(‘axes_input’); thành axes(axes_input); —–> lỗi báo hok khai báo: axes_input.

Sửa lại: axes(handles.axes_input); —> ko có lỗi. Nhưng kết quả hiện ra không phải lại tọa độ mình thiết lập:[0 2 0 2 0 4].

Vậy bây giờ em phải làm cách nào để set lại tọa độ trong axes_input vậy anh. Cảm ơn anh nhiều.

Reply

23 admin May 25, 2008 at 2:01 am

Chào bạn.

Khi dùng lệnh Plot(y,x) thì y và x là kiểu double. Nên ở trong lệnh của bạn sẽ convert kiểu của w sang double. Mà w là kiểu sym nên không convert được.

Bạn nghĩ cách chuyển w sang dạng vector đi nhé.Hoặc là w là một hàm với chỉ một biến t.

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

Reply

24 admin May 8, 2008 at 10:29 pm

Em giỏi thế còn gì nữa. Quả này thì không cần anh nữa rùi :mrgreen:

Reply

25 lehoan50clcxd November 28, 2008 at 9:50 am

Anh BẮc à.Em cũng đang quan tâm tới Matlab.Em học về xây dựng nên mấy phần lập trình em không rành lắm.Biết Matlab là một phâng mềm mạnh mà chưa khai thác đc cũng thấy tiếc.
Em muốn viết một phần mềm tính toán kết cấu .Anh nghĩ em nên lập trình bằng Matlab hay VB?Anh cho em lời khuyên nhé!thanks

Reply

26 anh la December 13, 2008 at 3:38 am

anh bac co the goi cho em tai lieu ve cach viet giao dien tren matlab ? em can mot tai lieu that day du

Reply

27 anh la December 13, 2008 at 5:35 pm

nghe bqthanh trao đổi với anh bắc về chèn ảnh trên GUI mình thấy hấp dẩn quá.mình cung đả tìm hiểu về matlab nhiều nhưng chủ yếu là về xử lý tín hiệu số.
ai đó có thể gởi cho mình một đoạn code mẩu đầy đủ về chèn ảnh trên GUI nha?
đoạn code mà mình có thể chèn một ảnh bất kỳ từ PC
cảm ơn mọi người nhiều.

Reply

28 anh la December 13, 2008 at 9:05 pm

cam on anh nha, em cu ngo la no phuc tap lam
cam on anh nhieu, :roll:

Reply

29 Tan Duc January 18, 2009 at 4:27 am

anh B cho em hỏi tý nhá
em viết 1 chương trình nhận liên tục dữ liệu từ bên ngài vào (cụ thể là cổng COM) và vẽ lên axes
vấn đề là làm sao để mình có thể cập nhật axes cứ 0,5s 1 lần.
khoảng cách giữa những lần nhận dữ liệu từ cổng COM là ko xác định
vậy có cách nào có thể thể hiện thời gian thực trên GUI ko anh??

Reply

30 student May 25, 2008 at 1:01 am

Bac admin cho minh hoi ti nha
minh viet doan code sau nhung khi chay chuong trinh thi bi bao loi , bac admin giup minh sua lai cho dung voi nha :

Tref = 1;
syms w s;
t=[1:0.1:10];
g = (Tref +kg*w)/(1+s*Tg);
Tm = g/(1 + s*Ts);
y1 = ilaplace(g);
y2 = ilaplace(Tm);
w = (1/2*H)*(y1 +y2);
w = int(w,t);
plot(w,t)
sau khi chay chuong trinh thi bao loi sau:
??? Error using ==> plot
Conversion to double from sym is not possible.

Error in ==> M1 at 94
plot(w,t)

Reply

31 hung_dtvt May 8, 2008 at 10:25 pm

:mrgreen: Vừa mò ra rồi a ơi.Phù GUI ni mệt ghê ấy. :D :D :D

Reply

32 Tuyet Anh May 7, 2009 at 8:26 am

Chào anh admin,

Em đang viết chương trình giải một hệ gồm 6 phương trình vi phân. Em chỉ mới tập viết thôi và viết theo hướng dẫn của sách thôi. Nhưng em thấy em viết chưa ổn lắm, nếu anh có thời gian anh có thể sửa giúp giùm em được không? Nếu được thì em sẽ gửi chương trình của em viết để nhờ anh xem giúp nha. Địa chỉ mail của em là: tuyetanh@gmail.com. Mong nhận được sự hồi âm của anh. Em xin cám ơn anh nhiều.

Reply

33 ngohaibac May 7, 2009 at 8:44 am

Em post chương trình của em lên đây anh em nào nhé, rồi anh viết thử cho mà xem.

Chúc em thành công.

Reply

34 Tuyet Anh May 11, 2009 at 3:27 pm

Em xin cám ơn anh Bắc nhiều nhé, anh xem thử và sửa giúp chương trình giùm em nhé. Xin cám ơn anh một lần nữa.

clear all

global k1 k2 k3 k4 k5 k6
%————————————————————————–

k1 = 0.05;
k2 = 0.11;
k3 = 0.215;
k4 = 1.228;
k5 = 0.242;
k6 = 0.007;

x0 = [1 0 0 0 6 0];
tspan = [0 0.1 3600];

[t,x] = ode45(@f,tspan,x0);
figure(1)
plot(t,x(1,:),t,x(4,:))
figure(2)
plot(t,x(2,:),t,x(5,:))
figure(3)
plot(t,x(3,:),t,x(6,:))
%—————————
function dxdt=f(t,x)
global k1 k2 k3 k4 k5 k6
f=[(-k1*x(1)*x(5))+k2*x(2)*x(6)
k1*x(1)*x(5)-k2*x(2)*x(6)-k3*x(2)*x(5)+k4*x(3)*x(6)
k3*x(2)*x(5)-k4*x(3)*x(6)-k5*x(3)*x(5)+k6*x(4)*x(6)
k5*x(3)*x(5)-k6*x(4)*x(6)
k1*x(1)*x(5)-k2*x(2)*x(6)+k3*x(2)*x(5)-k4*x(3)*x(6)+k5*x(3)*x(5)-k6*x(4)*x(6)
(-k1*x(1)*x(5))+k2*x(2)*x(6)-k3*x(2)*x(5)+k4*x(3)*x(6)-k5*x(3)*x(5)+k6*x(4)*x(6)];
—————————————————————————————

Reply

35 anh la December 13, 2008 at 6:13 am

em cam on anh nhieu nha! than men chao anh

Reply

36 ngohaibac May 12, 2009 at 4:44 pm

@Tuyet Anh: Chương trình của em làm sao hả em ? Em chạy gặp lỗi gì report lên đây a xem nào. Xin lỗi reply em hơi muộn nhé.

Reply

37 Tuyet Anh May 13, 2009 at 9:13 am

Khi em nhấn F5 thì thấy hiện lên dòng chữ như sau:
” ??? Undefined function or variable ‘giaiptvp1′ “, như vậy em phải chỉnh sửa lại chương trình như thế nào? Anh giúp em nhé. Xin cám ơn anh nhiều.

Reply

38 ngohaibac May 13, 2009 at 11:13 pm

Chào em.

Em xem lại đi, cái này không thể có lỗi đó được, vì chương trình của em chẳng chạy gì cái hàm đó cả. có lẽ đoạn chương trình của em là chưa đủ đúng không ? Em post hết cả lỗi lên lại a xem cho nhé.

Reply

39 Tuyet Anh May 14, 2009 at 9:07 am

Em không rành về matlab nên em chỉ xem ví dụ trong sách và làm theo như vậy thôi. Em muốn giải hệ gồm 6 phương trình vi phân. Em viết chương trình đúng với hướng dẫn của sách nên chương trình không chạy em không biết sửa thế nào. Em viết chương trình trên trong phần Editor và đặt tên cho file này là giaiptvp1-ode.m và khi em nhấn F5 thì em thấy báo lỗi “??? Undefined function or variable ‘giaiptvp1′.”, còn khi em copy phần này vào Command Window và em nhấn F5 thì em thấy báo lỗi như sau:

” ??? Error using ==> feval
Undefined function or method ‘f’ for input arguments of type ‘double’.

Error in ==> funfun\private\odearguments at 110
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.

Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, …”

Nếu như vậy thì chương trình của em phải sửa lại như thế nào? Em vui lòng chỉ dùm em nha. Em xin cám ơn anh nhiều.

Reply

40 Rabbit May 23, 2009 at 11:39 pm

Có cách nào nhập đc dãy số bằng GUI ko nhỉ? Như trong command nhập [1 2 3 4] vậy đó.

Dùng edit text, get xong rồi, nhưng chẳng biết làm sao để chuyển thành dãy số.

Cái thứ 2 mình dùng Matlab 2007b, chẳng cách nào dùng đc lệnh str2num như bạn viết, trong GUi dùng Str2double thì đc chứ dùng str2num thì nó báo ngay ??? Error using ==> str2num at 33
Requires string or character array input.
còn mình viết lại str2double thì đc, nhưng ko biết sao để nhập đc dãy số.
Mong bạn giúp đỡ

Y!M: ideal_tam

Reply

41 ngohaibac May 24, 2009 at 1:39 am

Chào bạn.

Thực sự ý của bạn là muốn nhập liệu thế nào ?

Nếu bình thường thì làm đơn giản như ví dụ sau:

a = ‘[2 3 4 5 6]‘; % a là xâu kí tự như thế
whos a
Name Size Bytes Class Attributes

a 1×11 22 char

>> b = str2num(a)

b =

2 3 4 5 6

>> whos b
Name Size Bytes Class Attributes

b 1×5 40 double

Có mảng b rồi thì cứ thế mà kết hợp vào với nhau mà thôi. Bây giờ mảng b là mảng 1×5 rồi mà.

Còn ở trên b=length(a) thì tất nhiên nó ra độ dài của a rồi, sao mà phải thắc mắc.

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

Reply

42 Rabbit May 23, 2009 at 11:45 pm

Mình đã thử dùng lệnh For để chia nhỏ string rồi nhập vào dãy nhưng cũng ko đc.

Mình test thử bằng cách tạo một EDIT text, nhập số, dùng lệnh GET, để nhập vào biến a

bấm b=length(a), rồi disp(b) thì kết quả hiện ra là 1, Matlab nó hiểu vậy đó, nên dùng for cũng bó tay.

Mình dùng Matlab 2007b

Reply

43 sudeku May 31, 2009 at 11:07 pm

may dai cao thu oi ,cho em xin 1 cai GUI mau cua ma bch 15-5 duoc ko a ,thanks cac anh chi nhiu

Reply

44 Nguyen August 2, 2009 at 2:46 am

Chao ban
Bài viết của bạn rất hay và dễ hiểu (đặc biệt cho dân ngoại đạo như mình, dân toán thuần túy)
Mình xin hỏi có cách nào xuất cái file cuối cùng đấy thành một file chạy độc lập được không, tức là chỉ cần copy file đó sang máy khác chỉ cần nháy đúp thì chạy được?
Cảm ơn rất nhiều

Reply

45 ngohaibac August 2, 2009 at 11:34 am

Chao ban.

Ban xem bai viet nay nhe: Tạo file .exe cho giao diện GUI Matlab.

Chuc ban thanh cong.

Reply

46 Hung Truong August 18, 2009 at 4:57 pm

Doc bai viet “Lập trình giao diện GUI trong Matlab (Phần 1)” minh thay rat hay, nen co tim xem phan 2 o dau de doc tiep, nhung tim mai khong thay. Neu ban chua viet thi minh rat mong la ban se som viet phan 2 de chia se cung moi nguoi.

Cam on ban rat nhieu.

PS: Xin loi vi khong the go duoc tien Viet

Reply

47 tanno September 1, 2009 at 11:12 pm

anh Bac chỉ giùm em cách thiết kế một cái đồng hồ dùng giao diện GUI,chủ yếu là anh chỉ giùm em cách viết code sử dụng timer như thế nào ,em chưa rõ về việc sử dụng timer trong GUI của matlab,không biết khai báo nó ở đâu cho hợp lý .
Cam on nhiều !!!!!

Reply

48 tanno September 1, 2009 at 11:15 pm

anh chỉ giùm em cách sử dụng timer trong GUI cua matlab ,ví dụ như thiết kế một đồng hồ .Cám ơn nhiều !!!!!!!!!!!!!!!

Reply

49 T. Anh September 23, 2009 at 7:40 pm

Chào anh,

Em là newbie của Matlab. Bài đầu tiên em đọc là bài này. Em làm như hướng dẫn, chạy ngon lành nếu Run khi open M-file. 4 + 5 = 9 … Nhưng nếu khởi động figure thì ko ra được kết quả tại Static Text.
Matlab báo error là:
??? Attempt to reference field of non-structure array.

Error in ==> untitled>buttonCalculate_Callback at 128
val1 = get(handles.editStr1,’String’);

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

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

Error in ==> guidemfile>@(hObject,eventdata)untitled(‘buttonCalculate_Callback’,hObject,eventdata,guidata(hObject))

??? Error while evaluating uicontrol Callback

Reply

50 ngohaibac September 23, 2009 at 8:43 pm

Chào em.

Em nên mở theo hướng dẫn: dùng lệnh guide rồi browse đến file .fig của project của em là được. Còn các cách khác là không khuyến cáo.

Chúc em thành công.

Reply

51 nhat tan November 4, 2009 at 4:07 pm

em có 1 đoạn code:
%VE HAM Pl THEO i
h=plot(i,Pl,’b*-’);
title(‘ket qua khong su dung FDL’);
xlabel(‘luu luong tai’);
ylabel(‘xac suat chum suy hao’);
%HIEN THI TREN HE TOA DO
axes(h)
viết có đúng hông zậy ? sao lúc chạy, nó báo là
Error using ==> axes
Invalid axes handle.
zậy đó, mong anh giúp đỡ dùm nha

Reply

52 ngohaibac November 7, 2009 at 9:25 am

Cái handles của hàm axes bạn đưa ra là sai rồi. Nó phải là handles của axes trên GUI chứ không phải là của cái plot đó. Phải làm theo tuần tự như sau:

axes(handles.axes1); % axes1 là cái tag của axes em vẽ trên GUI
plot(i,PI,'b*-');
.....

Chúc em thành công.

Reply

53 trang November 23, 2009 at 4:28 am

bạn ơi cho mình hỏi, làm thế nào để lập trình trong matlab phương trình bậc 3 và ra đồ thị của nó k bạn,giúp mình với,mình đang cần.

Reply

54 trang November 23, 2009 at 5:54 am

anh ơi,giúp e với,giúp e làm phương trình bậc 3 và cho nó ra đồ thị,e mới tập tành làm nên còn kém,mong a chỉ giáo,cảm ơn anh nhiều

Reply

55 ngohaibac November 24, 2009 at 9:36 pm

Chào em.

Cái của em không hề khó em ạ: em chỉ cần tạo GUI với 1 axes và một nút bấm mà thôi. Còn cách hiển thị hình lên axes em đọc các bài viết của anh đã viết là làm được mà. Đơn giản là dùng lệnh plot mà thôi.

Chúc em thành công.

Reply

56 toinhatminh November 24, 2009 at 9:41 am

Chào anh Bắc ,em có đọc 1 bài viết của anh Bắc nói về matran Phìm ,do anh bắc tự làm ,em muốn đọc lại bài viết đó nhưng kho thể nào tìm thấy được mong anh Bắc chỉ cho em xem lại cảm ơn anh Bắc nhiều
CHúc anh sức khỏe

Reply

57 ngohaibac November 24, 2009 at 9:33 pm

Chào em.

Em search ở trên chỗ hộp tìm kiếm được mà em với từ khóa: ma trận phím. Bài mà em cần nè: http://www.ngohaibac.net/phuong-phap-quet-keypad-ma-tran-ban-phim-dung-ngat-timer/

Chúc em thành công.

Reply

58 nguyễn văn thắng December 27, 2009 at 3:56 pm

Em chào anh.
Em xem video của anh hướng dẫn sử dụng gui trong calculator.
Trong bài của em là “Phương pháp tỉ lệ affine”
Em muốn tạo gui thì làm như thế nào ạ. Code em chạy được, nhưng khi gọi hàm callback thì không được. Anh có thể giúp em được không ạ.
Em cảm ơn anh

Reply

59 Nguyễn Văn Thắng January 11, 2010 at 1:46 pm

Em làm thử phương pháp tỉ lệ affine rồi mà cũng không được
Thuật toán như sau
% affine scaling algorithm
% solve: min c’x s.t. Ax = b, x >= 0
function [solvable, listX, bestx, optval]=affinescaling(A,b,c,const,maxiter,epsilon)
% bestx la gia tri tai diem dau va diem ket thuc
[m,n]=size(A); % Tìm so hàng, so cot cua ma tran A
A=[A (b-A*ones(n,1))]; % Thêm bien x_n+1
c=[c; 100000]; % Gán giá tri cho bi?n x_n+1
x = ones(n+1,1); % Nghiem ban dau chap nhan duoc x > 0 (Tat ca bang 1)
solvable = 0;
listX = zeros(n+1,maxiter+1); % Tat ca các giá tri tu n+1 toi maxiter+1 deu bang 0
listX(:,1)=x;
% Tat ca các cot tu n+2 toi maxiter+1 bang 0 còn cot n+1 là bang 1
disp(sprintf(‘Step = %d, cost = %f’,0,c’*x));
% step là so buoc lap còn cost là giá tri hàm muc tiêu
for step = 1:maxiter
X = diag(x.^2); % X = diag(x_1^2,…x_n^2)
y = (A*X*A’)\(A*X*c); % y là nghiem ung viên doi ngau
s = c – A’*y; % s bien bù doi ngau ung viên
if sum(s >= 0)==(n+1) && s’*x = 0)==(n+1)
solvable = 2;
break;
end
x = x+const*d/norm(x.*s); % Tính giá tri x tiep theo
listX(:,step+1)=x;
disp(sprintf(‘Step = %d, cost = %f’,step,c’*x));
end
bestx = x(1:n)
optval = c(1:n)’*bestx
if solvable == 0
listX = listX(1:end-1,1:maxiter);
else
listX = listX(1:end-1,1:step-1);
end

A=[-1 2 1 0 0; 2 1 0 1 0; 3 -1 0 0 1];
b = [8; 9; 6];
c = [-1; -1; 0; 0; 0];
[solvable, listX, bestx, optval]=affinescaling(A,b,c,0.95,200,1e-3);
plot(listX(1,:),listX(2,:),’r'), hold on
line([0 2], [4 5])
line([2 3], [5 3])
line([3 2], [3 0])
line([2 0], [0 0])
line([0 0], [0 4])
line([-1 3],[3 -1]) % Ham muc tieu
text(listX(1,1),listX(2,1), ‘ \leftarrow Bat Dau’);
text(bestx(1),bestx(2), ‘ \leftarrow Nghiem Toi Uu’);
axis([-1 5 -1 7])
axis square
xlabel(‘X1′);
ylabel(‘X2′);
title(‘PHUONG PHAP TI LE AFFINE GOC’);
%grid; % Ke o vuong
legend(‘Huong hoi tu’,'Mien da dien’)
hold off

Em tạo các nút được nhưng nhấp vào nó, thì không chạy.
Anh giúp em với 29/1 này em báo cáo rồi. Mà giờ vẫn chưa chạy được
Cảm ơn anh nhiều

Reply

60 tuthantuthuc January 26, 2010 at 9:40 am

admin ơi giúp em với. Em làm theo hướng dẫn của anh dùng lệnh set cái thuộc tính visible trong buttonDownFcn nhung sao khi chay giao dien ra thi no van cu xuat hien vậy?
Anh kiểm tra dùm em đi:
function popupmenu_chon_ButtonDownFcn(hObject, eventdata, handles)
val3= get(handles.popupmenu_chon,’Value’);
if val3==1
set(handles.edit_z,’Visible’,off);
set(handles.edit_y,’Visible’,off);
elseif val3==2
set(handles.edit_r,’Visible’,off)
set(handles.edit_L,’Visible’,off)
set(handles.edit_C,’Visible’,off)
set(handles.edit_g,’Visible’,off)
end
Ở đây em dùng 1 cái popupmenu để chon. Mong anh trả lời cho em sớm, thanks!

Reply

61 Quỳnh Như February 4, 2010 at 2:53 pm

Cho mình hỏi, mình muốn viết 1 m_file để khai báo 1 biến symbolic, vậy mình việc làm sao?
Mình viết là:
function kb()
syms x;

end
mà nó không hiểu. Mình đã sai chổ nào vậy, bạn nào chỉ mình với. Kảm ơn!

Reply

62 son May 7, 2010 at 3:36 pm

anh ơi! lam thế nào để hiện đoạn video trên nền GUI khi ta thực hiện bấm nút push button. loay hoay mãi mà em vẫn không suất đoạn video lên nền GUI được anh ah.anh chỉ giúp e với.

Reply

63 ngohaibac May 9, 2010 at 6:18 pm

Em làm thế nào, trình bày cho a xem nào, cho đoạn code mà em làm ra cho a xem. Lỗi gặp phải là gì ?

Reply

64 lekien May 9, 2010 at 7:50 am

minh hien dang lam mot bai tap ve guide, nhung minh can su giup do cua ban. rat nong ban hoi am de minh co the trao doi. nickeame:toilatoi_k87

Reply

65 ngohaibac May 9, 2010 at 6:05 pm

Hi bạn, Bạn cần gì thì post lên đây nào. Mình reply rồi đó :d

Reply

66 ngovanbay May 24, 2010 at 10:02 am

a co the jup e tim hieu lenh guide trong matlab

Reply

67 trongvp May 24, 2010 at 11:25 am

xin hoi cac pro. cac pro giup e voi, em dung mot vong lap for de ve mot hinh tron quet nhu mo hinh rada vay do bang lenh line nhung khong biet lam the nao de xoa cac line da ve truoc nen no tao ra ca hinh tron xanh le chu khong ra duoc hinh quet nhu mong muon xin cac pro giup do. cam on

Reply

68 dungquan May 29, 2010 at 11:18 pm

Anh Bắc ơi! Em đang làm đồ án về lọc ảnh. Em định dùng gui để làm. Anh định hướng giúp em với, nhất là phần add ảnh bên ngoài vào gui. Thanks anh trước hen!

Reply

69 admin April 26, 2008 at 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

70 admin April 26, 2008 at 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

71 admin April 28, 2008 at 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

72 admin April 28, 2008 at 2:50 pm

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

Reply

73 ngohaibac April 28, 2008 at 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

74 admin April 28, 2008 at 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

75 hung_dtvt April 28, 2008 at 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

76 hung_dtvt April 28, 2008 at 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

77 admin April 29, 2008 at 12:26 am

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

Reply

78 admin May 8, 2008 at 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

79 admin May 9, 2008 at 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

80 hung_dtvt May 8, 2008 at 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

81 User_vietnam May 12, 2008 at 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

82 admin May 12, 2008 at 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

83 admin May 12, 2008 at 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

84 admin May 21, 2008 at 8:16 am

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

Reply

85 student May 25, 2008 at 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

86 admin May 25, 2008 at 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

87 student May 25, 2008 at 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

88 admin May 25, 2008 at 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

89 admin May 26, 2008 at 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

90 student May 28, 2008 at 7:41 am

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

Reply

91 student May 30, 2008 at 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

92 admin May 31, 2008 at 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

93 student May 31, 2008 at 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

94 student June 2, 2008 at 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

95 admin June 3, 2008 at 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

96 admin June 15, 2008 at 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

97 admin June 15, 2008 at 10:57 am

Yahoo ID của mình: haibac_ac_hut

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

Reply

98 admin June 24, 2008 at 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

99 bqthanh June 24, 2008 at 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

100 admin June 25, 2008 at 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

101 admin June 25, 2008 at 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

102 admin June 25, 2008 at 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

103 bqthanh June 25, 2008 at 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

104 admin June 25, 2008 at 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

105 bqthanh June 25, 2008 at 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

106 bqthanh June 25, 2008 at 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

107 admin June 25, 2008 at 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

108 bqthanh June 25, 2008 at 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

109 admin June 25, 2008 at 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

110 ngohaibac October 4, 2008 at 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

111 ngohaibac October 26, 2008 at 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

112 ngohaibac November 14, 2008 at 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

113 QH November 15, 2008 at 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

114 QH November 15, 2008 at 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

115 ngohaibac November 28, 2008 at 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

116 ngohaibac December 13, 2008 at 5:52 am

Chào em.

Tài liệu đó đây

Chúc em thành công.

Reply

117 ngohaibac December 13, 2008 at 7:46 pm

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

Chúc em thành công.

Reply

118 ngohaibac December 13, 2008 at 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

119 ngohaibac January 18, 2009 at 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

Leave a Comment

CommentLuv Enabled

Previous post:

Next post: