MathGroup Archive 1996

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

Search the Archive

Re: InterpolatingFunction::dmwarn: Warning

  • To: mathgroup at smc.vnet.net
  • Subject: [mg5509] Re: InterpolatingFunction::dmwarn: Warning
  • From: Robert Knapp <rknapp at sover.net>
  • Date: Sat, 14 Dec 1996 19:26:08 -0500
  • Organization: Wolfram Research
  • Sender: owner-wri-mathgroup at wolfram.com

Jonathan Rich wrote:
> 
> Can anyone explain why the following code generates the
> above warning?
> 
> secsperyear = 365.25*24*60*60;
> Nt=56;
> deltat = secsperyear/Nt;
> seasonaltime = n deltat;
> testtable=Table[{x,x^2},{x,0,secsperyear,secsperyear/100}];
> interpFunc=Interpolation[testtable];
> 
> seasonaltime1=3.15576*10^7;
> 
> interpFunc[seasonaltime1]; (* no domain warning message *)
> n=Nt;
> interpFunc[seasonaltime]; (* this DOES produce domain-warning message?!
> yet SameQ[seasonaltime,seasonaltime1] is True?! *)
> 
> I am totally mystified!  Is this a bug in InterpolatingFunction?
> 
No its not a bug, but it is an interesting example of machine arithmetic
uncertainty.  

First, if you've got two machine numbers, SameQ allows them to differ by
one bit before calling them different.  (Equal allows 7 bits) For
example, on my machine, I get

In[1]:=
secsperyear = 365.25*24*60*60;
Nt=56;
deltat = secsperyear/Nt;
seasonaltime = n deltat;
testtable=Table[{x,x^2},{x,0,secsperyear,secsperyear/100}];
interpFunc=Interpolation[testtable];

seasonaltime1=3.15576*10^7;

In[2]:=
val1 = interpFunc[seasonaltime1];

In[3]:=
n=Nt;
val2 = interpFunc[seasonaltime];

In[4]:=
SameQ[seasonaltime1, seasonaltime]

Out[4]=
True

In[5]:=
seasonaltime1 - seasonaltime

Out[5]=
-3.72529029846191406`*^-9

So they certainly are not identical!  Notice also that on my machine I
did not get the warning message.  

The reason you got the warning message was that the predicate used in
InterpolatingFunction is simpler than SameQ (and faster) it just checks
if your argument is greater than the endpoint--if it is you are using
extrapolation, which is what the messages says.  It is only a warning
message--this close to the boundary there is likely to be no problem.
The function does magnify the difference, though it is still only one
bit:

In[6]:=
SameQ[val1,val2]

Out[6]=
True

In[7]:=
val1-val2

Out[7]=
-0.25

I hope this helps.

Ron Knapp
WRI


  • Prev by Date: Re: Solving non-linear equations
  • Next by Date: Reading tables with labels
  • Previous by thread: Re: InterpolatingFunction::dmwarn: Warning
  • Next by thread: Re: How can I use different symbols to reperesent my 2D data?