如何清除[]& ClearAll []运作?清除[]无法清除两个不同的Manipulate []使用的变量

时间:2011-09-03 01:04:56

标签: wolfram-mathematica

我有两个不同的Mathematica笔记本,具有相似但不同的功能。当它们是唯一的笔记本打开时,两者都可以正常工作。尽管我(自由)使用Clear []清除相关变量,但其中一个笔记本打开时始终失败。

称之为 GlobalManipulate

ClearAll["Global`*"]
Clear["Global`*"]
Definition[linear]
linear[x_] := a x;
quad[x_] := a x^2;
functionList := {linear, quad};
Manipulate[
  Plot[function[dummy], {dummy, -10, 10}], 
  {function, functionList}, {a, -10, 10},
  LocalizeVariables -> False, TrackedSymbols -> All
]

请拨打此电话,例如 LocalManipulate

Clear["Global`*"]; 
Manipulate[
   {
      linear := a x; quad := a x^2; 
      linear, quad, function, 
      Plot[ReleaseHold@function, {x, -10, 10}]
   }, 
   {function, {HoldForm@linear, HoldForm@quad}}, 
   {a, -10, 10}, TrackedSymbols -> All
]

当它自己运行时,GlobalManipulate按预期工作,我看到更新为a时更改的图。线性的定义产生Null

当LocalManipulate打开,运行时,GlobalManipulate不再有效。 即使它重新运行它的情节会出现一秒钟然后消失。

我使用Mathematica 8的本地副本和Mathematica 7的远程副本重现了这一点。

问题必须涉及函数linear[x_]quad[x_],因为

GlobalManipulatePrime

ClearAll["Global`*"]
Clear["Global`*"]
Definition[linear]
linear1[x_] := a x;
quad1[x_] := a x^2;
functionList := {linear1, quad1};
Manipulate[
  Plot[function[dummy], {dummy, -10, 10}], 
  {function, functionList}, {a, -10, 10}, 
  LocalizeVariables -> False, TrackedSymbols -> All
]

工作正常。

编辑添加粗体文字以强调我正在重新运行Global,并且我试图弄清楚尽管我的ClearAll []仍然存在函数的原因。

2 个答案:

答案 0 :(得分:5)

LocalManipulate 中,您有定义 linear := a x; quad := a x^2。 由于这些未在Manipulate命令的控制器部分中声明,因此它们未本地化,因此会覆盖全局变量并破坏 GlobalManipulate

Manipulate中本地化变量的最简单方法是使用控制器类型None添加它们。下面我修改了您的 LocalManipulate 代码,以便最后一行使linearquad在特定ManipulateDynamicModule)< / p>

Manipulate[{linear := a x; quad := a x^2; linear, quad, function, 
  Plot[ReleaseHold@function, {x, -10, 10}]},
 {function, {HoldForm@linear, HoldForm@quad}}, {a, -10, 10}, 
 {linear, None}, {quad, None}, TrackedSymbols -> All]

答案 1 :(得分:4)

除了将函数包装在ModuleDynamicModule中并本地化变量之外,您还可以使用Evaluation ► Notebook's Default Context菜单将笔记本放在单独的上下文中。

您还可以使用函数Begin设置上下文。这应该在定义函数之前完成。

更新

我认为我没有太好地阅读你的问题。至于ClearAll的原因不起作用:

  1. 由于使用了LocalManipulate中线性的定义 本地化变量a,符号线性被定义为类似linear:=FE`a$$51 x
  2. 的东西
  3. 在GlobalManipulate中,您同时使用 name linear(在函数选择中)和函数 linear
  4. 由于在linear中定义了符号FE`a$$51 x,因此GlobalManipulate中的行functionList := {linear, quad};实际上实际上意味着functionList := {FE`a$$51 x,FE`a$$53 x^2},其他Manipulate上下文中没有什么意思,所以你的情节消失
  5. 为什么不ClearAll删除此定义?这与埋在LocalManipulate笔记本中可见的Manipulate框中的动态变量的属性有关。他们继续在那里重新定义。删除Manipulate的输出并重新执行GlobalManipulate,你会发现它现在有效。讨论类似的问题here