gpt4 book ai didi

wolfram-mathematica - 使用 Dynamic 来监控函数内的进度

转载 作者:行者123 更新时间:2023-12-04 00:14:56 25 4
gpt4 key购买 nike

我对使用 Dynamic 监控计算进度很感兴趣。这可以通过交互方式完成,如下所示:

In[3]:= Dynamic[iter]

In[4]:= Table[{iter, iter^2}, {iter, 1, 500000}];

但是,如果表在一个函数内,例如
f[m_] := Module[{iter}, Table[{iter, iter^2}, {iter, 1, m}]]; 

当我通过以下方式执行函数时,如何跟踪 iter 的值
f[500000];

?

最佳答案

不确定这是一个很好的建议,但是:

f[m_] := 
Module[{iter}, getIter[] := iter;
Table[{iter, iter^2}, {iter, 1, m}]];

进而:
Dynamic[getIter[]]

f[500000];

编辑

这会更好,但更模糊:
ClearAll[f];
SetAttributes[f, HoldRest];
f[m_, monitorSymbol_: monitor] :=
Block[{monitorSymbol},
Module[{iter},
monitorSymbol := iter;
Table[{iter, iter^2}, {iter, 1, m}]]
];

在这里,您指定某个符号来监视本地化变量的状态。通过使用 Block ,您确保您的符号在最后没有获得任何全局值(更准确地说,它的全局值在最后没有改变 - 如果您愿意,您也可以使用具有某些全局值的符号)。默认符号为 monitor ,但你可以改变它。以下是您如何使用它:
Dynamic[monitor]

f[500000];

这是一个比第一个更简单的更好的建议,因为通过使用 Block您保证在函数完成后不会发生全局状态修改。

关于wolfram-mathematica - 使用 Dynamic 来监控函数内的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com