MathGroup Archive 2006

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

Search the Archive

ComplexityFunction affects set of transformations tried by Simplify

Oops! I originally sent this as a reply to an unrelated thread.
Please reply only to this new version.

As part of a large computation, I wanted Mathematica to
simplify expressions of the form   Sqrt[c + d/k](c k + d)2,
where k is positive, to   (c k + d)^(5/2)/Sqrt[k]

Note that Mathematica knows that the two expressions
are equivalent:

In[1]:=expr1 = Sqrt[c + d/k](c k + d)2;
expr2 = (c k + d)^(5/2)/Sqrt[k];
Simplify[expr1 == expr2, k > 0]


Furthermore, both the LeafCount and the Depth of expr2
are smaller:

In[2]:={LeafCount[#], Depth[#]} & /@ {expr1, expr2}

Out[2]={{19, 6}, {15, 5}}

However Simplify with LeafCount as the ComplexityFunction
leaves expr1 unchanged, while Simplify with Depth as the
ComplexityFunction changes expr1 to expr2:

In[3]:=Simplify[expr1, k > 0,
ComplexityFunction -> LeafCount] // InputForm

Out[3]//InputForm=Sqrt[c + d/k]*(d + c*k)2

In[4]:=Simplify[expr1, k > 0,
ComplexityFunction -> Depth] // InputForm

Out[4]//InputForm=(d + c*k)^(5/2)/Sqrt[k]

What explains this difference in behavior? Changing the order
of calculations 3 and 4 has no effect.  Since  calculation 2
shows that the form expr2 would be preferred if it were tried,
while calculation 4 shows that the form expr2 is tried when
the ComplexityFunction is Depth, it seems that the choice of
ComplexityFunction affects the set of transformations tried
by Simplify.

For the record, I am using $Version 5.2 for Linux (June 20, 2005)


  • Prev by Date: Re: returning variable number of arguments from a Module[ ]
  • Next by Date: Re: Why does this lead to an answer with complex numbers?
  • Previous by thread: Re: Send graphics to file AND/OR to notebook with one DisplayFunction
  • Next by thread: Re: ComplexityFunction affects set of transformations tried by Simplify