Estoy interesado en monitorear el progreso de un cálculo usando Dynamic. Esto se puede hacer de forma interactiva de la siguiente manera:Uso de Dynamic para monitorear el progreso dentro de las funciones
In[3]:= Dynamic[iter]
In[4]:= Table[{iter, iter^2}, {iter, 1, 500000}];
Sin embargo, si la tabla está dentro de una función como
f[m_] := Module[{iter}, Table[{iter, iter^2}, {iter, 1, m}]];
cómo puedo realizar un seguimiento del valor de ITER, cuando ejecuto la función a través de
f[500000];
?
'Table' ya abarca' iter', por lo que en este caso no veo la necesidad de incluirlo en el primer argumento de 'Module'. Es posible que esto no se aplique en funciones más complicadas, en cuyo caso podría considerar usar 'Bloque' en lugar de' Módulo'. –
@Brett Creo que es un poco más sutil, aunque no puedo dar con un ejemplo de uso constructivo de este caso. 'Table' abarca dinámicamente, pero no 'iter': alcanza un símbolo generado por' Module' como 'iter $ 123' (se puede ver, por ejemplo, con' Trace'). En el caso de 'Block', hay usos constructivos para combinaciones como' Module [{sym}, Block [{sym}, ...]] ', por ejemplo como en esta respuesta: http: // stackoverflow.com/questions/7394113/definition-a-function-with-an-optional-value-that-is-by-default-a-function-of-anot/7394668 # 7394668 –
@Leonid Sí, lo sé en el código sobre el 'iter' en' Table' está realmente 'iter $ 123', lo que hace que sea difícil referirse a él desde fuera del' Module'. Mi punto es que, en este caso particular, incluir 'iter' como una variable' Module' es innecesario, y de hecho hace que las cosas sean más difíciles de lo que deben ser. –