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

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.

{ 6 comments… add one }
  • nguyen phuong hung December 17, 2010, 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, 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, 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, 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
  • doan nhu thang June 2, 2013, 4:12 pm

    cho toi hoi neu dung ham symsum(f,n,1,100) nhung cac buoc la 1 3,5 …99thi phai lam sao.
    co the tra loi qua email duoc khong cam on. nhuthang2007@yahoo.com

    Reply
  • Dung February 21, 2017, 9:16 am

    Hi admin.
    Về cái hàm tic/toc đó nha bạn.
    Nếu mình muốn đo thời gian chạy của một code. nào đó. từ lúc bắt đầu tới lúc chạy xong thì làm sao?
    Ý mình là mình có một đoạn code và mình muốn đo thời gian nó chạy đoạn code đó bạn. Không có cái vòng lặp đó đâu thì làm thế nào.
    ví dụ: mình có code:
    x=5;
    y=6;
    a= x*x*y
    mình muốn đo thời gian từ lúc cái x=5 tới lúc trả về giá trị của a thì làm thế nào?
    Cảm ơn admin

    Reply

Leave a Comment