Documentation |
Determine if dynamic system model is proper
B = isproper(sys)
B = isproper(sys,'elem')
[B,
sysr] = isproper(sys)
B = isproper(sys) returns TRUE (logical 1) if the dynamic system model sys is proper and FALSE (logical 0) otherwise.
A proper model has relative degree ≤ 0 and is causal. SISO transfer functions and zero-pole-gain models are proper if the degree of their numerator is less than or equal to the degree of their denominator (in other words, if they have at least as many poles as zeroes). MIMO transfer functions are proper if all their SISO entries are proper. Regular state-space models (state-space models having no E matrix) are always proper. A descriptor state-space model that has an invertible E matrix is always proper. A descriptor state-space model having a singular (non-invertible) E matrix is proper if the model has at least as many poles as zeroes.
If sys is a model array, then B is TRUE if all models in the array are proper.
B = isproper(sys,'elem') checks each model in a model array sys and returns a logical array of the same size as sys. The logical array indicates which models in sys are proper.
If sys is a proper descriptor state-space model with a non-invertible E matrix, [B, sysr] = isproper(sys) also returns an equivalent model sysr with fewer states (reduced order) and a non-singular E matrix. If sys is not proper, sysr = sys.
The following commands
B1 = isproper(tf([1 0],1)) % transfer function s B2 = isproper(tf([1 0],[1 1])) % transfer function s/(s+1)
return FALSE (logical 0) and TRUE (logical 1), respectively.
Combining state-space models sometimes yields results that include more states than necessary. Use isproper to compute an equivalent lower-order model.
H1 = ss(tf([1 1],[1 2 5])); H2 = ss(tf([1 7],[1])); H = H1*H2; size(H)
State-space model with 1 outputs, 1 inputs, and 4 states.
H is proper and reducible. isproper returns the reduced model.
[isprop,Hr] = isproper(H); size(Hr)
State-space model with 1 outputs, 1 inputs, and 2 states.
H and Hr are equivalent, as a Bode plot demonstrates.
bodeplot(H,Hr,'r--') legend('original','reduced')