Matlab - tính toán thời gian chạy ứng dụng, một hàm

August 13, 2009

Hôm trước có record video về  Video hướng dẫn lập trình GUI: tạo 1 máy tính đơn giản không thấy các bạn cho ý kiến gì, không hiểu có tốt không nữa, nếu k tốt thì sẽ dừng lại làm việc khác  :)

Hôm nay xin giới thiệu một công cụ đơn giản trong Matlab để tính toán thời gian chạy 1 hàm, chương trình trong Matlab. Thực sự cái này không hề biết là có đảm bảo tính thời gian thực hay không, bởi vì nó phụ thuộc vào PC có bao nhiêu CPU, hệ điều hành có Real-time không ? Do đó, thời gian này là chỉ là thời gian tính từ lúc chạy đến kết thúc, chưa chắc là thời gian thực sự cần để chạy chương trình đó, vì trong lúc chạy thì hệ điều hành Windows còn chạy vài ứng dụng vớ vẩn khác. Nếu chạy trong hệ điều hành  Real-Time thì mới biết là đúng dc.

Cách thực hiện rất đơn giản, giống như là bạn có 1 cái đồng hồ điện tử, nếu muốn tính toán thời gian thì ban đầu phải xem giờ là mấy giờ rồi, sau đó nhớ vào, rồi khi xong công việc xem lại rồi trừ đi là ra. Thì thằng  Matalb cũng làm vậy.

Cách 1: Dùng  TIC/TOC

Để biết tic, toc là gì, nên tự tìm hiểu qua với Help rất đầy đủ. Cú pháp đơn giản như sau:

tic; any_statements; tElapsed = toc;

Như vậy chương trình hay hàm gì gì đó thì vứt vào trong 2 cái tic, toc là xong. Giá trị trả về sẽ được cho vào 1 biến tElapsed hoặc cái nào tùy ý bạn.

Ví dụ sử dụng:

for n = 1:100
    A = rand(n,n);
    b = rand(n,1);
    tic
    x = A\b;
    t(n) = toc;
end
plot(t)

Cách 2: Dùng etime

Cái này hơi khác trên kia tẹo, cách thực hiện thực sự là theo nguyên tắc mình nói ở trên đầu. Đầu tiên phải lấy thời gian hiện tại dùng hàm clock, rồi sau đó trừ thời gian đi bằng lệnh etime để tính ra sai lệch. Gõ help etime để xem thêm.

Ví dụ đơn giản để sử dụng:

x = rand(800000, 1);
t = clock;  fft(x);  a = etime(clock, t)

Trong Help của  Matlab khuyên dùng  TIC/TOC nhưng chuyên gia của  Mathworks lại khuyên dùng etime khi dùng với  GUI tại đây.

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

  1. Video hướng dẫn lập trình GUI: tạo 1 máy tính đơn giản Chào các bạn. Sau một thời gian dùng Matlab, cũng như trả lời trao đổi của các bạn dùng Matlab để tạo giao diện ứng dụng để báo cáo đề tài, luận văn, ... Vì thế, mình dự định là sẽ tự thu một vài video tutorial hướng dẫn cách lập trình, cũng như một [...]...
  2. PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART Chào các bạn. Nay ngồi code cho con PIC16F887 để điều khiển đèn halogen, thực ra chính là điều khiển một chân rồi qua TIP122 và relay để điều khiển đèn thôi (vì dòng tải lên tới 10A). Mình thấy cách viết hay nên chia sẻ với các bạn. Dùng để lưu trữ luôn. Để [...]...
  3. 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 [...]...
  4. Demo sử dụng RTAI, ComediLib kết hợp với Matlab/Simulink/RTW Sau khi tốn một thời gian config linh tinh với Ubuntu 8.04 cuối cùng cài đặt xong RTAI và ComediLib nhân diện được xong cái PCI6220 của NI. Đến phần cài cái trình để biên dịch mô hình thành mã C thì thằng Scilab/Scicos chạy tốn quá nhiều CPU, move 1 cái mô hình là [...]...
  5. Học toán học và vật lý, thành lâp câu lạc bộ toán học Chào các bạn. Hôm nay, ngồi học tài liệu Robot Modeling and control để làm bài tập cuối kì  thì gặp phải các vấn đề về toán học và vật lý nên phải tìm hiểu và học lại hic hic. Nghĩ lại ngày xưa giải mấy bài toán, lý nhoay nhoáy,.. thế mà do tuổi [...]...
  6. Lời cảnh tỉnh của các bậc “Tiền bối” Alan Ereira Nguyên Phong dịch Bài viết này rất là ý nghĩa, nói về bộ lạc có nguồn gốc khác với loài người, sinh trước loài người. Các bạn hãy đọc và cùng suy nghĩ nhé. Mình xin bắt đầu trích bài viết này. LDG: Tháng 10 vừa qua, đài BBC tại Luân Đôn và [...]...

{ 4 comments… read them below or add one }

nguyen phuong hung December 17, 2010 at 9:12 pm

anh ơi, cho em hỏi bài này với:
hệ pt:
y1=asinx(bcos200x+c;
y2=a1x+b1
em làm thế này nhưng nó không vẽ đồ thị ra anh ạ
x=0:0.1:100;
y1=a*sin(x)*b*cos(200*x)+c;
plot(x,y1)
hold on;
y2=a1*x+b1;
plot(x,y1);
Anh có thể giúp em đc ko? Em xin cám ơn ạ

Reply

Chung April 19, 2011 at 12:06 pm

Chào các bạn, mình cũng đã làm lập trình Matlab lâu nhưng chưa bao giờ làm lập trình kết nối cả. Bây giờ mình muốn bắt đầu làm cái đó. Bây giờ mình muốn bắt đầu từ đâu, mình muốn sử dụng máy tính chạy matlab để ghi lại tín hiệu điện của một mạch điện có chứa điện trở thuần, đo I-U chẳng hạn. Vậy mình phải chuẩn bị những phần cứng gì, và sau khi lắp mạch xong, mình dùng lệnh gì trong matlab để chạy. Xin các bạn chỉ giúp mình với nhe. Cảm ơn rất nhiều

Reply

gacon000 June 6, 2011 at 1:31 am

anh bắc ơi cho e hoi để hiển thị thời gian thực lên guide thi dùng hàm nào dzị anh?

Reply

gacon000 June 6, 2011 at 11:33 am

a bắc ơi! khởi tạo và hiển thị thời gian thực trong guide matlab sao dzi a?
e đang làm về vấn đề đó a giúp e với

Reply

Leave a Comment

Previous post:

Next post: