Running
counterend = 10000;
>> h = waitbar(0,'Please wait...');
for i=1:counterend
waitbar(i/counterend)
end
close(h);
在 2007a / Windows XP 上按预期工作。
顺便说一句,这将有助于了解反驳的定义。快速检查的方法是确保您没有向其传递 CELL。
Running
counterend = {10000};
h = waitbar(0,'Please wait...');
for i=1:counterend
waitbar(i/counterend)
end
close(h);
在 2007a 中产生不同的错误(见下文),但此错误消息可能在 2008 年发生了变化。
???未定义的函数或方法
'_colonobj' 用于输入参数
输入“单元格”。
我的最后一点建议是警告您在大型数组/数据集上使用等待栏。虽然我认为告知用户进度很重要,但对我来说,还关心循环中添加了多少时间。由于使用具有 10 万多个条目的数组,我成为了 Profiler 的忠实用户,以查看时间真正花在哪里。我可以告诉你时间不是在 i/X 的计算中,而是在更新等待栏的显示中。为了减轻 update/drawnow 的影响,我只每 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)
Regards,
Adam