unique_roots — SciPy v1.15.3 Manual (original) (raw)
scipy.signal.
scipy.signal.unique_roots(p, tol=0.001, rtype='min')[source]#
Determine unique roots and their multiplicities from a list of roots.
Parameters:
parray_like
The list of roots.
tolfloat, optional
The tolerance for two roots to be considered equal in terms of the distance between them. Default is 1e-3. Refer to Notes about the details on roots grouping.
rtype{‘max’, ‘maximum’, ‘min’, ‘minimum’, ‘avg’, ‘mean’}, optional
How to determine the returned root if multiple roots are within_tol_ of each other.
- ‘max’, ‘maximum’: pick the maximum of those roots
- ‘min’, ‘minimum’: pick the minimum of those roots
- ‘avg’, ‘mean’: take the average of those roots
When finding minimum or maximum among complex roots they are compared first by the real part and then by the imaginary part.
Returns:
uniquendarray
The list of unique roots.
multiplicityndarray
The multiplicity of each root.
Notes
If we have 3 roots a
, b
and c
, such that a
is close tob
and b
is close to c
(distance is less than tol), then it doesn’t necessarily mean that a
is close to c
. It means that roots grouping is not unique. In this function we use “greedy” grouping going through the roots in the order they are given in the input p.
This utility function is not specific to roots but can be used for any sequence of values for which uniqueness and multiplicity has to be determined. For a more general routine, see numpy.unique.
Examples
from scipy import signal vals = [0, 1.3, 1.31, 2.8, 1.25, 2.2, 10.3] uniq, mult = signal.unique_roots(vals, tol=2e-2, rtype='avg')
Check which roots have multiplicity larger than 1:
uniq[mult > 1] array([ 1.305])