MathGroup Archive 1993

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

Search the Archive

Re: Pattern Matching Bug ??

Markus Ruppel <m.ruppel at> writes:

>I tried to replace expressions of the type
>        E^(I x)
>with the more convenient (for me at least)
>        Cos[x] + I Sin[x]
>using the rule
>        /. E^(I x_) -> Cos[x] + I Sin[x]
>This works fine until one has an expression like
>        E ^(-I x)
>In this case, the above replacement rule doesn't match anymore. I assume 
>this is due to the internal representation of I (which is Complex[0,1] for 
>I and Complex[0,-1] for -I).
>I consider this behavior a bug. Any comments ?
>[It was suggested that he try the Trigonometry.m package -sma]
>>You should look at the Algebra/Trigonometry.m package
>I am aware of this package and the ComplexToTrig function (Should have
>mentioned it, sorry). May be I did not make my point clear. If you write -I
>this is mathematically (-1) * I.  So the pattern matching should replace I
>appropriately as it does do for e.g. -x.
>The situation is even a bit worse:
>        E^(I (-x)) // FullForm
>and you get:
>        Power[E, Times[Complex[0, -1], x]]
>i.e. it pulls the -1 into the internal definition of I and makes I
>therefore unacessible to pattern matching as soon as you have a (-1) 
>somewhere in your exponent. This happens before patterns are tested for:
>        E^(I (-x)) /. I->newI
>gives you 
>        E^(-I x)
>but it works for other symbols just fine:
>        E^(y (-x)) /. y->newy
>results in
>        E^-(newy x)
>as expected.
>-I should be rather represented as Times[-1,Complex[0,1]] 
>internally as it is done for -x (Times[-1,x]).
>Markus Ruppel

Complex numbers are represented as Complex[a,b], period. -I is a _number_,
so why would we want its head to be Times? Should -3 be represented as
Times[-1,3]? x is a symbol, so -x can only be represented as Times[-1,x]. I
hardly see how this could be considered a bug. The constant I is useful,
but it's simply not intended to be used for pattern-matching. Instead use
the head Complex, as in

   E^(-I x) /. E^(Complex[0,y_] x_.) -> Cos[x y] + I Sin[x y]

or the more complete rule in ComplexToTrig.


  • Prev by Date: Re: Pattern Matching Bug ??
  • Next by Date: genetic algorithms
  • Previous by thread: Re: Pattern Matching Bug ??
  • Next by thread: genetic algorithms