Correr
counterend = 10000;
>> h = waitbar(0,'Please wait...');
for i=1:counterend
waitbar(i/counterend)
end
close(h);
funciona como se espera en 2007a/Windows XP.
En una nota lateral, ayudaría saber qué se contrarresta se define como. Algo rápido de verificar sería asegurarse de que no esté pasando una CELULA.
Correr
counterend = {10000};
h = waitbar(0,'Please wait...');
for i=1:counterend
waitbar(i/counterend)
end
close(h);
produce un error diferente (véase más adelante) en 2007a, pero este mensaje de error puede haber cambiado en 2008.
??? Función no definida o método '_colonobj' para los argumentos de entrada de tipo 'célula'.
Mi último consejo es que le advierto sobre el uso de la barra de espera para matrices grandes/conjuntos de datos. Si bien creo que es importante informar al usuario del progreso, para mí también existe la preocupación de cuánto tiempo se agrega al ciclo. Trabajando con arreglos que tienen 100k + entradas, me convertí en un usuario religioso del Analizador para ver dónde se estaba gastando realmente el tiempo. Puedo decirte que el tiempo no está en el cálculo de la i/X, todo fue en la actualización de la pantalla de la barra de espera. Para suavizar el golpe de la actualización/extracción, solo actualicé la barra de espera cada 100 a 1000 entradas, lo que me ayudó muchísimo.
EDIT: Actualización respuesta para que coincida con el último código
empecé a atacar este problema en la función anónima, teniendo problemas con ellos en el pasado es una venganza personal mío. Al observar la función, encontré que está utilizando gamma, ¿tiene esto definido como una constante (constante para el bucle/función)? La razón por la que pregunto es que 'gamma' es una función de Matlab y me estaba dando errores al tratar de ejecutar su función por sí mismo. A continuación he modificado ligeramente tu código y aquí funciona bien. Si alguna de las suposiciones que hice son incorrectas, por favor avíseme. Además, si pretendía utilizar la función gamma, a su función le faltan argumentos. ¡Espero que esto ayude!
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)
Saludos,
Adam
Su ejemplo funciona perfectamente bien en R2010a en OSX. ¿Verificaste que tu ejemplo funciona? Además, ¿estás seguro de que 'counterend' es un doble escalar? – Jonas
Por favor, no me importa que haya cambiado sustancialmente mi pregunta. Esto posiblemente hace que algunas de las respuestas a continuación sean útiles. Lo siento mucho si hubiera perdido el tiempo de alguien, siendo bastante nuevo en Stackoverflow. Si alguien piensa que la eliminación tiene sentido, seguiré votando por ello. – Ingo