前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >带你玩转matlab进度条

带你玩转matlab进度条

作者头像
巴山学长
发布2020-02-17 15:12:50
4.2K0
发布2020-02-17 15:12:50
举报
文章被收录于专栏:巴山学长巴山学长

有不少小伙伴肯定执行过运行时间到达几小时甚至是几天的matlab程序,运行之后就只看见命令窗口光标一直在闪、左下角状态区一直显示“正忙”,然后,然后就没有然后了,就傻傻地任程序在那里放飞自我

。对于程序已经完成了多少,还剩多少,花了多少时间,还差多少时间全然不知,有没有什么办法可以完美解决这个问题呢?

答案是肯定的,那就是通过在程序运行关键的地方添加进度条。对于一个没有循环的顺序执行程序而言,其计算速度是极快的,故没有必要添加进度条;对于含有循环且运行时间较长的程序而言,程序一般运行时间开销大部分集中在循环部分,因此在程序循环部分添加进度条来代表整个程序的运行进度是能够被接受的。

在matlab中创建进度条的函数为:waitbar

调用格式:f = waitbar(x,msg) ,x为进度条中等待条的长度,其取值在[0, 1]中,msg为等待条消息内容,f为进度条figure句柄。

更新方式:waitbar(x,f,msg),x为进度条中等待条的更新后的位置,f为已存进度条figure句柄,msg为等待条消息内容。

应用示例

代码语言:javascript
复制
% 初始化进度条,并返回句柄
% e = lim(1+1/x)^x (x -> ∞)
f = waitbar(0,'1','Name','极限法求自然常数e值');
% 设置进度条背景颜色
set(f,'color','w');
% 设置x的最大取值
x = 2000;
% 在循环中加入进度条来显示计算过程状态
for k = 1:num
    % Update waitbar and message
    ek = (1+1/k)^k;
    waitbar(k/num,f,sprintf('%s %12.9f %s','当前e值: ',ek,['已完成:',num2str(round(100*k/num)),'%']))
end

有些时候需要多层次监控程序的运行,这时候再使用直接waitbar函数就显得有些困难,通过查阅资料发现由Steve Hoelzer开发的progressbar函数能够实现此功能。progressbar函数具体调用格式请参考程序中的的帮助文档,这里只给出两种需要使用到的方式:

a. progressbar('lab1', 'lab2', ..., 'labn'),lab1, lab2, ..., labn为进度条中n个等待条的标签名称,n用于确定进度条中等待条的条数,此命令的作用是初始化或重置进度条的标签以及值;

b. progressbar(num1,num2, ..., numn) , num1, num2, ..., numn为取值范围在[0, 1]中的实数,此条命令的作用是更新进度条中n条等待条的长度,numi为可以为空,numi为空时,则第i条等待条长度不更新。

示例程序(源自:progressbar函数中自带示例)

代码语言:javascript
复制
% Fancy multi bar (use labels and update all bars at once)
m = 5;
n = 5;
p = 100;
% 初始化进度条并赋3个标签名称
progressbar('Monte Carlo Trials','Simulation','Component') % Init 3 bars
% 在三重循环中演示progressbar的多层次监控能力
for i = 1:m
    for j = 1:n
        for k = 1:p
            pause(0.01) % Do something important
            % Update all bars
            % 最里层
            frac3 = k/p;
            % 中间层
            frac2 = ((j-1) + frac3) / n;
            % 最外层
            frac1 = ((i-1) + frac2) / m;
            % 实时更新进度条
            progressbar(frac1, frac2, frac3)
        end
    end
end

以上就是今天的全部内容,如有疑问或不清楚progressbar函数如何使用,欢迎在推文下方留言,在公众号中回复“进度条”即可获取今天相关函数。

感谢您的关注和阅读!

参考资料:

[1] https://ww2.mathworks.cn/help/matlab/ref/waitbar.html

[2] https://www.mathworks.com/matlabcentral/fileexchange/6922-progressbar

如需转载,请在公众号中回复“转载”获取授权,未经授权擅自搬运抄袭的,必将追究其责任!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档