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.