- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想为需要很长时间的操作设置一个等待栏。这是我的代码:
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 给出的错误是:
??? Error using ==> waitbar at 249
Improper arguments for waitbar
经过调查,我确定这个错误一定是因为循环中的外围代码导致的。
注意:循环在没有等待栏的情况下工作正常。
最佳答案
运行
counterend = 10000;
>> h = waitbar(0,'Please wait...');
for i=1:counterend
waitbar(i/counterend)
end
close(h);
在 2007a/Windows XP 上按预期工作。
附带说明一下,了解 countered 的定义会有所帮助。需要快速检查的是确保您没有将 CELL 传递给它。
运行
counterend = {10000};
h = waitbar(0,'Please wait...');
for i=1:counterend
waitbar(i/counterend)
end
close(h);
在 2007a 中产生不同的错误(见下文),但此错误消息在 2008 年可能已更改。
??? Undefined function or method '_colonobj' for input arguments of type 'cell'.
我的最后一点建议是提醒您不要对大型数组/数据集使用 waitbar。虽然我认为通知用户进度很重要,但对我来说还有一个问题是循环中添加了多少时间。使用具有 100k+ 条目的数组,我成为 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)
问候,
亚当
关于matlab - 如何让等待栏在 Matlab 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3575789/
我是一名优秀的程序员,十分优秀!