Ask Your Question

Why, in any equation, are repeated solutions given by Sage only once?

asked 2022-07-14 00:29:28 +0200

jafrancor gravatar image

updated 2022-07-24 06:50:43 +0200

slelievre gravatar image

In the example

var('f, q, r, h, i, g, x, y, z')
eq1 = x^5 - x^4 - 2*x^3 + 2*x^2 + x - 1

Where, this equation is also equal to (x-1)^3*(x+1)^2, but I obtain the following solution:

[x == -1, x == 1]

Let's say that, in any equation, repeated solutions are given by Sage only once.

Then, how can I, in our example, obtain the following complete solution?

[x == -1, x == -1, x == 1, x == 1, x == 1]
edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2022-07-14 03:56:06 +0200

dan_fulea gravatar image

In order to cover also the multiplicities of the solutions of an algebraic equation, one has the following chances:

$(1)$ Use solve with the option multiplicities=True:

f = x^5 - x^4 - 2*x^3 + 2*x^2 + x - 1
solve(f==0, x, multiplicities=True)

This gives:

([x == -1, x == 1], [2, 3])

indicating that the solutions $x=-1$ and respectively $x=1$ have multiplicities $2$, and respectively $3$. To obtain this information, just ask for the doc string of the used function solve:

sage: ?solve

Signature:      solve(f, *args, **kwds)
   Algebraically solve an equation or system of equations (over the
   complex numbers) for given variables. Inequalities and systems of
   inequalities are also supported.


   * "f" - equation or system of equations (given by a list or tuple)

   * "*args" - variables to solve for.

   * "solution_dict" - bool (default: False); if True or non-zero,
     return a list of dictionaries containing the solutions. If there
     are no solutions, return an empty list (rather than a list
     containing an empty dictionary). Likewise, if there's only a
     single solution, return a list containing one dictionary with
     that solution.

   There are a few optional keywords if you are trying to solve a
   single equation.  They may only be used in that context.

   * "multiplicities" - bool (default: False); if True, return
     corresponding multiplicities.  This keyword is incompatible with
     "to_poly_solve=True" and does not make any sense when solving

and many other lines.

$(2)$ Use an algebraic object, thus making the used polynomial element in a polynomial ring, then ask for the roots of the polynomial.

R.<x> = PolynomialRing(QQ)
f = x^5 - x^4 - 2*x^3 + 2*x^2 + x - 1

This gives:

[(-1, 2), (1, 3)]

a list of tuples of the shape ( solution, its multiplicity ). So the solution $x=-1$ has multiplicity $2$, and the solution $x=1$ has multiplicity $3$.

This time, if the multiplicities are not wanted, we can ask for this other version of the result...

sage: f.roots(multiplicities=False)
[-1, 1]
edit flag offensive delete link more


Thanks a lot!

jafrancor gravatar imagejafrancor ( 2022-07-14 17:49:39 +0200 )edit

What about this system of equations, which has a repeated root and and we want to know what it is: var('a,b,c,d,e,f,g,x') sols = solve([(a - g) + 2, - (ag - b) - 1, - (bg - c), - (cg - d) + 10, - (dg - e) - 22, - fg - 2, - (eg - f) + 14], a,b,c,d,e,f,g, solution_dict=true) [{g: sol[g]} for sol in sols]

georgeafr gravatar imagegeorgeafr ( 2022-07-23 18:49:59 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2022-07-14 00:29:28 +0200

Seen: 215 times

Last updated: Jul 24 '22