MathGroup Archive 2011

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

Search the Archive

Re: Mathematica LogPlot Bug

  • To: mathgroup at smc.vnet.net
  • Subject: [mg123760] Re: Mathematica LogPlot Bug
  • From: "Oleksandr Rasputinov" <oleksandr_rasputinov at hmamail.com>
  • Date: Sat, 17 Dec 2011 02:49:38 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jcf890$6t1$1@smc.vnet.net>

On Fri, 16 Dec 2011 10:58:40 -0000, AntonioP <ant.piniz at gmail.com> wrote:

>
> Hello,
>
> I have to draw some functions in log scale, but LogPlot seems 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
> LogPlot doesn't work correctly.
>
> Any idea on how to resolve the problem?
>
> Thanks,
>
> Antonio
>

Your range looks suspiciously similar to {$MinMachineNumber,  
$MaxMachineNumber}. This is not a bug; it is just that LogPlot by 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 *)



  • Prev by Date: Re: reliably sort?
  • Next by Date: Re: Mathematica LogPlot Bug
  • Previous by thread: Mathematica LogPlot Bug
  • Next by thread: Re: Mathematica LogPlot Bug