9
$\begingroup$

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).

$\endgroup$
4
  • $\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$ Oct 31, 2013 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, 2013 at 0:28
  • $\begingroup$ @Nasser: I'm using V 8.0. I didn't realise this would differ between versions. $\endgroup$ Oct 31, 2013 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, 2018 at 16:26

4 Answers 4

15
$\begingroup$

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 *)
$\endgroup$
1
  • $\begingroup$ Thanks! It works as I was hoping it would. $\endgroup$ Oct 31, 2013 at 0:12
6
$\begingroup$

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
$\endgroup$
1
  • $\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, 2018 at 16:23
3
$\begingroup$

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  *)
$\endgroup$
1
$\begingroup$

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

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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