statsmodels.tsa.statespace.tools.is_invertible

statsmodels.tsa.statespace.tools.is_invertible(polynomial, threshold=0.9999999999)[source]

Determine if a polynomial is invertible.

Requires all roots of the polynomial lie inside the unit circle.

Parameters:
polynomialarray_like or tuple, list

Coefficients of a polynomial, in order of increasing degree. For example, polynomial=[1, -0.5] corresponds to the polynomial \(1 - 0.5x\) which has root \(2\). If it is a matrix polynomial (in which case the coefficients are coefficient matrices), a tuple or list of matrices should be passed.

thresholdnumber

Allowed threshold for is_invertible to return True. Default is 1.

See also

companion_matrix

Notes

If the coefficients provided are scalars \((c_0, c_1, \dots, c_n)\), then the corresponding polynomial is \(c_0 + c_1 L + \dots + c_n L^n\).

If the coefficients provided are matrices \((C_0, C_1, \dots, C_n)\), then the corresponding polynomial is \(C_0 + C_1 L + \dots + C_n L^n\).

There are three equivalent methods of determining if the polynomial represented by the coefficients is invertible:

The first method factorizes the polynomial into:

\[\begin{split}C(L) & = c_0 + c_1 L + \dots + c_n L^n \\ & = constant (1 - \lambda_1 L) (1 - \lambda_2 L) \dots (1 - \lambda_n L)\end{split}\]

In order for \(C(L)\) to be invertible, it must be that each factor \((1 - \lambda_i L)\) is invertible; the condition is then that \(|\lambda_i| < 1\), where \(\lambda_i\) is a root of the polynomial.

The second method factorizes the polynomial into:

\[\begin{split}C(L) & = c_0 + c_1 L + \dots + c_n L^n \\ & = constant (L - \zeta_1) (L - \zeta_2) \dots (L - \zeta_3)\end{split}\]

The condition is now \(|\zeta_i| > 1\), where \(\zeta_i\) is a root of the polynomial with reversed coefficients and \(\lambda_i = \frac{1}{\zeta_i}\).

Finally, a companion matrix can be formed using the coefficients of the polynomial. Then the eigenvalues of that matrix give the roots of the polynomial. This last method is the one actually used.