2016-10-15 136 views
0

我正在運行需要一些時間的程序。最好實時顯示運行進度,並顯示在命令窗口中。類似下面:Matlab如何顯示文本顯示在命令窗口中的進度

>>>>>>>> completed 90% 

假設程序運行時,雖然多重循環:

for ii = 1:n 
    for jj = 1:m 
     for kk = 1:s 
      ..... 
     end 
    end 
end 

有什麼有效的方法或一些特殊的功能,以實現這一目標?我不想使用waitbar.m,因爲我還在命令窗口中實時打印了其他結果。這些打印結果,加上發短信的進度,用於方便檢查。

回答

1

如果您不介意在單獨的窗口中打開進度顯示,則可以使用Matlab waitbar

對於你的榜樣,說你想計算基礎上完成了外循環迭代的數量waitbar,它會像

h=waitbar(0, 'My waitbar'); 

for ii = 1:n 
    for jj = 1:m 
     for kk = 1:s 
      ..... 
     end 
    end 
    fraction_done = ii/n; 
    waitbar(fraction_done) 
end 

close (h) 

如果你真的想要一個基於文本的顯示,有是在https://www.mathworks.com/matlabcentral/fileexchange/56424-waittext的MATLAB File Exchange上可用的等待文本

我沒有與此工作,但它似乎與你想要的相似。

+0

我不是說waitbar。我希望命令窗口中顯示的進度爲打印文本,並根據進度更新文本。 – jingweimo

1

首先,您需要計算每次內循環前進時的百分比步長。這可以通過計算來完成:

percent_step = 1.0/n/m/s 

然後,你可以強制MATLAB使用\b(退格字符)的串聯在同一行打印。這裏是一個MWE,只是計算一個隨機10x10矩陣,並得到其轉置(只是爲了顯示進度百分比):

backspaces = ''; 
percentage = 0; 

% DEFINE n, m, s as you wish, here I put some random values 
n = 100; 
m = 15; 
s = 24; 

percent_step = 100.0/n/m/s; 

for ii = 1:n 
    for jj = 1:m 
     for kk = 1:s 

      % Do stuff 
      a = rand(10); 
      b = a'; 

      % Print percentage progress 
      percentage = percentage + percent_step; 
      perc_str = sprintf('completed %3.1f', percentage); 
      fprintf([backspaces, perc_str]); 
      backspaces = repmat(sprintf('\b'), 1, length(perc_str)); 

     end 
    end 
end 
相關問題