Why is Solve slow for one representation and fast for an equivalent form?

When I try to solve the following:

Solve[(1 - (-1 + x)^- x)^8 == 95/100 && x > 1, Reals]


solve chokes. If instead I use the equivalent form:

Solve[((1 - (-1 + x)^- x) == (95/100)^(1/8) || (1 - (-1 + x)^-x) == -(95/100)^(1/8)) && x > 1, Reals]


I get a solution quite fast.

Is there any way I could give mathematica a hint about how to solve in the above form? I've stripped down this example for the sake of my question, but in practice it's impractical for me to manually rewrite the equality I want to solve.

• I don't think your second equaltion is a valid transformation of your first equation. If I replace the 8 by 2, I can solve the first equation but the result is different from the solution of the second equation. If you replace 8 by e.g. n and FullSimplify it, you will see the difference! Aug 12, 2015 at 21:12
• I note that using inexact numbers for your problematic case solves without choking (though getting the expected msg. re: inexact solve), I'd venture with exact numbers the arithmetic for the arbitrary precision intermediate results is chewing up time - with the problematic case these numbers are quite large...
– ciao
Aug 12, 2015 at 21:46
• Welcome to Mathematica.SE! I suggest the following: 0) Browse the common pitfalls question 1) As you receive help, try to give it too, by answering questions in your area of expertise. 2) Read the faq! 3) When you see good questions and answers, vote them up by clicking the gray triangles, because the credibility of the system is based on the reputation gained by users sharing their knowledge. Also, please remember to accept the answer, if any, that solves your problem, by clicking the checkmark sign! Aug 12, 2015 at 22:11
• @akm, when i replace the 8 by 2 i get the same answers (though in reversed order) from both representations. are you changing both 1/8 to 1/2 as well? Aug 12, 2015 at 22:42
• @user1816847 Then you may try FindRoot[ ] instead Aug 12, 2015 at 22:49

You may solve the first form quicker by using a two step process (something like a change of variable)

Solve[# == (-1 + x)^-x && x > 1, x, Reals] & /@ y /. Solve[(1 - y)^8 == 95/100, Reals])


You may also "automate" the process somewhat:

newVarRule = (-1 + x)^-x -> y;
eq = (1 - (-1 + x)^-x)^8 == 95/100;
Solve[newVarRule[[1]] == #, x, Reals] & /@ (newVarRule[[2]] /.
Solve[eq /. newVarRule, newVarRule[[2]], Reals])


Edit

Perhaps the following illustrates clearly what's happening:

aRul = a -> 95/100;
eq = (y == a^(1/8) || (1 - y) == -a^(1/8));
Solve[eq, y, Reals] /. aRul
Solve[eq /. aRul, y, Reals]


• thanks for the edit! this is what I suspected mathematica was trying to do (solve an 8th degree poly instead of doing the "obvious" algebra). but didn't know how to test/illustrate it. Aug 14, 2015 at 0:09