Re: Find minimum number of operations
- To: mathgroup at smc.vnet.net
- Subject: [mg112961] Re: Find minimum number of operations
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Thu, 7 Oct 2010 03:39:29 -0400 (EDT)
brien colwell wrote: > Hi all, > > I have a set of expressions composed of literals, multiplications, > additions, and powers. For example, > > -(-3 Bx (Ax^2 + Ay^2 - 2 Ax Bx + Bx^2 - 2 Ay By + By^2)^(3/2) + > 3 Ax^2 Ay k + 3 Ay^3 k - 8 Ax Ay Bx k + 5 Ay Bx^2 k - Ax^2 By k - > 9 Ay^2 By k + 4 Ax Bx By k - 3 Bx^2 By k + 9 Ay By^2 k - > 3 By^3 k + 2 Ax Ay Cx k - 2 Ay Bx Cx k - 2 Ax By Cx k + > 2 Bx By Cx k - 2 Ax^2 Cy k + 4 Ax Bx Cy k - > 2 Bx^2 Cy k)/(3 (Ax^2 + Ay^2 - 2 Ax Bx + Bx^2 - 2 Ay By + By^2)^( > 3/2)) > > I would like to find the form for each that minimizes the number of > operations, where each operation is either a multiplication, addition, or > power. Is this easily done in Mathematica (7)? Also, just curious, what > criteria does FullSimplify use to evaluate the "simplest form"? > > Thanks, > Brien OptimizeExpression (in Experimental` context) will typically do a good job of this. It does some amount of common subexpression elimination. ee = -(-3*Bx*(Ax^2 + Ay^2 - 2*Ax*Bx + Bx^2 - 2*Ay*By + By^2)^(3/2) + 3*Ax^2*Ay*k + 3*Ay^3*k - 8*Ax*Ay*Bx*k + 5*Ay*Bx^2*k - Ax^2*By*k - 9*Ay^2*By*k + 4*Ax*Bx*By*k - 3*Bx^2*By*k + 9*Ay*By^2*k - 3*By^3*k + 2*Ax*Ay*Cx*k - 2*Ay*Bx*Cx*k - 2*Ax*By*Cx*k + 2*Bx*By*Cx*k - 2*Ax^2*Cy*k + 4*Ax*Bx*Cy*k - 2*Bx^2*Cy*k)/(3*(Ax^2 + Ay^2 - 2*Ax*Bx + Bx^2 - 2*Ay*By + By^2)^(3/2)); InputForm[ff = Experimental`OptimizeExpression[ee]] Out[22]//InputForm= Experimental`OptimizedExpression[Block[{Compile`$8, Compile`$9, Compile`$10, Compile`$11, Compile`$12, Compile`$13, Compile`$14}, Compile`$8 = Ax^2; Compile`$9 = Ay^2; Compile`$10 = -2*Ax*Bx; Compile`$11 = Bx^2; Compile`$12 = -2*Ay*By; Compile`$13 = By^2; Compile`$14 = Compile`$8 + Compile`$9 + Compile`$10 + Compile`$11 + Compile`$12 + Compile`$13; -(-3*Bx*Compile`$14^(3/2) + 3*Compile`$8*Ay*k + 3*Ay^3*k - 8*Ax*Ay*Bx*k + 5*Ay*Compile`$11*k - Compile`$8*By*k - 9*Compile`$9*By*k + 4*Ax*Bx*By*k - 3*Compile`$11*By*k + 9*Ay*Compile`$13*k - 3*By^3*k + 2*Ax*Ay*Cx*k - 2*Ay*Bx*Cx*k - 2*Ax*By*Cx*k + 2*Bx*By*Cx*k - 2*Compile`$8*Cy*k + 4*Ax*Bx*Cy*k - 2*Compile`$11*Cy*k)/ (3*Compile`$14^(3/2))]] Daniel Lichtblau Wolfram Research