2011-10-31 142 views
4

我最初尝试用Plot3D和Manipulate滑块(两个参数由滑块控制,另一个参数在“x-y”平面中变化)尝试可视化4参数函数。但是,当我的非绘制参数是Manipulate控制时,我没有得到任何输出?mathematica Plot with 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}] 

与万亩的固定值的情节已在预计{0,70}抛物线输出自动选定的绘图范围,而Manipulate绘图在{0,1}范围内为空白。

我被怀疑该PlotRange不具有良好的默认选择使用了亩滑块控件时,但在一个PlotRange手动也添加表示无输出:

Manipulate[ Plot[ g[x], {x, -10, 10}, PlotRange -> {0, 70}], {{mu, 1}, 0, 2 \[Pi]}] 

回答

8

这是因为Manipulate参数是本地。

中的mu与您在上一行中明确指出的全局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对象滚动到视图中时得到一个值。

+0

谢谢,这工作得很好,并泛化到我实际尝试的四个参数图。 –

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的定义变得简单:我已经有了几十个可调整参数的绘图,当将所有这些参数作为参数传递给函数时,这可能会很麻烦。