Main Content


(Not recommended) Region-based modal decomposition

modsep is not recommended. Use modalsep instead. (since R2023b).


[H,H0] = modsep(G,N,REGIONFCN)


[H,H0] = modsep(G,N,REGIONFCN) decomposes the LTI model G into a sum of n simpler models Hj with their poles in disjoint regions Rj of the complex plane:


G can be any LTI model created with ss, tf, or zpk, and N is the number of regions used in the decomposition. modsep packs the submodels Hj into an LTI array H and returns the static gain H0 separately. Use H(:,:,j) to retrieve the submodel Hj(s).

To specify the regions of interest, use a function of the form


that assigns a region index IR between 1 and N to a given pole p. You can specify this function by its name or as a function handle, and use the syntax MODSEP(G,N,REGIONFCN,PARAM1,...) to pass extra input arguments:



To decompose G into G(z) = H0 + H1(z) + H2(z) where H1 and H2 have their poles inside and outside the unit disk respectively, use

[H,H0]  = modsep(G,2,@udsep)

where the function udsep is defined by

function r = udsep(p)
if abs(p)<1, r = 1;  % assign r=1 to poles inside unit disk
else         r = 2;  % assign r=2 to poles outside unit disk

To extract H1(z) and H2(z) from the LTI array H, use

H1 = H(:,:,1);  H2 = H(:,:,2);

Version History

Introduced before R2006a

collapse all

R2023b: Not recommended

modsep is not recommended. To compute modal decompositions, use modalsep.

See Also