登录论坛

查看完整版本 : 如何在Matlab中使用等待栏?


poster
2019-12-10, 20:48
我想为需要一段时间的操作准备一个等待栏。这是我的代码:

h = waitbar(0,'Please wait...'); for i=1:counterend waitbar(i/waitbarcounter) Atemp = At+i*step; handle = @(M) 1/M^2*((2/(gamma+1))*(1+(gamma-1)*M^2/2))^((gamma+1)/(gamma-1))-(Atemp/At)^2; Mach = fzero(handle, 5); Aplot(i) = Atemp/At; Tplot(i) = Tc / (1+(gamma-1)*Mach^2/2); Mplot(i) = Mach; plot(Aplot, Tplot) end close(h) Matlab给出的错误是:

???在249使用==>等待栏时出错
等待栏的参数不正确

经过调查,由于循环中存在环绕代码,我确定一定会发生此错误。

注意:没有等待条,循环工作正常。



回答:

跑步

counterend = 10000; >> h = waitbar(0,'Please wait...'); for i=1:counterend waitbar(i/counterend) end close(h); 在2007a / Windows XP上可以正常使用。

附带说明,这将有助于了解被抵消的对象的定义。快速检查的方法是确保您没有通过CELL。

跑步

counterend = {10000}; h = waitbar(0,'Please wait...'); for i=1:counterend waitbar(i/counterend) end close(h); 在2007a中产生了一个不同的错误(请参阅下文),但是此错误消息在2008年可能已更改。

???类型为“ cell”的输入参数的未定义函数或方法“ _colonobj”。

我的最后一点建议是警告您在大型阵列/数据集上使用waitbar。尽管我认为将进度告知用户很重要,但对我来说,还需要考虑将多少时间添加到循环中。通过处理具有100k +条目的数组,我成为了Profiler的虔诚用户,可以了解时间的实际消耗。我可以告诉您,时间不在i / X的计算中,而是全部在更新等待栏的显示中。为了减轻更新/绘制的麻烦,我仅每100到1000个条目更新了一次等待栏,这很有帮助。

编辑:更新响应以匹配最新代码

我首先在匿名职能部门开始解决此问题,过去与他们有问题,这是我的个人仇恨。当查看该函数时,我发现您正在使用gamma,您是否将此定义为常量(与循环/函数相同)?我问的原因是'gamma'是Matlab函数,尝试自行运行函数时出现错误。下面,我对您的代码做了一些修改,在这里确实可以正常运行。如果我做出的任何假设是错误的,请告诉我。另外,如果您确实打算使用gamma函数,则该函数将缺少任何参数。希望这可以帮助!

clc h = waitbar(0,'Please wait...'); counterend = 1000; waitbarcounter = counterend; g_amma = 7; At = 34; step = 2; Tc = 42; for i=1:counterend waitbar(i/waitbarcounter) Atemp = At+i*step; handle = @(M) 1/M^2*((2/(g_amma+1))*(1+(g_amma-1)*M^2/2))^((g_amma+1)/(g_amma-1))-(Atemp/At)^2; Mach = fzero(handle, 5); Aplot(i) = Atemp/At; Tplot(i) = Tc / (1+(g_amma-1)*Mach^2/2); Mplot(i) = Mach; plot(Aplot, Tplot) end close(h) 问候,

亚当



更多&回答... (https://stackoverflow.com/questions/3575789)