Accelerating the pace of engineering and science

# Documentation

## Eliminate States by Pole-Zero Cancellation

This example shows how to use to reduce the order of a transfer function with cancelling or near-cancelling factors in the numerator and denominator using minreal.

Canceling or near-canceling pole-zero pairs can arise from system dynamics, or from building models using model interconnection functions.

Create a model of the following system, where C is a PI controller and G has a zero at rad/s. Such a low-frequency zero can arise from derivative action somewhere in the plant dynamics. For example, the plant may include a component that computes speed from position measurements.

G = zpk(3e-8,[-1,-3],1);
C = pid(1,0.3);
T = feedback(G*C,1)

T =

(s+0.3) (s-3e-08)
----------------------
s (s+4.218) (s+0.7824)

Continuous-time zero/pole/gain model.



In the closed-loop model T, the integrator from C very nearly cancels the low-frequency zero of G.

Force a cancellation of the integrator with the zero near the origin.

Tred = minreal(T,1e-7)

Tred =

(s+0.3)
--------------------
(s+4.218) (s+0.7824)

Continuous-time zero/pole/gain model.



By default, minreal reduces transfer function order by canceling exact pole-zero pairs or near pole-zero pairs within sqrt(eps). Specifying 1e-7 as the second input causes minreal to eliminate pole-zero pairs within rad/s of each other.

The reduced model Tred includes all the dynamics of the original closed-loop model T, except for the near-canceling zero-pole pair.

Compare the frequency responses of the original and reduced systems.

bode(T,Tred,'r--')
legend('T','Tred')


Because the canceled pole and zero do exactly match, some extreme low-frequency dynamics evident in the original model are missing from Tred. In many applications, you can neglect such extreme low-frequency dynamics. When you increase the matching tolerance of minreal, make sure that you do not eliminate dynamic features that are relevant to your application.