我最初尝试使用Plot3D和Manipulate滑块可视化4参数函数(两个参数由滑块控制,另一个在“x-y”平面中变化)。但是,当我的非绘制参数是Manipulate控制时,我没有得到任何输出?
下面的1d情节示例复制了我在更复杂的情节尝试中看到的内容:
Clear[g, mu]
g[ x_] = (x Sin[mu])^2
Manipulate[ Plot[ g[x], {x, -10, 10}], {{mu, 1}, 0, 2 \[Pi]}]
Plot[ g[x] /. mu -> 1, {x, -10, 10}]
固定值为mu的Plot在{0,70}自动选择的绘图范围内具有预期的抛物线输出,而Manipulate图在{0,1}范围内为空白。
我怀疑在使用mu滑块控件时没有选择具有良好默认值的PlotRange,但手动添加PlotRange也没有显示输出:
Manipulate[ Plot[ g[x], {x, -10, 10}, PlotRange -> {0, 70}], {{mu, 1}, 0, 2 \[Pi]}]
答案 0 :(得分:8)
这是因为Manipulate
参数是本地的。
mu
中的Manipulate[ Plot[ g[x], {x, -10, 10}], {{mu, 1}, 0, 2 \[Pi]}]
与您在上一行中清除的全局mu
不同。
我建议使用
g[x_, mu_] := (x Sin[mu])^2
Manipulate[Plot[g[x, mu], {x, -10, 10}], {{mu, 1}, 0, 2 \[Pi]}]
以下也有效,但它会不断更改全局变量的值,除非你注意,否则可能会引起意外,所以我不推荐它:
g[x_] := (x Sin[mu])^2
Manipulate[
mu = mu2;
Plot[g[x], {x, -10, 10}],
{{mu2, 1}, 0, 2 \[Pi]}
]
可能发生了Clear[mu]
,但发现它在Manipulate对象滚动到视图中时会得到一个值。
答案 1 :(得分:2)
克服Manipulate
本地化的另一种方法是将功能纳入Manipulate[]
:
Manipulate[Module[{x,g},
g[x_]=(x Sin[mu])^2;
Plot[g[x], {x, -10, 10}]], {{mu, 1}, 0, 2 \[Pi]}]
甚至
Manipulate[Module[{x,g},
g=(x Sin[mu])^2;
Plot[g, {x, -10, 10}]], {{mu, 1}, 0, 2 \[Pi]}]
两者都给出了
Module[{x,g},...]
可防止全局上下文中出现不必要的副作用。这样就可以简单地定义g:我已经有了Manipulate[]
个带有几十个可调参数的ed图,当把所有这些参数作为参数传递给函数时,这可能很麻烦。