数学建模社区-数学中国
标题:
查看matlab程序运行进度
[打印本页]
作者:
墨雨金岚
时间:
2012-8-4 15:09
标题:
查看matlab程序运行进度
关于matlab中的waitbar(用于显示程序运行的进度)
) |" A: \$ W! C$ i
应用1:
9 C" Y& u0 }+ ?; n
h = waitbar(x,'message'); %其中x必须为0到1之间的数,message为显示的信息,其实这个x大于1也可以啊,但是进度条总在满的状态,x是多少就对应进度条显示的比例是多少
5 J- P; s, K: g
举例: hwait=waitbar(0,'请等待>>>>>>>>'); %这个0显示的是进度条的位置,因为是0,就在起始位置,还有就是这个hwait就是这个waitbar函数的句柄
# d$ N/ G+ h) V. Q- ?
得到:
2 o" ~/ b( C0 `( U+ u5 G# X
8 n) ], u. A1 I. k
应用2:
# D ^) T' i3 i" G6 Y# x
waitbar(x,h,'updated message'); % x为显示的进度,必须在0到1之间;h为所建立的waitbar的句柄,updated message为实时显示的信息,此语句经常地用于for循环中
! }) A$ g3 u$ P- y1 x% Z0 }2 T
举例:
1 v8 @9 @1 ^. @! L( Z" q- @
steps=100;
5 q# ?$ L: [2 o" [; ^8 p
hwait=waitbar(0,'请等待>>>>>>>>');
* e; g% u5 U4 p* B, u. p- d
for k=1:steps
, ?$ N' Q5 w' ^7 }( ^! H
if steps-k<=5
, g9 e. B7 m7 H3 M" ~/ ^2 P
waitbar(k/steps,hwait,'即将完成'); %因为k/steps在逐步增大,所有进度条在往右走,另外,如果这个hwait不加上的话,会显示n多个进度条窗口,让你关闭不过来啊,加上之后就只显示一个了
% |$ }, {- v$ c( H5 e4 @
pause(0.05); %延时一下啊 否则太快看不出来变化,一般有个0.01就能看出变化,但还是比较快的
! b2 ]! L- u& V: P W: k, p
else
2 E$ {: }' q. T7 B( m$ R& H! @
str=['正在运行中',num2str(k),'%']; %用于显示如下图中“正在运行中46%”等比例数据
0 T* U" N4 S- B" n1 G! b6 F- T5 Q
waitbar(k/steps,hwait,str);
4 d b+ ?2 \/ a: n% G# w
pause(0.05); %pause(n)函数是程序停止n秒后继续,n可以使分数或小数。函数的分辨率根据平台而定,大多数平台都能满足0.01秒的精度。
t! P# w- i* t; m4 ]( [, B' h
end
% e5 M/ G! h- W5 [
end
. Z' K' o8 J/ t O
close(hwait); % 注意必须添加close函数,也就是说运行完成后让此进度条消失
( h5 J9 f- C3 ~, |& ?7 D. P' @
结果如下所示:
( {, |7 b$ ], i. [: ^3 C7 r: v/ R4 q
显示正在运行中:
9 P4 z: U$ A$ X! R9 b1 M
1 L6 H* n+ L1 g7 X* }8 [' k
显示即将完成:
3 x) `9 ]$ {% ^: A2 ^6 S
! m" o: t. \. v6 N7 d) i- Z
上例子中,当循环步骤刚好是100,但是如果循环不是100的时候,要作小小的改变,举例如下:
- Q- y6 q, j" ]( Q; H8 a, g. `% H
steps=150;
$ P; H: e& R, x7 U0 g
hwait=waitbar(0,'请等待>>>>>>>>');
3 }/ m! \" y& G
step=steps/100; %这里step=1.5
0 ]+ p3 F$ b$ G. o. i* v3 I; [
for k=1:steps
. Z2 ]0 P6 T* H" A+ m# D
if steps-k<=5
6 ]- G7 w3 V. `3 @6 j/ v
waitbar(k/steps,hwait,'即将完成');
' w6 h5 a) V" t) S, {0 X8 k9 M$ C
pause(0.05);
G/ ?9 C# K& B0 K, D( B+ W. m( B
else
. V9 Z: l8 ?) N
PerStr=fix(k/step); %fix是向0靠拢取整函数
% I) a2 |4 h9 v6 e, w$ B" ^& I
str=['正在运行中',num2str(PerStr),'%']; %把1到150的数换算到1到100内,看占的百分比
8 k5 ]/ j8 S1 ^, K9 ]$ h, W
waitbar(k/steps,hwait,str);
9 F: Y }0 T# J K5 y
pause(0.05);
9 p, n, T5 |. }8 W
end
8 G7 e6 U J; X7 ~* R- B
end
, s' }& h7 g: `2 W# p, q& Z4 J
close(hwait);
5 F# ~5 x0 @" Q6 I% M8 Z$ M
结果和上面是一样的
4 v6 L8 H" |& w: ~8 Z7 x" h D
作者:
shaox
时间:
2012-8-4 17:13
不错,有意思~~
作者:
墨雨金岚
时间:
2012-8-4 23:18
shaox 发表于 2012-8-4 17:13
9 c' h1 N$ X0 T* s
不错,有意思~~
# R( u& v& t* z* c/ v, L
呵呵,有道是:美文共欣赏,疑义相与析,是也
作者:
greyson
时间:
2013-8-19 11:21
好赞!谢谢楼主!
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5