6
votes

Utilisation de dynamique pour surveiller les progrès dans les fonctions

Je suis intéressé par la surveillance de la progression d'un calcul à l'aide de dynamique. Cela peut être fait de manière interactive comme suit: xxx

Cependant, si la table est dans une fonction telle que xxx

Comment puis-je garder une piste de la valeur de iter, lorsque j'exécute la fonction via xxx

?


4 commentaires

Table Déjà scopes iTER , donc dans ce cas, je ne vois pas la nécessité de l'inclure dans le premier argument du module . Cela pourrait ne pas s'appliquer dans des fonctions plus compliquées, auquel cas vous pourriez envisager d'utiliser Block au lieu du module .


@Brett C'est un peu plus subtile, je pense que je ne peux pas trouver un exemple d'utilisation constructive de celui-ci dans ce cas donné. Tableau SCOPES DYNAMIQUEMENT, mais COPE SUPPES PAS ITER - Il scope un module -1 / code> -Génerated symbole comme iter $ 123 ( peut être vu, par exemple avec trace ). Dans le cas du bloc , il existe des utilisations constructives pour les combinaisons telles que Module [{SYM}, bloc [{SYM}, ...]]] , par exemple comme dans ce Réponse: Stackoverflow.com/Questions/7394113/...


@Leonid Oui, je sais que dans le code ci-dessus, au-dessus du iTer dans la table est vraiment iter $ 123 , ce qui le rend délicat de se référer à elle de l'extérieur du module . Mon point est que, dans ce cas particulier, y compris iTer en tant que module la variable est inutile et fait en fait les choses plus difficiles qu'elles doivent être.


@Brett je suis d'accord. Mais je peux penser à un exemple (un peu artificiel) où module peut servir à protéger l'intérieur iTer à partir de collisions de noms possibles avec le scopage dynamique: définir FF [] : = iter ^ 3 , puis contraste ceci: bloquer [{iter = 2}, module [{iter}, table [{iter, iter ^ 2, ff []}, {iter, 1, {iter, 1 , 5}]]]] , avec ceci: bloquer [{iter = 2}, table [{iter, iter ^ 2, ff []}, {iter, 1, 5}]] . Pas que je rencontre cela dans mon travail quotidien, cependant.


3 Réponses :


4
votes

Pas sûr que ce soit un bon conseil, mais:

Dynamic[monitor]

f[500000];


4 commentaires

Ce qui suit fonctionne également, f [m_]: = module [{iter}, getretre = iter; Tableau [{iTer, iter ^ 2}, {iter, 1, m}]]. Lequel est préférable?


@asim entre ces deux, c'est largement une question de style. Je préfère celui avec getretre [] , mais il s'agit simplement d'une préférence personnelle. Mais voyez mon édition pour ce que je pense est une solution généralement meilleure.


Merci! Qui semble sophistiqué.


@ASIM Cela vous permet de spécifier le nom du symbole de surveillance, en tant que deuxième paramètre de l'appel de votre fonction, plus garantit l'absence d'effets secondaires mondiaux, comme expliqué dans la réponse.



2
votes

Si vous souhaitez utiliser progressindicator , vous pouvez faire quelque chose comme ceci: xxx

 Entrez la description de l'image ici


0 commentaires

2
votes

Pour surveiller une expression, vous pouvez essayer d'utiliser moniteur : xxx

Vous pouvez également utiliser progressindicator avec la plage sur i : xxx


0 commentaires