RE: Why does Simplify often get stuck?

*To*: mathgroup at smc.vnet.net*Subject*: [mg69412] RE: [mg69399] Why does Simplify often get stuck?*From*: "David Park" <djmp at earthlink.net>*Date*: Mon, 11 Sep 2006 05:39:11 -0400 (EDT)

Carlos, Simplify is a nice command and very useful. But it does not give easy detailed control. Very often you can get what you want by direct manipulation of the expression. R = (1/6)*(3 + 3*a^2 + Sqrt[5 + 6*a + 5*a^2] + a*(4 + Sqrt[5 + 6*a + 5*a^2])) MapAt[Collect[#1, Sqrt[5 + 6*a + 5*a^2]] & , R, {2}] (1/6)*(3 + 4*a + 3*a^2 + (1 + a)* Sqrt[5 + 6*a + 5*a^2]) David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: carlos at colorado.edu [mailto:carlos at colorado.edu] To: mathgroup at smc.vnet.net One of the major problems I noticed with Simplify since version 2.2 is that knowledge of the simplified expression is often necessary to force progress. This is a typical example I ran into when preparing a homework problem. The Mathematica version used is 5.0 under Mac OS 10.4.7. The solution of a quadratic equation gives one root as R = (3 + 3*a^2 + Sqrt[5 + 6*a + 5*a^2] + a*(4 + Sqrt[5 + 6*a + 5*a^2]))/6 in which a is nonnegative real. This has LeafCount (LC) of 43. I happen to know (by other means) that the answer is Rbest = (3 + 4*a + 3*a^2 + (1 + a)*Sqrt[5 + 6*a + 5*a^2])/6 This has a LC of 32 so Simplify or FullSimplify should have no trouble whatsoever getting there, right? Well, lets see: RS = Simplify[R,a>=0] (3 + 3*a^2 + Sqrt[5 + 6*a + 5*a^2] + a*(4 + Sqrt[5 + 6*a + 5*a^2]))/6 No progress. Next try a bigger gun: RFS = FullSimplify[R,a>=0] (3 + Sqrt[5 + a*(6 + 5*a)] + a*(4 + 3*a + Sqrt[5 + a*(6 + 5*a)]))/6 This is better, but goes only part way (LC=39) Well, some human trickery seems needed to bypass the Sqrt[] barrier: R=R/.Sqrt[5 + 6*a + 5*a^2]->xx; R=Collect[R,xx]; R=Simplify[R/.xx->Sqrt[5 + 6*a + 5*a^2]] (3 + 4*a + 3*a^2 + (1 + a)*Sqrt[5 + 6*a + 5*a^2])/6 The story ends happily, but only after much trial and error. BTW, Collect[R,xx] is required to get the target expression. But why should all these time consuming gyrations be necessary? Suppose I dont know the target, or this simplification is one of thousands done deep in a complicated code ... After all this is just a simple junior homework problem.