       Re: Re: What to do in v. 6 in place of

• To: mathgroup at smc.vnet.net
• Subject: [mg76767] Re: [mg76728] Re: What to do in v. 6 in place of
• From: Bob Hanlon <hanlonr at cox.net>
• Date: Sun, 27 May 2007 04:50:00 -0400 (EDT)
• Reply-to: hanlonr at cox.net

```This works for simple cases such as your examples.

Clear[realPlot];
realPlot[expr_,
{x_Symbol, xmin_?NumericQ, xmax_?NumericQ},
opts___] := Module[{d, e, f, y},
e = Flatten@{expr};
d = (Denominator@PowerExpand@Log[x, #] & /@ e);
f = y /. (ToRules@
Reduce[y^#[] == PowerExpand[#[]^#[]],
y, Reals] & /@ Thread[{e, d}]);
Plot[f, {x, xmin, xmax}, opts]];

Grid[{{realPlot[x^(1/3), {x, -8, 8}],
realPlot[x^(3/5), {x, -8, 8}]},
{realPlot[{x^(1/3), x^(3/5)}, {x, -8, 8}]}}]

Bob Hanlon

---- Helen Read <read at math.uvm.edu> wrote:
> David W.Cantrell wrote:
> > Helen Read <read at math.uvm.edu> wrote:
> >> Suppose my calculus students want to plot x^(1/3), for say {x,-8,8}. The
> >> problem, of course, is that Mathematica returns complex roots for x<0.
> >> In past versions of Mathematica, we could get the desired real roots
> >> (and plot the function) by loading the package Miscellaneous`RealOnly. I
> >> guess we can still do it that way (and ignore the "obsolete package"
> >> message), but is there a suggested way of doing what we need in 6.0?
> >
> > Perhaps have them define their own
> >
> > realCubeRoot[x_]:= Sign[x] Abs[x]^(1/3)
> >
> > which plots as desired, of course.
>
> Well, yes, but it's kind of a pain to have to define their own root
> functions this way on an individual basis. (Not to mention, it
> completely hoses the derivative. Try realCubeRoot'[x] or
> realCubeRoot'[-8] and see what you get.)
>
> I was hoping for a more convenient way to do this in Mathematica 6.0.
> Surely it *knows* the real nth roots of x for n odd and x<0. It would be
> nice to be able to define f[x_]=x^(1/3) or x^(3/5) or whatever and just
> set some option to make it return the real value for x<0.
>
> --