MathGroup Archive 2009

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

Search the Archive

Re: Re: Wrong limit?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg104948] Re: [mg104846] Re: Wrong limit?
  • From: Adam Strzebonski <adams at wolfram.com>
  • Date: Sat, 14 Nov 2009 01:57:16 -0500 (EST)
  • References: <200911061014.FAA07962@smc.vnet.net> <hdbha5$jg8$1@smc.vnet.net> <200911121059.FAA18372@smc.vnet.net> <D1312EAF-941E-4C71-98D4-3D05D1E67798@mimuw.edu.pl>
  • Reply-to: adams at wolfram.com

The difference between Reduce and Resolve in this example is that
Reduce uses cylindrical algebraic decomposition (because it needs
to produce a result solved for the free variables) and Resolve
uses virtual substitution. Virtual substitution is often faster
than cylindrical algebraic decomposition, but not for this example.
Unfortunately, there is no way to tell a priori which method will
be faster and the difference is often between one method hanging
and the other returning reasonably fast. One way of solving this
problem would be to try both methods in parallel.

In[2]:= LaunchKernels[2]
Out[2]= {KernelObject[1, "local"], KernelObject[2, "local"]}

In[3]:= ParallelQE[form_] :=
  ParallelTry[#[form, Reals] &, {Resolve, Reduce}]

In[6]:= ParallelQE[
   ForAll[eps, eps > 0,
    Exists[del, del > 0,
     ForAll[x,
      Implies[0 < Abs[x - a] < del,
       Abs[(x^2 - a^2)/(5 x^2 - 4 a x - a^2) - M] <
        eps]]]]] // AbsoluteTiming

Out[6]= {12.181224, (a < 0 && M == 1/3) || (a == 0 &&
     M == 1/5) || (a > 0 && M == 1/3)}

I have run this on a single processor machine, so ParallelQE is
slower than Reduce. If my computer had two (or more) processors
there should be not much timing difference between ParallelQE
and the faster of Reduce and Resolve.

Best regards,

Adam Strzebonski
Wolfram Research

Andrzej Kozlowski wrote:
> I find it curious (and perhaps slightly disappointing) that replacing Reduce by Resolve seems to fail (or at least it outruns my patience while Reduce does not). This is puzzling because Resolve and not Reduce is supposed to be "the principal tool" for quantifier elimination and, according to the documentation "Resolve is in effect automatically applied by Reduce." Presumably Reduce applies some additional transformations not available to Resolve, which make it possible for it to succeed where Resolve fails (or takes far too long), but what could they be? 
> 
> Andrzej Kozlowski
> 
> 
> On 12 Nov 2009, at 19:59, Maxim wrote:
> 
>> On Nov 10, 5:03 am, DrMajorBob <btre... at austin.rr.com> wrote:
>>> One could hope that Mathematica covered all cases in every symbolic  
>>> calculation, but it's not possible, and if it were, it would frequently be  
>>> inefficient.
>>>
>>> Consider the simple quadratic:
>>>
>>> Solve[a x^2 + b x + c == 0, x]
>>>
>>> {{x -> (-b - Sqrt[b^2 - 4 a c])/(
>>>    2 a)}, {x -> (-b + Sqrt[b^2 - 4 a c])/(2 a)}}
>>>
>>> That's wrong when a == 0, just as in your Limit problem.
>>>
>>> Reduce is more complete, if that's what we want... but do we really want 
>>> every computation cluttered to the maximum degree?
>>>
>>> Reduce[a x^2 + b x + c == 0, x]
>>>
>>> (a != 0 && (x == (-b - Sqrt[b^2 - 4 a c])/(2 a) ||
>>>      x == (-b + Sqrt[b^2 - 4 a c])/(2 a))) || (a == 0 && b=
>> != 0 &&
>>>    x == -(c/b)) || (c == 0 && b == 0 && a == 0)
>>>
>>> Bobby
>>>
>>> On Fri, 06 Nov 2009 04:14:48 -0600, wiso <gtu2... at alice.it> wrote:
>>>> Look at this:
>>>> Limit[(x^2 - a^2)/(5 x^2 - 4 a x - a^2), x -> a]
>>>> Mathematica answer = 1/3
>>>> this is ok for a !=0, but if a = 0 the value is
>>>> Limit[(x^2 - a^2)/(5 x^2 - 4 a x - a^2) /. a -> 0, x -> 0]
>>>> 1/5
>>> --
>>> DrMajor... at yahoo.com
>> Interestingly, the original problem can actually be solved using
>> Reduce:
>>
>> In[1]:= Reduce[
>> ForAll[eps, eps > 0, Exists[del, del > 0, ForAll[x,
>>  Implies[0 < Abs[x - a] < del,
>>   Abs[(x^2 - a^2)/(5 x^2 - 4 a x - a^2) - M] < eps]]]], Reals]
>>
>> Out[1]= (a < 0 && M == 1/3) || (a == 0 && M == 1/5) || (a > 0=
>> && M ==
>> 1/3)
>>
>> One just has to be careful to make sure the expressions do not become
>> indeterminate, otherwise the meaning of the quantifiers is not really
>> well defined. E.g.,
>>
>> In[2]:= Reduce[ForAll[x, x >= 0, 1/x > a]]
>>
>> Out[2]= False
>>
>> In[3]:= Reduce[ForAll[x, x >= 0, 1/x > 0]]
>>
>> Out[3]= True
>>
>> Maxim Rytin
>> m.r at inbox.ru
>>
> 



  • Prev by Date: Re: Dialogue box generator
  • Next by Date: Re: Non-Linear pendulum
  • Previous by thread: Re: Re: Wrong limit?
  • Next by thread: Re: Re: Re: Wrong limit?