2

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

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 中强制评估这些变量?

4

2 回答 2

1

您可以与以下选项DynamicModule一起使用:SaveDefinitionsManipulate

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]]
于 2012-10-05T10:54:30.700 回答
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在 Module 中进行本地化。另一个答案中显示的方法DynamicModule是标准的并且更灵活。

于 2012-10-05T12:39:56.973 回答