hinfnorm command

4 views (last 30 days)
M.Mohsin Siraj
M.Mohsin Siraj on 4 Jun 2012
Hello I am using the command 'hinfnorm' to calculate the infinity norm of a descriptor linear system described by a ltisys command... Sometimes, hinfnorm command says that the descriptor linear system has closed-right-half plane poles while when i check the eigen values of that same system by eig(sys_descriptor)... the real part of the all the eigens values are negative. What is going wrong with this. is hinfnorm not reliable? or eig doesn't give eigen values for descriptor system?
Thanks in advance.
  4 Comments
Jan
Jan on 8 Jul 2012
Edited: Jan on 8 Jul 2012
This became the ugliest thread in the forum, because necessary information about the problem are distributed to different answers and related comments are posted as further answers. Please follow the layout:
  1. All information, which define the problem, are found in the question.
  2. Clarifications of the problem are added by editing the question. The [EDITED] tag helps to recognize changes.
  3. Answers are posted as answers.
  4. Comments to answers are posted as comments to answers.
  5. Questions for clarifications are posted as comments to the question.
Thanks. The readability of the threads are important for all users.
Walter Roberson
Walter Roberson on 24 Aug 2012
(This message should not be closed, just cleaned up.)

Sign in to comment.

Answers (16)

Suat Gumussoy
Suat Gumussoy on 14 Jun 2012
Could you send me or post your plant that you used for norm computation? I suggest you to use norm(sys,inf,tol) with desired tolerance tol. norm function implements the state-of-the-art numerical methods and it is likely to give reliable answers.
  2 Comments
M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
for example, the system below:
A = [-1 0 0 0; 0 -2 0 0;0 0 -0.4172 -0.07477;0 0 -0.1495 -0.6489];
B = [4;2;3 8.718;7.071];
C = [19 25 -4.166 -2.946]
D = 0 ;
E = [1 0 0 0;0 1 0 0; 0 0 0.4172 0.07477;0 0 0.07477 0.3244];
sys = dss(A,B,C,D,E);
sys_lti = ltisys(A,B,C,D,E);
figure, bode(sys)
hinfnorm(sys_lti)
The bode diagram(equivalent to Sigma in SISO as here) shows that the peak is at extremely low value while the hinfnorm command shows the hinfinity norm to be 69.555.
Isn't is strange?
M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
it*

Sign in to comment.


Suat Gumussoy
Suat Gumussoy on 14 Jun 2012
Some other things... assuming that plant matrices E,A,B,C,D, you can create and ss object by
sys = dss(A,B,C,D,E); and eigenvalues can be computed by pole(sys)
In order to compute eigenvalues of descriptor system, you need to do eig(A,E) since the system is descriptor and don't forget to exclude eigenvalues at infinity since these corresponds to the null space of E.

Suat Gumussoy
Suat Gumussoy on 14 Jun 2012
B data has incompatible dimensions.

Suat Gumussoy
Suat Gumussoy on 14 Jun 2012
As I pointed out earlier, svd plot (in this case bode) and norm(sys,inf) are consistent.
>> [f,w]=norm(sys,inf)
f =
0.0086
w =
0
Note that in 2012b, all norm computations are done via getPeakGain function which is the function norm relies on. I'll get back for hinfnorm.

Suat Gumussoy
Suat Gumussoy on 14 Jun 2012
Which matlab version do you have?

Suat Gumussoy
Suat Gumussoy on 14 Jun 2012
I double checked the computation in your version of MATLAB R2011a, norm(sys,inf) gives 0.0086 at frequency 0 and this is consistent with bode plot. Again getting back to hinfnorm.

Suat Gumussoy
Suat Gumussoy on 14 Jun 2012
About hinfnorm... this function is not implemented to be used with descriptor systems. see line 45 in hinfnorm function
[a,b,c,d] = unpck(sys);
it passes a,b,c,d data not e. In fact, you may not pass e, since it gives an error as
K>> [a,b,c,d,e] = unpck(sys); Error using unpck Too many output arguments.
On the other hand, if you want to compute norm without e,
sys = ss(A,B,C,D); sys_lti = ltisys(A,B,C,D);
they give similar norm norm(sys,inf)
ans =
34.6214
>> hinfnorm(sys_lti,1e-6) norm between 34.6214 and 34.6215 achieved near 0.79022
If you want to use hinfnorm, since your E is not singular, you may write as ss object and then compute norm
sys1=ss(E\A,E\B,C,D); sys_lti1=pck(sys1.A,sys1.B,sys1.C,sys1.D) hinfnorm(sys_lti1,1e-6)
hinfnorm(sys_lti1,1e-6) norm between 0.0086415 and 0.0086415 achieved near 0
which gives similar result as norm(.,inf).
Hope this helps.

Suat Gumussoy
Suat Gumussoy on 14 Jun 2012
You're welcome. If you have singular E, I suggest to use dss and create ss object. bode, sigma and norm are defined for descriptor systems. These functions are continuously updated and improved with each release whereas in general hinfnorm is not.

Suat Gumussoy
Suat Gumussoy on 20 Jun 2012
Bode, sigma plot and norm commands work for descriptor systems. Assuming system matrices are a,b,c,d,e. Define your descriptor system as sys=dss(a,b,c,d,e) and you can use them as bode(sys), sigma(sys), norm(sys,.).

M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
for example, the system below:
A = [-1 0 0 0; 0 -2 0 0;0 0 -0.4172 -0.07477;0 0 -0.1495 -0.6489];
B = [4;2;3 8.718;7.071];
C = [19 25 -4.166 -2.946]
D = 0 ;
E = [1 0 0 0;0 1 0 0; 0 0 0.4172 0.07477;0 0 0.07477 0.3244];
sys = dss(A,B,C,D,E);
sys_lti = ltisys(A,B,C,D,E);
figure, bode(sys) ;
hinfnorm(sys_lti)
The bode diagram(equivalent to Sigma in SISO as here) shows that the peak is at extremely low value while the hinfnorm command shows the hinfinity norm to be 69.555. Isn'tsit strange?

M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
Sorry for the typo...
B = [4; 2; 8.718; 7.071]
That's the correct B.

M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
the norm command as follows:
norm(sys,inf)
gives the h infinity norm of 3.1974e-014.

M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
I have MATLAB 7.12.0 R2011a.
  1 Comment
Jan
Jan on 8 Jul 2012
Please post comments to an answer as a comment, not as an additional answer. Details about your question should be added by editing the original question, such that readers get all required information in one message, not distributed over the question, some answers without a fixed order and some comments.

Sign in to comment.


M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
Thank you so much for your detailed answers.... One thing, are 'bode' or 'sigma' and 'norm' defined for descriptor systems as well? Actually in this particular example, my E is not singular otherwise generally it is singular.
Thanks a lot again.
  1 Comment
Suat Gumussoy
Suat Gumussoy on 13 Jul 2012
Yes, they do support descriptor systems.

Sign in to comment.


M.Mohsin Siraj
M.Mohsin Siraj on 15 Jun 2012
Thanks, how can i confirm that the bode and sigma plots and norm does consider the descriptor systems? Also I read in one of the User Guide about Control system Toolbox ver 4.2, that dss doesn't support a non singular E but a badly conditioned E (nearer to singularity) can be considered. I can send you the user guide, if required.
  2 Comments
Craig
Craig on 15 Jun 2012
See the following release notes: http://www.mathworks.com/help/toolbox/control/rn/f0-82252.html
Release Notes: Version 7.0 (R2006a) Control System Toolbox Software
LTI Objects
Descriptor and Improper State-Space Models Fully Supported
There is now full support for descriptor state-space models with a singular E matrix. This now lets you build state-space representations, such as PID, and manipulate improper models with the superior accuracy of state-space computations. In previous versions, only descriptor models with a nonsingular E matrix were supported.
M.Mohsin Siraj
M.Mohsin Siraj on 15 Jun 2012
Thanks for your answer... Can you kindly further comment on my first question about the use of bode, sigma plot and norm command for descriptor systems? Do they support descriptor systems or they are only designed to work with ordinary state-space realization.

Sign in to comment.


M.Mohsin Siraj
M.Mohsin Siraj on 30 Jun 2012
Thanks for your answer. But now consider the following simple first order descriptor system
a =
x1
x1 0.04178
b =
u1
x1 -4.697
c =
x1
y1 4.166
d =
u1
y1 0
e =
x1
x1 0.03067
sys = dss(0.04178,-4.697,4.166,0,0.03067);
[hinf f] = norm(sys);
ans =
468.3365
it is an unstable system, but the norm command still calculates its h-infinity norm. Isn't it strange?
  2 Comments
Suat Gumussoy
Suat Gumussoy on 13 Jul 2012
You're right. It should be called as L-infinity norm since it does not check whether the system is stable. However, when system is stable, L-infinity and H-infinity norms are equal. So user needs to check system stability himself. By the way, what you compute is h2 norm for h-infinity norm, you need
[hinf,f]=norm(sys,inf);
Suat Gumussoy
Suat Gumussoy on 13 Jul 2012
Stability can be easily checked by isstable(sys).

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!