Stability of parametric systems
A 2-D discrete linear system with transfer function $G = N / D$ is structurally stable when its denominator $D$ has no zero in the closed unit polydisc
\[\mathbb{U}^2 = \{(z_1, z_2) \in \mathbb{C}^2 : |z_1| \le 1, |z_2| \le 1\}.\]
By DeCarlo's theorem this holds if and only if
- $D(z, 1)$ and $D(1, z)$ have no zero in $|z| \le 1$;
- $D(z_1, z_2)$ has no zero on the torus $|z_1| = |z_2| = 1$.
The first condition becomes a Hurwitz condition with $z = (1 - x)/(1 + x)$, which maps the unit disc onto the closed right half-plane; it is expressed by the Liénard-Chipart criterion. The second becomes a real problem with $z_k = (x_k - i)/(x_k + i)$, which maps the real line onto the unit circle: the real and imaginary parts $\mathcal{R}, \mathcal{I} \in \mathbb{Q}[x_1, x_2]$ of the numerator must have no common real zero.
When $D$ depends on two parameters $(u_1, u_2)$, stability_parametric
- computes the discriminant variety of $\{\mathcal{R} = 0, \mathcal{I} = 0\}$ for the projection on the parameters;
- computes a partial cylindrical algebraic decomposition (CAD) of the parameter plane adapted to it and to the Liénard-Chipart polynomials, with a rational sample point in each cell of dimension 2;
- decides the stability at each sample point: the Liénard-Chipart polynomials must be non-negative, and the system $\{\mathcal{R} = 0, \mathcal{I} = 0\}$ must have no real solution.
The stability is constant on each cell. The result is the list of the sample points of the stable cells and the list of those of the unstable ones.
using PaceControl, Nemo
R, (z1, z2, u1, u2) = polynomial_ring(Nemo.ComplexField(), ["z1", "z2", "u1", "u2"])
D = u2*z1*z2 - u1*z2 - u2*z1 + z1*z2 - z1 + 1
stable, unstable = stability_parametric(D)
length(stable), length(unstable) # (1, 11)The variables of the ring of D must be $z_1, z_2, u_1, u_2$, in this order. The method stability_parametric(RD, CD, D1, D2) takes the intermediate polynomials instead and returns the indices of the cells.
The notebook Stability of Parametric Systems runs this example.