MATLAB: Does the STABSEP function in the Control System Toolbox 6.2 (R14SP2) give incorrect results

balrealControl System Toolboxssbalstabsep

I use the STABSEP function on a system "sys" to decompose it into its stable and unstable parts. If the system "sys" is stable, I expect that the unstable part received on the execution of the STABSEP will be 0. However, I observe that the STABSEP function gives a non-zero unstable part, which is incorrect.
pole(sys);
[syss, sysus] = stabsep(sys);

Best Answer

This enhancement has been incorporated in Release 2006b (R2006b). For previous product releases, read below for any possible workarounds:
This enhancement has been incorporated in Release 2006a (R2006a). For previous product releases, read below for any possible workarounds:
This issue has been addressed by the new scaling algorithms in Control System Toolbox 7.0 (R2006a). If you are using a previous version, read the following:
There are some numerical difficulties in the Control System Toolbox 6.2 (R14SP2) in the way the STABSEP function handles systems with poles spread over a wide range.
As a workaround you can use
a = [1 1e4 1e2;0 1e2 1e5;10 1 0];
b = [1;1;1];
c = [0.1 10 1e2];
sys = ss(a,b,c,0) %create a system sys
[syss, sysus] = stabsep(ssbal(sys)); % performs full balancing of sys.a
instead of
[syss, sysus] = stabsep(sys);
where “sys” is the LTI model you want to decompose into its stable and unstable parts.