# Solve reports it can't handle my equation

I am trying to solve the following equation

Solve[x ϵ + (-ϵ) x^-ϵ - c (-ϵ) x^(-ϵ - 1) == 0, x]


Yields

Solve::nsmet: This system cannot be solved with the methods available to Solve. >>

What can I do to solve this equation?

• For numeric ϵ you could use FindRoot. Mar 28, 2015 at 19:42
• you should define all the symbols except x. thit is the simplyfiyed equation c + x^(2 + \[Epsilon]) == x
– k_v
Mar 28, 2015 at 19:43
• Since you are trying to solve a polynom, whose degree depends on an arbitrary constant, there should also be an arbitrary number of roots, i.e.: There might not be an "easy" closed solution at all. Mar 29, 2015 at 0:09

In short: There is no closed solution, but you can get solutions for specific values of ϵ.

Detailed explanation:

First, we can transform your equation into a more compact form by using FullSimplify (and replacing ϵ with e for less typing within Mathematica):

eq = (x ϵ + (-ϵ) x^-ϵ - c (-ϵ) x^(-ϵ - 1) /. ϵ -> e //FullSimplify) == 0
(* e x^(-1 - e) (c - x + x^(2 + e)) == 0 *)


Now we continue by evaluating both factor components separately: First the easy one (e x^(-1 - e) == 0) using Reduce, giving us the conditions for x and e, under which this part becomes 0:

Reduce[e x^(-1 - e) == 0, x]
(* (x != 0 && e == 0) || (Re[e] < -1 && x == 0) *)


Then to the second part c - x + x^(2 + e) == 0: This one already looks odd, since it comprises a polynom of degree varying with e, but why not try our luck with Reduce again? So:

Reduce[c - x + x^(2 + e) == 0, x]
(* Reduce::nsmet: This system cannot be solved with the methods available to Reduce. >> *)


Ah - bad luck! But why is that?

As a polyom's number of roots, which we are looking after by trying to solve for ==0, depends on the polynom's degree, there will be no closed solution, as the degree depends on e here.

How can this be proofed with Mathematica? E.g. by solving for some given values for e and counting the number of solutions for each specific value of e (i.e. the number of roots for each e):

Length /@ Table[Solve[c - x + x^(2 + e) == 0, x], {e, 1, 20}]
(* {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22} *)


As anticipated, the number of roots equals the polynom's degree, which is 2+e. Therefore, there will be no closed solution - even with e limited to the domain of positive integers.

In essence, your equation requires solving arbitrary-degree polynomials.

You therefore will need to solve for specific values for e to get results, e.g. by using the Table-method I outlined above.

Even then, starting from e==3, this involves solving a quintic (and higher) polynom(s), so Mathematica will give you solutions based on the generic Root builtin, meaning you will only be able to get numeric results for specific c and e.

• "In short" hits the point and "Detailed explanation" s exactly that +1! Mar 29, 2015 at 12:14
• You rock! Great explanation! Apr 5, 2015 at 2:55
• @zsljulius: Thanks a lot! Apr 5, 2015 at 6:55

In this case, I recommend Manipulate to investigate the function. Note as x, c and ϵ are used. With the information found You can start better studies

Manipulate[
Plot[x ϵ + c x^(-1 - ϵ) ϵ - x^-ϵ ϵ
, {x, -6., 6.}]
, {c, -6., 6.}
, {ϵ, -6, 6}]


For given numeric values of ϵ and c you can use FindRoot:

eq = x ϵ + (-ϵ) x^-ϵ - c (-ϵ) x^(-ϵ - 1) == 0;
FindRoot[eq /. {c -> 2, ϵ -> 3/4}, {x, 1}]
(* {x -> 1.38718} *)


For arbitrary analitycal values of ϵ and c the equation seems to be unsolvable. However, if you can threat ϵ as a small parameter (like in perturbation theory), I would suggest to find the solution as power series w.r.t. ϵ:

n = 2; (* number of terms in expansion *)
coeffs = Table[a[i], {i, 0, n - 1}];
rule = x -> coeffs.Table[ϵ^i, {i, 0, n - 1}] + O[ϵ]^n
Reduce[Thread[List @@ Normal[eq /. rule][[1]] == 0], {a[0], a[1], a[2]}]


As the result we have expressions for the first n series coeffients a[i].

First (for a given Epsilon):

eq = x ϵ + (-ϵ) x^-ϵ - c (-ϵ) x^(-ϵ - 1) == 0


then:

FullSimplify @ eq


Thus it suffices to solve:

c - x + x^(2 + ϵ) == 0


Then

sol = Solve[(c - x + x^(2 + ϵ)) == 0, x]


delivers the solutions. If you want the solutions for e.g.,c = 5, then

c = 5; x /. sol


will show them.

When Epsilon is is not given, Solve is not able to find the solutions.

• Hmm. With my Mathematica 10.0.2 here, your Solve-line still leads to the same error message: "This system cannot be solved with the methods available to Solve." Would you mind putting the actual solutions you got into the answer? Mar 28, 2015 at 23:55
• Ditto for V9.0.1. I don't understand how this answer has received three upvotes (to date). Mar 29, 2015 at 1:51
• Ditto for V8.0.4. V7 gives a slightly different error, "Solve::tdep: The equations appear to involve the variables to be solved for in an essentially non-algebraic way." What version are you using? Mar 29, 2015 at 3:15
• I did not add the result of FullSimplify@eq (but it is quite obvious). It is  x^(-1 - [Epsilon]) (c - x + x^(2 + [Epsilon])) [Epsilon] == 0. So one solution is (\[Epsilon]>0) x=0, the others one gets solving c - x + x^(2 + [Epsilon])==0, which gives the result(s). Mar 29, 2015 at 10:46
• @mgamer: But c-x+x^(2+\[Epsilon])==0 is exactly the part, which is not solvable with all Mathematica-versions tested so far (see comments above)! If you managed to get a solution, please post it in your answer. Otherwise, please revise your answer. Mar 29, 2015 at 10:51

The new in M12 function AsymptoticSolve can be used to find the perturbation expansions. First, simplify your equation:

eqn = x ϵ+(-ϵ) x^-ϵ-c (-ϵ) x^(-ϵ-1) == 0;
FullSimplify[eqn]


x^(-1 - ϵ) (c - x + x^(2 + ϵ)) ϵ == 0

So, assuming $$x\neq 0$$ and $$\epsilon \neq 0$$, we have:

seqn = FullSimplify[eqn, x != 0 && ϵ != 0]


c + x^(2 + ϵ) == x

The solution for x when ϵ is 0 can be found from:

roots = Values @ Solve[seqn /. ϵ -> 0, x]


{{1/2 (1 - Sqrt[1 - 4 c])}, {1/2 (1 + Sqrt[1 - 4 c])}}

Choosing the first root and using AsymptoticSolve:

AsymptoticSolve[seqn, {x, roots[[1]]}, {ϵ, 0, 1}]


{{x -> 1/2 (1 - Sqrt[1 - 4 c]) + (1/( 2 Sqrt[1 - 4 c]))ϵ (-Log[2] + Sqrt[1 - 4 c] Log[2] + 2 c Log[2] + Log[1 - Sqrt[1 - 4 c]] - Sqrt[1 - 4 c] Log[1 - Sqrt[1 - 4 c]] - 2 c Log[1 - Sqrt[1 - 4 c]])}}