MathGroup Archive 2007

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

Search the Archive

Re: Hold and Simplify

  • To: mathgroup at smc.vnet.net
  • Subject: [mg77237] Re: [mg77143] Hold and Simplify
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Wed, 6 Jun 2007 06:49:25 -0400 (EDT)
  • References: <200706051025.GAA00506@smc.vnet.net>

On 5 Jun 2007, at 19:25, news.inode.at wrote:

>
>
> Hi,
>
>
>
> I would like to change Exponential functions of sums to products of
>
> exponential functions. From reading postings from the year 2004 I  
> tried
>
> the following:
>
>
>
> f[Exp[x_ + y_]] := Exp[x + y] /. Exp[a_ + b_] :> HoldForm[Exp[x]*Exp 
> [y]];
>
>
>
> Simplify[Exp[a + b], TransformationFunctions -> f]
>
>
>
> Unfortunately this gave me
>
> Exp[a+b]

The output you want to get has a high LeafCount so you need to change  
your ComplexityFunction as well.

f[expr_] := expr /. Exp[(a_) + (b_)] :> HoldForm[Exp[a]*Exp[a]];

Simplify[Exp[a + b], TransformationFunctions -> {f},  
ComplexityFunction -> (1 - Count[#1, HoldForm, Infinity, Heads ->  
True] & )]

HoldForm[E^a*E^a]


>
> I had more luck with
>
>
>
> rule = {Exp[a_ + b_] -> f[Exp[a + b]]}
>
>
>
> ReplaceRepeated[Exp[a + b], rule]
>
>
>
> which gave me Exp[a]Exp[b]
>
>
>
> Trying
>
>
>
>
>
> ReplaceRepeated[Exp[a + b + c], rule]
>
> gave me:
>
> Exp[a]Exp[b+c]
>
>
>
> Why doesn't the TransformationFunction trick work? Why does
>
> ReplacedRepeated stop?

the reason is that Exp[a] is evaluated to E^a, but HoldForm[Exp[a]]  
is not evaluated to HoldForm[E^a], so you need a double rule:

rule = {Exp[a_ + b_] :> HoldForm[Exp[a]*Exp[b]],
    HoldPattern[Exp[a_ + b_]] :> HoldForm[Exp[a]*Exp[b]]};

Now

Exp[a + b + c + d] //. rule

HoldForm[E^a*HoldForm[E^b*HoldForm[E^c*E^d]]]

which will look fine in Standard or Traditional Form.


Andrzej Kozlowski


>
>
>
>
>
> My ultimate goal would be the following: (I need to transfer large
>
> formulae into C code and would like to avoid use of exponential  
> function
>
> as much as possible)
>
>
>
> myreplacelist={Exp[var1]->expvar1, Exp[var2]->expvar2}
>
> myformula=Exp[2 var1 - 3 var2 + a * Exp[var1]];
>
>
>
> ultimate rule applied to my formula gives:
>
>
>
> expvar1 * expvar1 / (expvar2 * expvar2 * expvar2) * Exp[a expvar1]
>
>
>
> Thanks for your time!
>
>
>
> best,
>
>
>
> Paul
>
>
>
>
>
>
>



  • Prev by Date: Re: Best practice for Mathematica package development
  • Next by Date: Re: Two Version 6.0 Package Problems
  • Previous by thread: Hold and Simplify
  • Next by thread: Re: Hold and Simplify