我想创建一个带有演示的笔记本:
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中强制评估这些变量?
答案 0 :(得分:1)
您可以将DynamicModule
与SaveDefinitions
中的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
的方法是标准的,更灵活。