mathematica Plot with Manipulate显示无输出

时间:2011-10-31 13:47:50

标签: wolfram-mathematica

我最初尝试使用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]}]

2 个答案:

答案 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]}]

两者都给出了

Define g inside manipulate

Module[{x,g},...]可防止全局上下文中出现不必要的副作用。这样就可以简单地定义g:我已经有了Manipulate[]个带有几十个可调参数的ed图,当把所有这些参数作为参数传递给函数时,这可能很麻烦。