I am experiencing a curious behaviour of Simplify when handling expressions involving powers of $\mathbf{i}$, such as $\mathbf{i}^x$ where $x$ is unknown.

For example, when I take the equation 2^x a == 0, and I ask Mathematica to simplify it for me by calling Simplify[2^x a == 0], it rightly answers that the original equation is equivalent to a==0; hence clearly Mathematica's Simplify "knows" that taking a power of something non-zero cannot produce a zero. However, if I ask about I^x a == 0, then the result of Simplify is merely I^x a == 0, i.e. what I started with. This remains true after adding the assumption that $x$ is an integer or changing Simplify to FullSimplify (i.e. FullSimplify[I^( x) a == 0, Assumptions -> {Element[x, Integers]}]. It would be much more convenient if

This is obviously not a serious problem, but it can be a nuisance when I need to simplify a number of equations and would like to quickly see the result in a relatively uncluttered form. Also, I am curious about why things work the way they do, i.e. why complex powers are treated so much differently than real powers. Thank you for any solution to the problem, and/or explanation of this phenomenon. (A solution would be a way to "teach" Mathematica to eliminate factors like I^( x) in equations like I^( x)*(something)==0).

  • $\begingroup$ Well, I think in your example the two problems are mathematically different. As $x$ goes to $-\infty$, $i^x$ certainly takes the values $1$ and $-1$ infinitely often (for $x$ congruent to $4$ and $2$ modulo $4$, respectively). After replacing $I$ by $2I$ in your example, the limit comes out as $0$. $\endgroup$ – Jakub Konieczny Oct 31 '13 at 0:15
  • $\begingroup$ On V 9.01, I get Simplify[2^x a == 0] as 2^x a ==0 not a==0 ? screen shot !Mathematica graphics $\endgroup$ – Nasser Oct 31 '13 at 0:28
  • $\begingroup$ @Nasser: I'm using V 8.0. I didn't realise this would differ between versions. $\endgroup$ – Jakub Konieczny Oct 31 '13 at 0:30
  • $\begingroup$ Now in V11.3, I^(1000. I) underflows to 0. + 0. I, not that that should count, though. $\endgroup$ – Michael E2 Apr 10 '18 at 16:26

We can actually 'teach' Simplify using the option TransformationFunctions.

dropPows[Power[_?NumericQ, _] a_ == 0] := a == 0

Simplify[I^x a == 0, TransformationFunctions -> {Automatic, dropPows}]
(* a == 0 *)
  • $\begingroup$ Thanks! It works as I was hoping it would. $\endgroup$ – Jakub Konieczny Oct 31 '13 at 0:12

Maybe this is a difference in versions (9.0.1), but when I do:

FullSimplify[2^x a == 0, x \[Element] Reals]
a == 0

Replacing 2 with I gives the same answer

FullSimplify[I^x a == 0, x \[Element] Reals]
a == 0
  • $\begingroup$ The take-away lesson here, which I think is the important point, is that you need to Simplify that x is a number. Seems cleaner than a special transformation function. $\endgroup$ – Michael E2 Apr 10 '18 at 16:23

Counterexample, of arguable importance:

FunctionExpand[I^x] /. x -> DirectedInfinity[I]
(*  0  *)

Which shows why @bill s's idea of restricting x to a number might help simplify the expression. I don't know if FullSimplify was necessary back then, but in V11 the following works:

Simplify[I^x a == 0, x ∈ Complexes]
(*  a == 0  *)

While TransformationFunction is really the way to go, a quick way is to use replacement rules directly:

I^x a == 0 /. {Power[_?NumericQ, _] x_ == 0 :> x == 0}

a == 0


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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