Wolfram mathematica 当变量更改时(不在其TrackedSymbols上)操纵更新表达式
我放弃了这个。也许有人能看到一些明显的东西 我有一个触发器,当点击时它会更新变量“time” 接下来,我设置TrackedSymbols->{time},希望操纵的表达式只重新计算“time”更改 但我发现,通过更改另一个变量(不在TrackedSymbols列表中),表达式也在更新 这里有一个例子Wolfram mathematica 当变量更改时(不在其TrackedSymbols上)操纵更新表达式,wolfram-mathematica,Wolfram Mathematica,我放弃了这个。也许有人能看到一些明显的东西 我有一个触发器,当点击时它会更新变量“time” 接下来,我设置TrackedSymbols->{time},希望操纵的表达式只重新计算“time”更改 但我发现,通过更改另一个变量(不在TrackedSymbols列表中),表达式也在更新 这里有一个例子 Manipulate[ ( If[time == 0, n = 0]; Print[DateString[]]; n ), {{time, 0, "run"}, 0, 20, A
Manipulate[
(
If[time == 0, n = 0];
Print[DateString[]];
n
),
{{time, 0, "run"}, 0, 20, AnimationRate -> 1, ControlType -> Trigger},
{{n, 0}, None},
TrackedSymbols -> {time}
]
以上工作如预期。当我单击运行时,单击暂停,然后单击重置,所有工作正常,表达式仅在触发器“运行”时更新
现在我加上这一行,上面变成
Manipulate[
(
If[time == 0, n = 0];
Print[DateString[]];
n=n+1; (* ADD THIS *)
n
),
{{time, 0, "run"}, 0, 20, AnimationRate -> 1, ControlType -> Trigger},
{{n, 0}, None},
TrackedSymbols -> {time}
]
现在,我和以前一样,单击“运行”,然后暂停,然后重置。由于触发器已重置,预期表达式不会更新。i、 e.“时间”变量不变
但是在按下重置键3-4秒后,表达式开始自动更新,单元格右侧显示它正忙,而我没有按下运行按钮或触摸任何东西。动力的魔力在起作用:)
接下来,我将变量“n”向下移动到初始化部分,现在问题消失了:
Manipulate[
(
If[time == 0, n = 0];
Print[DateString[]];
n = n + 1;
n
),
{{time, 0, "run"}, 0, 20, AnimationRate -> 1, ControlType -> Trigger},
TrackedSymbols -> {time},
Initialization :>
(
n = 0;
)
]
现在,它不会像以前那样自行更新
我的问题是:为什么当'n'写为{{n,0},None}
时,操纵会出现上述问题?我一直认为,通过使用TrackedSymbols
,只有那些更改了值的符号才会更新表达式
我相信这有一个简单的原因,但经过一个小时的讨论,我看不出来。有时我想我永远都不会完全理解数学的动态性
谢谢你的解释
更新:
我认为问题在于触发器本身。我一定不明白触发器是怎么工作的。在触发器上单击“重置”似乎不会阻止它滴答作响?我现在真的很困惑。试试。谢谢西蒙!到目前为止,我可能花了4个小时在这上面,但从未注意到这一点。我现在看到,在->vs.:>的文档中确实提到“通常,RuleDelayed应该始终用于TrackedSymbol”。奇怪的是,我总是使用TrackedSymbols->,它从来没有给我带来任何问题。我一定一直很幸运。我将把它添加到Mathematica的“注意事项列表”的顶部,这一列表现在已经很长了:)。