Why does robstab fail for systems with more than two zeros?

13 views (last 30 days)
When using the "robstab" function, the following error is generated when the uncertain system contains more than two zeros:
Error using DynamicSystem/robstab
Improper state-space models (models with infinite gain at s,z=Inf) do not have an explicit representation. Use the "dssdata" command
to retrieve their descriptor representation.
Using a proper system of 2 zeros and 2 poles works as expected, and strictly proper systems with 2 zeros and 3 or more poles also works as expected:
z1 = ureal('z1', -1, 'Range', [-1.2, -0.8]);
z2 = ureal('z2', -2, 'Range', [-2.2, -1.8]);
p1 = ureal('p1', -0.1, 'Range', [-0.14, -0.08]);
p2 = ureal('p2', -1.1, 'Range', [-1.4, -0.8]);
% define a proper transfer function
s = tf('s');
T = (s - z1)*(s - z2) / ...
((s - p1)*(s - p2));
opt = robOptions('Display','on');
robstab(T, opt);
Computing peak... Percent completed: 100/100 System is robustly stable for the modeled uncertainty. -- It can tolerate up to 299% of the modeled uncertainty. -- No modeled uncertainty was found to cause instability.
But a proper system of 3 zeros and 3 poles errors:
z1 = ureal('z1', -1, 'Range', [-1.2, -0.8]);
z2 = ureal('z2', -2, 'Range', [-2.2, -1.8]);
z3 = ureal('z3', -3, 'Range', [-3.2, -2.8]);
p1 = ureal('p1', -0.1, 'Range', [-0.14, -0.08]);
p2 = ureal('p2', -1.1, 'Range', [-1.4, -0.8]);
p3 = ureal('p3', -2.1, 'Range', [-2.4 -1.8]);
% define a proper transfer function
s = tf('s');
T = (s - z1)*(s - z2)*(s - z3) / ...
((s - p1)*(s - p2)*(s - p3));
opt = robOptions('Display','on');
robstab(T, opt);
Error using DynamicSystem/robstab (line 104)
Improper state-space models (models with infinite gain at s,z=Inf) do not have an explicit representation. Use the "dssdata" command to retrieve their descriptor representation.
A strictly proper system of 3 zeros and 4 poles also fails:
z1 = ureal('z1', -1, 'Range', [-1.2, -0.8]);
z2 = ureal('z2', -2, 'Range', [-2.2, -1.8]);
z3 = ureal('z3', -3, 'Range', [-3.2, -2.8]);
p1 = ureal('p1', -0.1, 'Range', [-0.14, -0.08]);
p2 = ureal('p2', -1.1, 'Range', [-1.4, -0.8]);
p3 = ureal('p3', -2.1, 'Range', [-2.4 -1.8]);
p4 = ureal('p4', -3.1, 'Range', [-3.4, -2.8]);
% define a proper transfer function
s = tf('s');
T = (s - z1)*(s - z2)*(s - z3) / ...
((s - p1)*(s - p2)*(s - p3)*(s - p4));
opt = robOptions('Display','on');
robstab(T, opt);

Accepted Answer

Paul
Paul on 15 Apr 2024
Edited: Paul on 15 Apr 2024
Hi Suleyman,
Generally speaking, it's best to avoid "transfer function algebra." Instead, use model construction and interconnection commands. I suspect that's even more true for the Robust Control Toolbox.
z1 = ureal('z1', -1, 'Range', [-1.2, -0.8]);
z2 = ureal('z2', -2, 'Range', [-2.2, -1.8]);
z3 = ureal('z3', -3, 'Range', [-3.2, -2.8]);
p1 = ureal('p1', -0.1, 'Range', [-0.14, -0.08]);
p2 = ureal('p2', -1.1, 'Range', [-1.4, -0.8]);
p3 = ureal('p3', -2.1, 'Range', [-2.4 -1.8]);
% define a proper transfer function
% s = tf('s');
% T = (s - z1)*(s - z2)*(s - z3) / ...
% ((s - p1)*(s - p2)*(s - p3));
T = tf([1,-z1],[1,-p1])*tf([1,-z2],[1,-p2])*tf([1,-z3],[1,-p3]);
opt = robOptions('Display','on');
robstab(T, opt);
Computing peak... Percent completed: 100/100 System is robustly stable for the modeled uncertainty. -- It can tolerate up to 299% of the modeled uncertainty. -- There is a destabilizing perturbation amounting to 300% of the modeled uncertainty. -- This perturbation causes an instability at the frequency Inf rad/seconds.
A strictly proper system of 3 zeros and 4 poles also doesn't fail:
z1 = ureal('z1', -1, 'Range', [-1.2, -0.8]);
z2 = ureal('z2', -2, 'Range', [-2.2, -1.8]);
z3 = ureal('z3', -3, 'Range', [-3.2, -2.8]);
p1 = ureal('p1', -0.1, 'Range', [-0.14, -0.08]);
p2 = ureal('p2', -1.1, 'Range', [-1.4, -0.8]);
p3 = ureal('p3', -2.1, 'Range', [-2.4 -1.8]);
p4 = ureal('p4', -3.1, 'Range', [-3.4, -2.8]);
% define a proper transfer function
% s = tf('s');
% T = (s - z1)*(s - z2)*(s - z3) / ...
% ((s - p1)*(s - p2)*(s - p3)*(s - p4));
T = tf([1,-z1],[1,-p1])*tf([1,-z2],[1,-p2])*tf([1,-z3],[1,-p3])*tf(1,[1,-p4]);
opt = robOptions('Display','on');
robstab(T, opt);
Computing peak... Percent completed: 100/100 System is robustly stable for the modeled uncertainty. -- It can tolerate up to 299% of the modeled uncertainty. -- There is a destabilizing perturbation amounting to 300% of the modeled uncertainty. -- This perturbation causes an instability at the frequency Inf rad/seconds.

More Answers (0)

Categories

Find more on Wireless Communications in Help Center and File Exchange

Products


Release

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!