数学建模社区-数学中国

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

作者: 墨雨金岚    时间: 2012-8-4 15:09
标题: 查看matlab程序运行进度
关于matlab中的waitbar(用于显示程序运行的进度)
0 Q8 j9 P" W; V应用1:" P. {; \+ o7 E# P" z- b: C6 e
h = waitbar(x,'message'); %其中x必须为0到1之间的数,message为显示的信息,其实这个x大于1也可以啊,但是进度条总在满的状态,x是多少就对应进度条显示的比例是多少
) w% W! u3 o( W举例: hwait=waitbar(0,'请等待>>>>>>>>'); %这个0显示的是进度条的位置,因为是0,就在起始位置,还有就是这个hwait就是这个waitbar函数的句柄3 j7 ?) n6 _% n; L' e
得到:
( U$ s: Q/ I" o. ?' o
/ h; Q2 |" a* P: ^9 h' N应用2:
6 U) s' U/ g! s: ]8 P. nwaitbar(x,h,'updated message'); % x为显示的进度,必须在0到1之间;h为所建立的waitbar的句柄,updated message为实时显示的信息,此语句经常地用于for循环中8 z' l# y, a* L( l$ g
举例:" m# c1 I& Q: h: ?& P/ U- |/ L) C  I) |
steps=100;3 U; d. \0 U4 s3 q
hwait=waitbar(0,'请等待>>>>>>>>');4 U! T4 h1 Q  k( z% _9 @- ]: U3 v
for k=1:steps
# P7 g) x9 P: G& j, ^/ ?; tif steps-k<=51 U" x/ s3 h3 {" P
waitbar(k/steps,hwait,'即将完成'); %因为k/steps在逐步增大,所有进度条在往右走,另外,如果这个hwait不加上的话,会显示n多个进度条窗口,让你关闭不过来啊,加上之后就只显示一个了( N# N! M* @5 l$ v6 I
pause(0.05); %延时一下啊 否则太快看不出来变化,一般有个0.01就能看出变化,但还是比较快的5 b& C; Y# x1 T" o+ K' V" `0 B9 U
else7 {# N% I. y) b5 v2 a. I" X
str=['正在运行中',num2str(k),'%']; %用于显示如下图中“正在运行中46%”等比例数据
; m& U+ g: c: e6 u3 w# @waitbar(k/steps,hwait,str);
9 S% a2 L& t* d8 H. B3 o( spause(0.05); %pause(n)函数是程序停止n秒后继续,n可以使分数或小数。函数的分辨率根据平台而定,大多数平台都能满足0.01秒的精度。
# |( j" f9 P+ m7 T1 }5 Oend
2 I" P* P* R- f7 n, i% ^. pend
9 Q: l5 K9 p) v6 A# p5 G/ i- Vclose(hwait); % 注意必须添加close函数,也就是说运行完成后让此进度条消失
' r# E; _% w: c结果如下所示:
) u) s$ y5 J& i显示正在运行中:* W3 _! a  G/ C. A
9 u& e& N- e& F
显示即将完成:  j0 j5 ?3 _+ `* ~( }- |4 Q, o& J
3 K0 b/ ~% w3 n/ S1 ~# @
上例子中,当循环步骤刚好是100,但是如果循环不是100的时候,要作小小的改变,举例如下:* F& P' S: @( r1 H* Z
steps=150;
% E& x4 V% x: g- R3 fhwait=waitbar(0,'请等待>>>>>>>>');
6 X) R8 T3 x" T3 H6 `* C  [step=steps/100; %这里step=1.5; B+ w" e' |- v
for k=1:steps; o1 l! {  R9 t9 d0 F
if steps-k<=5
8 w3 o/ n- l) R( Ewaitbar(k/steps,hwait,'即将完成');" @$ A! l& L2 h) R% S( k
pause(0.05);* W- G. p7 p! C
else
# G8 T+ Q3 b+ v1 ?2 b: ~9 ePerStr=fix(k/step); %fix是向0靠拢取整函数
; u. z7 l5 Z9 i2 l& }: R' u3 J" \. Dstr=['正在运行中',num2str(PerStr),'%']; %把1到150的数换算到1到100内,看占的百分比
/ S* B2 `+ q" c- Ywaitbar(k/steps,hwait,str);
. l1 j0 e2 G2 L, F; S& Npause(0.05);
& l# x5 ~( Q8 k! [end
3 _  G2 W0 X- Eend
/ C% R/ V+ i0 Qclose(hwait);
% y. d9 J4 S1 r7 z9 b0 X% H结果和上面是一样的
4 E- N8 a, [: m
作者: shaox    时间: 2012-8-4 17:13
不错,有意思~~
作者: 墨雨金岚    时间: 2012-8-4 23:18
shaox 发表于 2012-8-4 17:13 ; I: O& l+ r( x- h
不错,有意思~~
* B( V  u% r  X9 \' R
呵呵,有道是:美文共欣赏,疑义相与析,是也
作者: greyson    时间: 2013-8-19 11:21
好赞!谢谢楼主!




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