非标准评估:在Manipulate内部绘制

时间:2012-10-05 10:45:08

标签: wolfram-mathematica

我想创建一个带有演示的笔记本:

SlopeInterceptDemonstration[{mmin_, mmax_}, {bmin_, bmax_}] :=
Module[{xmax, xmin},
xmax = Max[Abs[bmin + mmin], Abs[bmax + mmax]]*1.2;
xmin = - xmax;

Manipulate[
        Plot[m*x + b, {x, xmin, xmax}, AspectRatio -> 1, PlotRange -> {xmin, xmax}],
        {{m, mmin, "m"}, mmin, mmax, 0.1}, {{b, bmin, "b"}, bmin, bmax, 0.1}]
];

如果我通过一个简单的调用保存笔记本(SlopeInterceptDemonstration [{ - 2,2},{-5,5}])并使用新内核重新打开它,则不会显示演示,因为xmin和xmax未知。

有没有办法在Plot中强制评估这些变量?

2 个答案:

答案 0 :(得分:1)

您可以将DynamicModuleSaveDefinitions中的Manipulate选项一起使用:

SlopeInterceptDemonstration[{mmin_, mmax_}, {bmin_, bmax_}] := DynamicModule[{xmax, xmin}, 
  xmax = Max[Abs[bmin + mmin], Abs[bmax + mmax]]*1.2;
  xmin = -xmax;
  Manipulate[Plot[m*x + b, {x, xmin, xmax}, AspectRatio -> 1, 
   PlotRange -> {xmin, xmax}], {{m, mmin, "m"}, mmin, mmax, 0.1}, {{b, bmin, "b"}, bmin, bmax, 0.1}, 
   SaveDefinitions -> True]]

答案 1 :(得分:0)

我相信这可以做你想要的:

SlopeInterceptDemonstration[{mmin_, mmax_}, {bmin_, bmax_}] :=
 Manipulate[
   Plot[m*x + b, {x, xmin, xmax}, AspectRatio -> 1, PlotRange -> {xmin, xmax}],
   {{m, mmin, "m"}, mmin, mmax, 0.1},
   {{b, bmin, "b"}, bmin, bmax, 0.1},
   {xmax, None},
   {xmin, None},
   Initialization :>
     {xmax = Max[Abs[bmin + mmin], Abs[bmax + mmax]]*1.2, xmin = -xmax}
 ]

{xmax, None}用于本地化模块中的xmax。另一个答案中显示DynamicModule的方法是标准的,更灵活。