gpt4 book ai didi

matlab - 如何让等待栏在 Matlab 中工作?

转载 作者:太空宇宙 更新时间:2023-11-03 19:32:31 24 4
gpt4 key购买 nike

我想为需要很长时间的操作设置一个等待栏。这是我的代码:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com