Matlab如何显示在命令窗口

时间:2016-10-15 23:54:24

标签: matlab

我正在运行一个需要一些时间的程序。最好在命令窗口中显示实时显示运行进度。如下所示:

>>>>>>>> completed 90%

假设程序通过多个循环运行:

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

是否有任何有效的方法或某些特殊功能来实现这一目标?我不想使用waitbar.m,因为我还在命令窗口中实时打印了其他结果。这些打印结果与文本进度相结合,用于方便检查。

2 个答案:

答案 0 :(得分:1)

如果您不介意在单独的窗口中打开进度显示,则可以使用Matlab 等候栏

对于您的示例,假设您想根据外部循环上完成的迭代次数计算等待条,它将类似于

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文件交换中可以使用 waittext

我没有使用过这个,但它看起来与你想要的类似。

答案 1 :(得分:1)

首先,每当内循环前进时,您需要计算百分比步长。这可以通过计算来完成:

percent_step = 1.0 / n / m / s

然后,您可以使用\b(退格符)的串联强制MATLAB在同一行上打印。这是一个只计算随机10x10矩阵并获得其转置的MWE(仅显示进度百分比):

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