专栏首页matlab爱好者带你玩转matlab进度条

带你玩转matlab进度条

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

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

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

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

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

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

应用示例

% 初始化进度条,并返回句柄
% 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函数中自带示例)

% 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

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

本文分享自微信公众号 - matlab爱好者(matlabaihaozhe),作者:matlab爱好者

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【资源】这可能是东半球最全的Linux资料

    很多Matlab的使用者,很多是科研工作者或者涉及理工知识行业的从业者, 在学习工作过程中经常会涉及到一些矩阵运算或线性代数等内容。那与这些部分相辅相成不可分割...

    艾木樨
  • K_means聚类的matlab应用

    在机器学习中,我们往往会遇到很大量的数据的处理,其中有一项就是聚类,即将相似的数据聚到一起,比较基础的就是K_means聚类算法。聚类是一种无监督学习,不需要训...

    艾木樨
  • matlab矩阵及其运算(七)

    在上一期中二狗matlab矩阵及其运算(六)给大家讲了三种常见的广逆矩阵类型,感兴趣的读者可以自行回顾。本期开始二狗给大家讲讲广逆矩阵的应用,由于广逆矩阵的应用...

    艾木樨
  • 24个最新创意进度条设计,分分钟让你灵感爆表!!!

    现今,Web或App 软件设计中,除却常见的加载动画,另一种时常出现在加载、下载,导航以及播放等页面中的组件设计——进度条设计。也能够有效地可视化等待,及时给予...

    奔跑的小鹿
  • Python · 进度条

    我实现的这个进度条可能是可以当做一个第三方库来使用的(这个人好自大,啧),它支持记录并发程序的进度且损耗基本只来源于 Python 本身

    py3study
  • 如何避免程序运行过程中出现错误中断程序?(下)

    本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地...

    用户7054460
  • 五大渠道,让小程序推广不再难!

    小程序发展至今,之所以被众多商家和企业重视,也是因为其易推广的特点。在流量成本如此高的情况下,小程序的低成本获客可以算是互联网的一股清流了。

    场景录小程序
  • 五大渠道,让小程序推广不再难!

    小程序发展至今,之所以被众多商家和企业重视,也是因为其易推广的特点。在流量成本如此高的情况下,小程序的低成本获客可以算是互联网的一股清流了。

    场景录小程序
  • 借助微信小程序,商家轻松对接移动盈利市场

    微信小程序,可以说是微信不惜投入90%的人力重点研发的一款新产品,这一年的时间,不断开放流量入口,无论的附近的小程序,还是搜一搜、扫一扫,公众号等等。每一个入口...

    企鹅号小编
  • 深度解析!公众号+小程序=?

    12 公众号+小程序=? 四年前,微信重点布局公众号,构建了强大的“内容生态圈”;如今小程序横空出世,微信频频发力与附能,显示了其构建“工具生态圈”的决心。不少...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券