This work began at Set PlotLabel length.
slopeExplorer[fn_, {x_, xmin_, xmax_}, {y_, ymin_, ymax_}] :=
DynamicModule[{f, pta, ptb},
f[t_] = fn /. x -> t;
Manipulate[
pta = {a, f[a]};
ptb = {a, f'[a]};
Show[
Plot[{Tooltip[f[x]], Tooltip[f[a] + f'[a] (x - a)]}, {x, xmin,
xmax},
PlotStyle -> {Directive[Blue], Directive[Orange]},
PlotRange -> {ymin, ymax},
PlotLabel ->
Pane["Slope of tangent line = " <>
ToString[PaddedForm[N[f'[a]], {6, 2}]] <> "\n", 200]],
Plot[Tooltip[f'[x]], {x, xmin - 0.01, a},
PlotRange -> All,
PlotStyle -> Directive[Red, Dashed]],
Graphics[{
Gray, Line[{pta, ptb}],
Red, PointSize[Medium], Tooltip[Point[pta], pta],
Blue, Tooltip[Point[ptb], ptb]
}]
], {{a, xmin, "x"}, xmin, xmax, Appearance -> "Labeled"}
]
]
The following example seems to work perfectly.
slopeExplorer[2 x^3 - 3 x^2 - 36 x, {x, -5, 6}, {y, -150, 150}]
Moving the slider back and forth works smoothly. No hesitations.
Same thing with this example:
slopeExplorer[6/(1 + x^2), {x, -5, 5}, {y, -10, 10}]
No problems.
However, this example experiences difficulty:
slopeExplorer[(3 + x)/(1 - 3 x), {x, -5, 3}, {y, -10, 10}]
All is well and smooth and the slider moves to the right, but when I get near the vertical asymptote at $x=1/3$, problems start.
- Slider seems to lock up.
- A small spinning colored wheel starts up, then disappears.
- The cell bracket goes black for a moment.
Then all stops and I can select slider, but it starts up again.
Might have something to do with something happening at the vertical asymptote, or it just might ben my limited understanding of avoiding this type of difficulty in Manipulate procedures.
Any thoughts?
Answer
The problem is mostly due to the PlotRange -> All
in the second Plot
. Also added use of Exclusions
slopeExplorer[fn_, {x_, xmin_, xmax_}, {y_, ymin_, ymax_}] :=
DynamicModule[{f, fp, pta, ptb, poles},
f[t_] = fn /. x -> t;
fp[t_] = f'[t] // Simplify;
poles = t /. Solve[Denominator[f[t]] == 0, t, Reals];
If[Length[poles] > 0, Print[StringForm["pole at ``", Thread[x == poles]]]];
Manipulate[
pta = {a, f[a]};
ptb = {a, fp[a]};
Show[
Plot[{
Tooltip[f[x]],
Tooltip[f[a] + fp[a] (x - a)]},
{x, xmin, xmax},
PlotStyle -> {Blue, Orange},
PlotRange -> {ymin, ymax},
PlotLabel ->
Pane["Slope of tangent line = " <>
ToString[PaddedForm[N[fp[a]], {6, 2}]] <> "\n", 200],
Exclusions -> poles],
Plot[Tooltip[fp[x]], {x, xmin, a + 2 $MachineEpsilon},
PlotRange -> {ymin, ymax},
PlotStyle -> Directive[Red, Dashed],
Exclusions -> poles],
Graphics[{
Gray, Line[{pta, ptb}],
Red, PointSize[Medium], Tooltip[Point[pta], pta],
Blue, Tooltip[Point[ptb], ptb]}]],
{{a, xmin, "x"}, xmin, xmax, Appearance -> "Labeled"}]]
slopeExplorer[(3 + x)/((1 - 3 x) (x - 2)), {x, -5, 3}, {y, -10, 10}]
Comments
Post a Comment