O teorema de Routh pode ser colocado numa forma mais cômoda usando a matriz de Hurwitz
São dadas duas sequências $\alpha: \mathbb{N} \to \mathbb{R}$ e $\beta: \mathbb{N} \to \mathbb{R}$. Definimos o operador de Hurwitz como $\alpha * \beta = \gamma:\mathbb{N} \to \mathbb{R}$ tal que :$$ \gamma(i) = \frac{-1}{\beta(1)}\begin{vmatrix} \alpha(1) & \alpha(i+1)\\ \beta(1) & \beta(i+1) \end{vmatrix}$$
#operador de Hurwitz para duas sequencias finitas
def hurwitz(a,b):
if len(a) <= len(b):
for i in range(len(a),len(b)):
a.append(0)
c=[0*u for u in b]
else:
for i in range(len(b),len(a)):
b.append(0)
c=[0*u for u in a]
if b[0] == 0 :
return c
for i in range(len(c) -1):
c[i] = (-1.0/b[0])*(a[0]*b[i+1] - a[i+1]*b[0])
return c
print (hurwitz([1,1],[1,0]))
[1.0, 0]
Se $\gamma_1$ e $\gamma_2$ são duas sequências de números reais, tal que $\gamma_2(1) \neq 0$. Definimos por recorrência $$ \gamma_{k+1} = \gamma_{k-1}*\gamma_{k}$$ até que $\gamma_k(1)=0$. A matriz de Hurwitz é a matriz em que cada linha é a sequência $\gamma_k$.
# Matriz de Hurwitz a partir de duas sequencias finitas
def MatrizHurwitz(a,b):
H=[a,b]
while H[len(H)-1][0] != 0 :
b2=hurwitz(H[len(H)-2],H[len(H)-1])
H.append(b2)
return H
#teste
a=[1,2,6]
b=[4,1]
H = MatrizHurwitz(a,b)
print (H)
[[1, 2, 6], [4, 1, 0], [1.75, 6.0, 0], [-12.714285714285714, -0.0, 0], [5.999999999999999, 0.0, 0], [-0.0, 0.0, 0]]
Seja $p(\lambda)= \lambda^n +a_1\lambda^{n-1} + \cdots + a_n$ um polinômio, construimos duas sequências $$ \begin{gather} \gamma_1 = 1 , a_2, a_4,\dots, a_{2k} \text{ com } a_{2k}=0 \text{ se } 2k>n \\ \gamma_2 = a_1, a_3, \dots, a_{2k+1} \text{ com } a_{2k+1}=0 \text{ se } 2k+1>n \end{gather}$$ e depois $\gamma_{i+2} = \gamma_i*\gamma_{i+1}$ até $k$ tal que $\gamma_{k+1}(0)=0$. A matriz $H = (h_{ij})$ com $h_{ij}=\gamma_i(j)$ é chamada matriz de Hurwitz.
O polinômio $p(\lambda)$ é estável se, e somente se, $\gamma_{k}(0) > 0$ para todo $k \in \{1, \dots, n+1\}$