Re: Simplify 0/0 to 1?
- To: mathgroup at smc.vnet.net
- Subject: [mg77511] Re: Simplify 0/0 to 1?
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Mon, 11 Jun 2007 04:23:20 -0400 (EDT)
- References: <934147.40360.qm@web43135.mail.sp1.yahoo.com>
I would not call this bad performance. In fact this is inevitable,
not only in Mathematica but in every CAS that exists today (although
not necssarily in the same example). All you need to do is to choose
numerator and denominator equal to zero but sufficiently complicated
and such that the CAS will see that they are equal before it can
check that they are both 0. I believe (though obviously I have not
checked this) that every CAS will then simplify the expression to 1,
because for reason of performance it will cancel common factors as
soon as it can see them. It might perhaps perform a check on them
first to see if they are zero (so this would prevent this sort of
situation happening) but doing such tests every time cancellations
are performed could produce a huge performance hit, and anyway may
not be successful.
Here is a very trivial example:
(1 - Cos[Pi/23]^2 - Sin[Pi/23]^2)/(1 - Cos[Pi/23]^2 - Sin[Pi/23]^2)
1
This was turned into 1 by the evaluator withot any Simplify even
though both, the numerator and the denominator are clearly zero. You
can avoid this by mapping Sinmplify on the numerator and the
denominator but you have to use Unevaluated first:
Simplify /@
Unevaluated[(1 - Cos[Pi/23]^2 - Sin[Pi/23]^2)/(1 - Cos[Pi/23]^2 -
Sin[Pi/23]^2)]
The same approach will work in your example:
Simplify/@o
Here is essentially the same example (which is based on the Sin^2[a]
+Cos^2[a]==1 identity) but just made a bit more complicated, so that
this time, like in your original example, the evaluator does not
reduce the expression to 1 immediately, but only after Simplify is
applied.
Simplify[(1 - Cos[Pi/23]^2 - Sin[Pi/23]^2)^2/(1 - 2*Cos[Pi/23]^2 + Cos
[Pi/23]^4 -
2*Sin[Pi/23]^2 + 2*Cos[Pi/23]^2*Sin[Pi/23]^2 + Sin[Pi/23]^4)]
1
As you can see again, the numerator and the denominator are both zero
but Simplify sees that they are equal before it can see that they are
both zero and at that point the Evaluator performs the cancelation.
Andrzej Kozlowski
On 10 Jun 2007, at 20:57, dimitris anagnostou wrote:
>
> Hi.
> This appeared in another forum as part of a question
> what another CAS does.
> Just of curiosity I check Mathematica's performance (5.2).
> The result was poor!
>
> Here is the expression
>
>
> In[16]:=
> o = (Log[2]*Cos[Pi/12] - Log[2]*Sin[Pi/12] - 2*Cos[Pi/12] + 2*Sin[Pi/
> 12] + Sqrt[2] +
> 2*Log[Cos[Pi/12] - Sin[Pi/12]]*Cos[Pi/12] - 2*Log[Cos[Pi/12] -
> Sin[Pi/12]]*Sin[Pi/12])/
> (Log[2]*Cos[Pi/12] - Log[2]*Sin[Pi/12] + 2*Log[Cos[Pi/12] -
> Sin[Pi/
> 12]]*Cos[Pi/12] -
> 2*Log[Cos[Pi/12] - Sin[Pi/12]]*Sin[Pi/12])
>
>
> Out[16]=
> (Sqrt[2] + (-1 + Sqrt[3])/Sqrt[2] - (1 + Sqrt[3])/Sqrt[2] - ((-1 +
> Sqrt[3])*Log[2])/(2*Sqrt[2]) +
> ((1 + Sqrt[3])*Log[2])/(2*Sqrt[2]) - ((-1 + Sqrt[3])*Log[-((-1 +
> Sqrt[3])/(2*Sqrt[2])) + (1 + Sqrt[3])/(2*Sqrt[2])])/
> Sqrt[2] + ((1 + Sqrt[3])*Log[-((-1 + Sqrt[3])/(2*Sqrt[2])) + (1 +
> Sqrt[3])/(2*Sqrt[2])])/Sqrt[2])/
> (-(((-1 + Sqrt[3])*Log[2])/(2*Sqrt[2])) + ((1 + Sqrt[3])*Log[2])/
> (2*Sqrt[2]) -
> ((-1 + Sqrt[3])*Log[-((-1 + Sqrt[3])/(2*Sqrt[2])) + (1 + Sqrt[3])/
> (2*Sqrt[2])])/Sqrt[2] +
> ((1 + Sqrt[3])*Log[-((-1 + Sqrt[3])/(2*Sqrt[2])) + (1 + Sqrt[3])/
> (2*Sqrt[2])])/Sqrt[2])
>
> Watch now a really bad performance!
>
> In[17]:=
> (Simplify[#1[o]] & ) /@ {Numerator, Denominator}
>
> Out[17]=
> {0, 0}
>
> That is Mathematica simplifies succesfully both the numerator
> and denominator to zero. So, you wonder what goes wrong?
>
> Try now to simplify the whole expression!
>
> In[19]:=
> Simplify[o]
>
> Out[19]=
> 1
>
> A very weird result to my opinion!
> Simplification of 0/0 to 1?
> I think no simplification or some
> warning messages would be much better
> than 1!
>
> Note also that
>
> In[20]:=
> RootReduce[o]
>
> Out[20]=
> 1
>
> Dimitris
>
> Take the Internet to Go: Yahoo!Go puts the Internet in your pocket:
> mail, news, photos & more.