数学建模社区-数学中国

标题: 查看matlab程序运行进度 [打印本页]

作者: 墨雨金岚    时间: 2012-8-4 15:09
标题: 查看matlab程序运行进度
关于matlab中的waitbar(用于显示程序运行的进度)
( J$ b' n: L3 s) r% O+ A+ G# C应用1:
. A5 E! K* J' u- U% eh = waitbar(x,'message'); %其中x必须为0到1之间的数,message为显示的信息,其实这个x大于1也可以啊,但是进度条总在满的状态,x是多少就对应进度条显示的比例是多少
, A9 V! B$ s  v8 }* |; ]1 P举例: hwait=waitbar(0,'请等待>>>>>>>>'); %这个0显示的是进度条的位置,因为是0,就在起始位置,还有就是这个hwait就是这个waitbar函数的句柄% J. K/ T, b% l; W9 d8 o, B: ?6 Z
得到:
3 o0 M) O/ b6 U& I: ~, X3 L
. N( @$ T+ f1 F+ ~2 \% n应用2:. U2 o! J/ \5 z4 E
waitbar(x,h,'updated message'); % x为显示的进度,必须在0到1之间;h为所建立的waitbar的句柄,updated message为实时显示的信息,此语句经常地用于for循环中8 [' \3 t% V; |! ~7 p" i: E
举例:
5 I& ^8 u* H4 b3 S7 Usteps=100;
1 m& N, d( r7 }$ {. i! x9 o# ~hwait=waitbar(0,'请等待>>>>>>>>');& }0 T9 L) L: e1 ^( Q: M
for k=1:steps* ]2 k0 v, j! r/ w
if steps-k<=5. o  o$ J9 G0 Q9 B1 X/ V
waitbar(k/steps,hwait,'即将完成'); %因为k/steps在逐步增大,所有进度条在往右走,另外,如果这个hwait不加上的话,会显示n多个进度条窗口,让你关闭不过来啊,加上之后就只显示一个了
6 D3 ]- F" J7 h& Z- v: Vpause(0.05); %延时一下啊 否则太快看不出来变化,一般有个0.01就能看出变化,但还是比较快的
- f. X3 V0 n( b5 \! {% `5 D1 Qelse
  a0 g) G9 M$ J0 W2 u! `str=['正在运行中',num2str(k),'%']; %用于显示如下图中“正在运行中46%”等比例数据- {* U3 l- U. o" u% [( R+ m; q; a4 Q
waitbar(k/steps,hwait,str);
2 w* n7 R1 h1 e2 T" t- Q8 n8 z. X6 qpause(0.05); %pause(n)函数是程序停止n秒后继续,n可以使分数或小数。函数的分辨率根据平台而定,大多数平台都能满足0.01秒的精度。( U6 [% G! J$ e7 R. e3 P5 Z
end
1 ?, b0 w- Z* M0 g) d# g9 x7 wend
, W( U& O" f: p4 j1 b4 Lclose(hwait); % 注意必须添加close函数,也就是说运行完成后让此进度条消失( F8 V8 |7 [6 S) A! ?1 R5 u
结果如下所示:
8 L- a5 Z' V1 J显示正在运行中:
: C5 P2 T6 P* B7 w . Q. Z8 q5 H0 c! ]% u! W9 V
显示即将完成:
  }/ c9 P% U: ~0 t4 E, \  h' ] + k5 z7 e, y) b  ]
上例子中,当循环步骤刚好是100,但是如果循环不是100的时候,要作小小的改变,举例如下:
9 b8 z; A7 G! d; |3 z; O. ]* C) wsteps=150;  x1 q/ v4 c8 l6 m5 `
hwait=waitbar(0,'请等待>>>>>>>>');+ F4 L9 d, v$ H, f
step=steps/100; %这里step=1.5
" b2 f1 r8 V* S# pfor k=1:steps
. m6 Y: }$ B! F; qif steps-k<=55 r1 Q2 J* b' k* O9 Q" l
waitbar(k/steps,hwait,'即将完成');; R& Z5 q* e) O0 g/ I( l
pause(0.05);
$ z/ F  r( `. E3 melse
* h2 n( S* w' @  jPerStr=fix(k/step); %fix是向0靠拢取整函数  Z* ^9 @, j# n. b* `
str=['正在运行中',num2str(PerStr),'%']; %把1到150的数换算到1到100内,看占的百分比& Q( E$ U. T. R  N4 [4 p9 }+ H
waitbar(k/steps,hwait,str);  C: t; w4 N. h3 Q
pause(0.05);
6 I5 ~& n0 |( Eend
! b, a8 i2 e# M) w  K  i/ [end
# v; T5 U% `  k$ }% u& K3 E9 V% lclose(hwait);1 b$ F8 \; }% a+ n! v% e2 m, T7 D, n5 H
结果和上面是一样的" n7 }8 s, Y$ r, s4 I  m% [

作者: shaox    时间: 2012-8-4 17:13
不错,有意思~~
作者: 墨雨金岚    时间: 2012-8-4 23:18
shaox 发表于 2012-8-4 17:13 8 W) L, E0 t: x9 m7 @' z
不错,有意思~~

$ ?, C( u5 `7 I7 a$ a9 ~7 c呵呵,有道是:美文共欣赏,疑义相与析,是也
作者: greyson    时间: 2013-8-19 11:21
好赞!谢谢楼主!




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5