# 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! – 32u-nd Aug 12 '15 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 '15 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! – Dr. belisarius Aug 12 '15 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? – user1816847 Aug 12 '15 at 22:42
• @user1816847 Then you may try FindRoot[ ] instead – Dr. belisarius Aug 12 '15 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[] == #, x, Reals] & /@ (newVarRule[] /.
Solve[eq /. newVarRule, newVarRule[], 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. – user1816847 Aug 14 '15 at 0:09