Запуск
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» для входных аргументов типа «ячейка».
Последним моим советом было бы предостеречь вас об использовании панели ожидания для больших массивов / наборов данных.Хотя я думаю, что важно информировать пользователя о прогрессе, для меня также существует беспокойство относительно того, сколько времени добавлено в цикл.Работая с массивами, в которых более 100 000 записей, я стал религиозным пользователем Profiler, чтобы увидеть, где на самом деле тратится время.Я могу сказать вам, что время не в расчете i / X, это было все в обновлении дисплея панели ожидания.Чтобы смягчить удар обновления / отрисовки, я обновлял панель ожидания только через каждые 100-1000 записей, что очень помогло.
РЕДАКТИРОВАТЬ: обновленный ответ, чтобы соответствовать последнему коду
Я впервые начал атаковать этопроблема в анонимной функции, проблемы с ними в прошлом, это моя личная вендетта.При просмотре функции, которую я обнаружил, вы используете гамму, определено ли это как константа (постоянная для цикла / функции)?Причина, по которой я спрашиваю, состоит в том, что «гамма» является функцией Matlab и выдает мне ошибки при попытке запустить вашу функцию самостоятельно.Ниже я немного изменил ваш код, и здесь все работает нормально.Если какое-либо из моих предположений неверно, пожалуйста, дайте мне знать.Кроме того, если вы намеревались использовать гамма-функцию, в вашей функции отсутствуют какие-либо аргументы.Надеюсь, это поможет!
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)
С уважением,
Адам