Ben*_*enB 4 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
]
Run Code Online (Sandbox Code Playgroud)
称之为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
]
Run Code Online (Sandbox Code Playgroud)
当它自己运行时,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
]
Run Code Online (Sandbox Code Playgroud)
工作良好.
编辑添加粗体文本强调我正在重新运行Global,并且我试图弄清楚为什么函数仍然存在,尽管我的ClearAll [].
在LocalManipulate中,您有定义
linear := a x; quad := a x^2.由于这些未在Manipulate命令的控制器部分中声明,因此它们未本地化,因此会覆盖全局变量并破坏GlobalManipulate.
在a中本地化变量的最简单方法Manipulate是使用控制器类型添加它们None.下面,我已经修改了你的LocalManipulate代码,因此,最后一行使得linear和quad局部的,特别是Manipulate(DynamicModule)
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]
Run Code Online (Sandbox Code Playgroud)