OptimizeExpression
- To: mathgroup at smc.vnet.net
- Subject: [mg86170] OptimizeExpression
- From: Evan Drumwright <edrumwri at hotmail.com>
- Date: Tue, 4 Mar 2008 02:09:44 -0500 (EST)
Hi everyone, I'm trying to send a very large (200+MB) expression to a C file using CForm, which, as you might imagine, crashes my compiler. From other discussions on this list, I have seen that you can use the OptimizeExpression[] function to eliminate common subexpressions, and I think that this will work. However, I don't understand how to process the resulting compound expression. For instance: Experimental`OptimizeExpression[(3+3*a^2 + Sqrt[5 + 6*a + 5*a^2] + a*(4 + Sqrt[5 + 6*a + 5*a^2]))/6] generates Out[1]= Experimental`OptimizedExpression[Block[{$$11, $$13, $$14, $$15, 2 > $$16}, $$11 = a ; $$13 = 6 a; $$14 = 5 $$11; $$15 = 5 + $$13 + $$14; 3 + 3 $$11 + $$16 + a (4 + $$16) > $$16 = Sqrt[$$15]; --------------------------------]] 6 Now, I'd like to get out the individual set of statements: $$11 = a; $$13 = 6a; $$14 = 5 $$11; $$15 = 5 + $$13 + $$14; $$16 = Sqrt[$$15]; (3 + 3$$11 + $$16 + a(4+$$16)/6 But, if I were to look at the function in the optimized expression, I get the original function: In[2]:= %[[1]] 2 2 2 3 + 3 a + Sqrt[5 + 6 a + 5 a ] + a (4 + Sqrt[5 + 6 a + 5 a ]) Out[2]= -------------------------------------------------------------- 6 I suppose part of the difficulty is that I don't see a way to treat a CompoundExpression as a list of statements to be CForm'd. Can anyone tell me how I'd do this? Thanks, Evan