数学建模社区-数学中国
标题:
查看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. n
waitbar(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, ^/ ?; t
if steps-k<=5
1 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
else
7 {# 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( s
pause(0.05); %pause(n)函数是程序停止n秒后继续,n可以使分数或小数。函数的分辨率根据平台而定,大多数平台都能满足0.01秒的精度。
# |( j" f9 P+ m7 T1 }5 O
end
2 I" P* P* R- f7 n, i% ^. p
end
9 Q: l5 K9 p) v6 A# p5 G/ i- V
close(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 f
hwait=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( E
waitbar(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 e
PerStr=fix(k/step); %fix是向0靠拢取整函数
; u. z7 l5 Z9 i2 l& }: R' u3 J" \. D
str=['正在运行中',num2str(PerStr),'%']; %把1到150的数换算到1到100内,看占的百分比
/ S* B2 `+ q" c- Y
waitbar(k/steps,hwait,str);
. l1 j0 e2 G2 L, F; S& N
pause(0.05);
& l# x5 ~( Q8 k! [
end
3 _ G2 W0 X- E
end
/ C% R/ V+ i0 Q
close(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