MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Mathematica LogPlot Bug

  • To: mathgroup at smc.vnet.net
  • Subject: [mg123802] Re: Mathematica LogPlot Bug
  • From: AntonioP <ant.piniz at gmail.com>
  • Date: Tue, 20 Dec 2011 03:02:16 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jcf890$6t1$1@smc.vnet.net> <jchht2$im7$1@smc.vnet.net>

On Dec 17, 8:55 am, "Oleksandr Rasputinov"
<oleksandr_rasputi... at hmamail.com> wrote:
> On Fri, 16 Dec 2011 10:58:40 -0000, AntonioP <ant.pi... at gmail.com> wrote:
>
> > Hello,
>
> > I have to draw some functions in log scale, butLogPlotseems not to
> > be able to draw them correctly if the y-value is too small.
> > A simple case:
>
> > f[x_] = 10^(-5 x)
> >LogPlot[f[x], {x, 1, 100}, PlotRange -> Full]
>
> > the plot should be a simple straight line for any x value,
> > while at about x=61.5 there is a step and, for any greater value of x,
> > the function appears to be constant.
> > Nevertheless, Mathematica is able to compute the correct value of f[x]
> > for any x:
>
> > N[f[60]]
> > N[f[65]]
> > N[f[80]]
> > N[f[100]]
>
> > There is a similar problem for large y-values, as well.
> > Apparently there is a y-range, about (10^-308, 10^308), outside which
> >LogPlotdoesn't work correctly.
>
> > Any idea on how to resolve the problem?
>
> > Thanks,
>
> > Antonio
>
> Your range looks suspiciously similar to {$MinMachineNumber,
> $MaxMachineNumber}. This is not abug; it is just thatLogPlotby default
> works in machine precision. Of course, defaults are not set in stone, so:
>
> f[x_] = 10^(-5 x)LogPlot[f[x], {x, 1, 100}, PlotRange -> Full, WorkingPrecision ->
> $MachinePrecision]
>
> Note that MachinePrecision (the default) and $MachinePrecision are
> different. The former signifies literal machine numbers. The latter
> denotes arbitrary precision numbers with the same precision as machine
> reals, but crucially, with precision tracking switched on. This allows
> Plot to adaptively increase the working precision (by up to
> $MaxExtraPrecision base-10 digits) in order to produce an accurate plot,
> whereas without precision tracking it has no way to know when numerical
> errors become significant.
>
> The reason why N obtains the correct answers is that it can trap machine
> underflow and switch to arbitrary precision even without this being
> switched on explicitly. This behaviour is controlled by the system option
> "CatchMachineUnderflow". For example, switching it off, we get:
>
> SetSystemOptions["CatchMachineUnderflow" -> False];
> N[f[100], MachinePrecision] (* gives 0. *)
> N[f[100], $MachinePrecision] (* gives 1.0*^-500 *)


Thanks for all the answers.

I have also found this simple workaround which, I think, exploits the
Mathematica's arbitrary precision arithmetic, and should work for any
y-range:

f[x_] = 10^(-5 x)
ListLogPlot[Table[N[f[x]], {x, 0, 100, 1}], Joined -> True]

to compare with:
LogPlot[f[x], {x, 1, 100}, PlotRange -> Full]

Antonio



  • Prev by Date: Re: How to define a localized indexed object in Manipulate?
  • Next by Date: Re: How to define a localized indexed object in
  • Previous by thread: Re: Mathematica LogPlot Bug
  • Next by thread: Span Set nasty bug