Osama Ahmad
Osama Ahmad

Reputation: 2096

How to get repeating roots in sympy?

from sympy import Symbol
from sympy.solvers import solveset

x = Symbol('x')
equation = x**2 - 2*x + 1
result = solveset(equation, x)

Here, result evaluates to FiniteSet(1).

Since this is a quadratic equation, there must be 2 roots.

But also, since the two roots are the same (1 in this case), the result returns it only once.

For the purpose of solving linear recurrences, I need to know the repeated roots, and how many times did each one of them repeat.

How to do that?

Upvotes: 1

Views: 313

Answers (1)

Pillsy
Pillsy

Reputation: 9901

You can convert it into a polynomial and then use the roots function, which will return a dictionary that has the roots as keys and the multiplicities as values, like so:

from sympy import roots
poly = equation.as_poly()
roots(poly)

# returns {1: 2}

Unlike nroots, this works with polynomials with symbolic coefficients as well:

from sympy.abc import a, b, c

poly = (a * x ** 2 - 2 * sqrt(a * c) * x + c).as_poly(x)
roots(poly, x)
# returns {sqrt(a*c)/a: 2}

Upvotes: 1

Related Questions