| Control System Toolbox | ![]() |
Computes the Hankel singular values of an LTI model
Syntax
hsv = hsvd(sys)
hsvd(sys)
[hsv,baldata] = hsvd(sys)
Description
hsv = hsvd(sys) computes the Hankel singular values hsv of the LTI model sys. In state coordinates that equalize the input-to-state and state-to-output energy transfers, the Hankel singular values measure the contribution of each state to the input/output behavior. Hankel singular values are to model order what singular values are to matrix rank. In particular, small Hankel singular values signal states that can be discarded to simplify the model (see balred).
For models with unstable poles, hsvd only computes the Hankel singular values of the stable part and entries of hsv corresponding to unstable modes are set to Inf. Use
to specify additional options for the stable/unstable decomposition, see STABSEP for details. The default values are ATOL=0, RTOL=1e-8, and ALPHA=1e-8.
hsvd(sys) displays a plot of the Hankel singular values.
[hsv,baldata] = hsvd(sys) returns additional data to speed up model order reduction with balred. For example
sys = rss(20); % 20-th order model [hsv,baldata] = hsvd(sys); rsys = balred(sys,8:10,'Balancing',baldata); bode(sys,'b',rsys,'r--')
computes 3 approximations of sys of orders 8, 9, 10.
There is more than one hsvd available. Type
Algorithm
The AbsTol, RelTol, and ALPHA parameters are only used for models with unstable or marginally stable dynamics. Because Hankel singular values are only meaningful for stable dynamics, hsvd must first splitsuch models into the sum of their stable and unstable parts:
This decomposition can be tricky when the model has modes close to the stability boundary (e.g., a pole at s=-1e-10), or clusters of modes on the stability boundary (e.g., double or triple integrators).While hsvd is able to overcome these difficulties in most cases, it sometimes produces unexpected results such as
G_s contains some poles very close to the stability boundary. To force such modes into the unstable group, increase the 'Offset' option to slightly grow the unstable region.
s=0. Because such clusters are numerically equivalent to a multiple pole at s=0, it is actually desirable to treat the whole cluster as unstable. In some cases, however, large relative errors in low-gain frequency bands can trip the accuracy checks and lead to a rejection of valid decompositions. Additional modes are then absorbed into the unstable part G_ns, unduly increasing its order.
Such issues can be easily corrected by adjusting the AbsTol and RelTol tolerances. By setting AbsTol to a fraction of smallest gain of interest in your model, you tell the algorithm to ignore errors below a certain gain threshold. By increasing RelTol, you tell the algorithm to sacrifice some relative model accuracy in exchange for keeping more modes in the stable part G_s.
Examples
These examples illustrate the use of AbsTol and offset.
Example 1: Large Hankel singular values for the stable part.
First, create a system with a stable pole very near to 0, then calculate the Hankel singular values.
sys = zpk([1 2],[-1 -2 -3 -10 -1e-7],1) hsvd(sys) Zero/pole/gain: (s-1) (s-2) ----------------------------------- (s+1) (s+2) (s+3) (s+10) (s+1e-007)![]()
Notice the dominant Hankel singular value with 1e5 magnitude, due to the mode s=-1e-7 near the imaginary axis. Set the offset=1e-6 to treat this mode as unstable
hsvd(sys,'Offset',1e-7) Zero/pole/gain: (s-1) (s-2) ----------------------------------- (s+1) (s+2) (s+3) (s+10) (s+1e-007)
The dominant Hankel singular value is now shown as unstable.
Example 2: Too many modes are labeled as unstable.
Create a system with three unstable modes. Then calculate the Hankel singular values.
sys = zpk([1 -1],[-1e-2,1e3,-1,-1,1,-2,0,10*i-1,-10*i-1],1); esort(pole(sys)) ans = 1.0000e+003 1.0000e+000 0 -1.0000e-002 -1.0000e+000 -1.0000e+000 -1.0000e+000 +1.0000e+001i -1.0000e+000 -1.0000e+001i -2.0000e+000
There are 3 unstable modes, but there are 7 "unstable" Hankel singular values on the plot.
Note the low gain of -400 dB near to pole s=1e3 (w=1e3 rad/s). Try increasing the absolute tolerance to AbsTol = 1e-16 (= -320 dB).
This fixed the problem, as this figure shows.

There are now only three unstable modes, the corrrect number for the system sys.
See Also
balred Model order reduction
balreal Gramian-based balancing of state-space realizations
| hasdelay | hsvplot | ![]() |
© 1994-2005 The MathWorks, Inc.