Running
counterend = 10000;
>> h = waitbar(0,'Please wait...');
for i=1:counterend
waitbar(i/counterend)
end
close(h);
Fonctionne comme prévu sur 2007a / Windows XP.
D'ailleurs, il serait utile de savoir ce que l'on entend par contré. Une vérification rapide serait de s'assurer que vous ne lui passez pas un CELL.
Running
counterend = {10000};
h = waitbar(0,'Please wait...');
for i=1:counterend
waitbar(i/counterend)
end
close(h);
Donne lieu à une erreur différente (voir ci-dessous) en 2007a, mais ce message d'erreur peut avoir changé en 2008.
? ?? Fonction ou méthode non définie '_colonobj' pour les arguments d'entrée de type 'cell'.
Mon dernier conseil serait de vous mettre en garde contre l'utilisation de waitbar pour les grands tableaux/ensembles de données. Même si je pense qu'il est important d'informer l'utilisateur de la progression, je m'inquiète également du temps ajouté à la boucle. En travaillant avec des tableaux de plus de 100 000 entrées, je suis devenu un utilisateur assidu du Profiler pour voir où le temps est réellement passé. Je peux vous dire que le temps n'est pas dans le calcul du i/X, il était entièrement dans la mise à jour de l'affichage de la barre d'attente. Pour atténuer le choc de la mise à jour/retrait, je n'ai mis à jour la barre d'attente que toutes les 100 à 1000 entrées, ce qui m'a énormément aidé.
EDIT : Mise à jour de la réponse pour correspondre au dernier code
J'ai commencé à m'attaquer à ce problème au niveau de la fonction anonyme, ayant eu des problèmes avec eux dans le passé, c'est une vendetta personnelle de ma part. En examinant la fonction, j'ai constaté que vous utilisiez gamma, est-ce que vous l'avez défini comme une constante (constante de la boucle / fonction) ? La raison de ma question est que 'gamma' est une fonction Matlab et me donnait des erreurs lorsque j'essayais d'exécuter votre fonction par elle-même. Ci-dessous, j'ai légèrement modifié votre code et cela fonctionne bien ici. Si l'une des hypothèses que j'ai formulées est erronée, veuillez me le faire savoir. De plus, si vous aviez l'intention d'utiliser la fonction gamma, il manque des arguments à votre fonction. J'espère que cela vous aidera !
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