4

I would like to write x^5 + 1/x^5 in terms of x^2 + 1/x^2, x^3 + 1/x^3 and x + 1/x or express x^6 + 1/x^6 in terms of x^2 + 1/x^2 and x^4 + 1/x^4 etc.

How can I do that in Mathematica?

Artes
  • 57,212
  • 12
  • 157
  • 245
Real Noob
  • 219
  • 1
  • 5

2 Answers2

6

@Artes lready showed how one might use Solve or Eliminate for this task. Since it involves algebraic rewriting of a rational expression, a standard method from computational algebra involves Groebner bases. Technical-sounding, yes, but also quite powerful.

The idea is to write the inputs as polynomials. I use y as the reciprocal of x and add a polynomial relation x*y-1 to enforce this. I equate each target polynomial to a new "marker" (or "tag") variable. The code for this is written in a way that is intended to be readily automated, that is, to systems with more relations, different variables, etc.

basepolys = {x^3 + y^3, x^2 + y^2, x + y};
avars = Array[a, Length[basepolys]];
allpolys = Join[avars - basepolys, {x*y - 1}];
allvars = Join[Variables[basepolys], avars];

Next compute a Groebner basis using a term order that places the original variables "larger" than the marker variables. This will make rewrites favor the marker variables over the polynomial variables.

gb = GroebnerBasis[polys, allvars];

Now we can rewrite that input `x^5+1/x^5 like so:

PolynomialReduce[x^5 + y^5, gb, allvars][[2]]

(* Out[1322]= 5 a[3] - 5 a[3]^3 + a[3]^5 *)

I left out a couple of niceties. One can programatically (as in, exercise for the reader) replace negative powers of x, for example. Or replace the result with explicit uses of the original expressions x^3+1/x^3,....

Daniel Lichtblau
  • 58,970
  • 2
  • 101
  • 199
5

There is a special approach with Solve eliminating appropriate variables, e.g. in the following x should be eliminated

a/. Solve[{x^5 + 1/x^5 == a, x^3 + 1/x^3 == b, x^2 + 1/x^2 == c, x + 1/x == d},
      {a, b, d}, {x}]
{-Sqrt[2 + 5 c - 5 c^3 + c^5], Sqrt[2 + 5 c - 5 c^3 + c^5]}

or e.g.

Solve[{ x^5 + 1/x^5 == a, x^3 + 1/x^3 == b, x^2 + 1/x^2 == c, x + 1/x == d}, 
       {a, b, c}, {x}]
{{a -> d (5 - 5 d^2 + d^4), b -> d (-3 + d^2), c -> -2 + d^2}}

The above demonstrates that there is no unique method providing the best solution unless we define precisely what the best approach means. We can express a in terms of c only as well as in terms of d only. Nevertheless one can easily observe that

a == b c - d /.First @ Solve[{x^5 + 1/x^5 == a, x^3 + 1/x^3 == b, 
                              x^2 + 1/x^2 == c, x + 1/x == d}, 
                             {a, b, c}, {x}] // Simplify
True

as well as e.g.

a == d (c^2 - c - 1)/.First @ Solve[{x^5 + 1/x^5 == a, x^3 + 1/x^3 == b,
                                      x^2 + 1/x^2 == c, x + 1/x == d},      
                                    {a, b, c}, {x}] // Simplify
True

Another way is a standard approach with Eliminate, e.g.

Eliminate[{x^6 + 1/x^6 == e, x^4 + 1/x^4 == f, x^2 + 1/x^2 == c},
          {x, f}]
e == -3 c + c^3

and it appears that with Solve we can produce another representation of e:

e == f c - c /.First @ Solve[{ x^6 + 1/x^6 == e, x^4 + 1/x^4 == f,
                                x^2 + 1/x^2 == c}, {e, f}, {x} // Simplify
True

These methods work quite satisfactory when the list of equations is rather short and we expect one can improve solutions if we appropriately restrict the solution space.

Artes
  • 57,212
  • 12
  • 157
  • 245