Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I have a complicated expression where common terms are apparent but Simplify[] and FullSimplify[] don't appear able, even with plenty of assumptions added, to reduce down to a simpler form with common terms recognised so that I can give them a symbol and simplify the expressions acordingly. A simpler example which demonstrates is

h (140 + Current - 
   lastU1 + (lastV1 + 
      1/2 h (140 + Current - lastU1 + (5 + 0.04 lastV1) lastV1)) (5 + 
      0.04 (lastV1 + 
         1/2 h (140 + Current - lastU1 + (5 + 0.04 lastV1) lastV1))))

with obvious common terms being

140 + Current - lastU1   -> Alpha
(5 + 0.04 lastV1) lastV1 -> Beta

With these and one further common term which contains them both recognised

(lastV1 + 1/2 h (Alpha + Beta)) -> Gamma

this expression can be reduced to

h (Alpha + Gamma (5 + 0.04` Gamma))

I have played with Factor[], Collect[] and many others but nothing seems to do what I need. I am sure that Mathematica is capable of doing what I am looking for, so I am asking the experts here for tips for how best to go about it.

As a matter of interest, these expressions are going to be compiled into C eventually and I have found this to produce output of interest in terms of structuring the algebraic reduction

Experimental`OptimizeExpression[ expression , OptimizationLevel -> 2]

but I would still like more control over the manipulation before I get to this stage.

Many thanks in advance

Michael

share|improve this question
    

2 Answers 2

While this won't work in general with very complicated expressions (see the other post for more general approaches), you could try simple replacement rules to get a reasonable degree of simplification. If you had only linear relations, that would work for sure. In the case of your 'toy' example

expr = h (140 + Current - lastU1 + (lastV1 + 1/2 h (140 + Current - 
        lastU1 + (5 + 0.04 
              lastV1) lastV1)) (5 + 0.04 (lastV1 + 1/2 h (140 +
                     Current - lastU1 + (5 + 0.04 lastV1) lastV1))))

the second rule below works only because it had the terms to be replaced in the very same form throughout the whole expression.

expr /. {lastU1 -> 140 + Current - Alpha, (5 + 0.04 lastV1) -> Beta/lastV1}

then you can apply the last rule

% /. lastV1 -> Gamma - 1/2 h (Alpha + Beta)

(Alpha + (0.04 Gamma + 5) Gamma) h

Often, after applying the rules, it is a good idea to feed the resulting expression to Simplify.

share|improve this answer

I am avoiding Beta and Gamma but using symbols as the former are special symbols in Mathematica.

The rules can be applied for simplification:

exp = h (140 + Current - 
    lastU1 + (lastV1 + 
       1/2 h (140 + Current - 
          lastU1 + (5 + 0.04 lastV1) lastV1)) (5 + 
       0.04 (lastV1 + 
          1/2 h (140 + Current - lastU1 + (5 + 0.04 lastV1) lastV1))))

Then replacing all:

(exp //. {140 + Current - lastU1 -> \[Alpha],
    (5 + 0.04 lastV1) lastV1 -> \[Beta]}) //. (lastV1 + 
    1/2 h (\[Alpha] + \[Beta])) -> \[Gamma]

yields:

h (\[Alpha] + (5 + 0.04 \[Gamma]) \[Gamma])
share|improve this answer
    
thanks to both people, ubpdqn's was exactly the answer I am looking for –  Michael Hopkins Dec 8 '13 at 16:58
    
I initially had a problem with it but this is because I was using variable names already taken –  Michael Hopkins Dec 8 '13 at 16:58
    
Thank you. Is there a reason this does not merit a vote. Accepting both answers merely use replacement rules I point out the potential harmful unintentional use of special symbols which were actually verbatim used in other answer? –  ubpdqn Dec 8 '13 at 22:36
    
I would vote for it but I can't :o) –  Michael Hopkins Dec 8 '13 at 23:33
    
Ok. Thank you for confirming acceptable answer. –  ubpdqn Dec 8 '13 at 23:47

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.