hinfnorm command

조회 수: 1 (최근 30일)
M.Mohsin Siraj
M.Mohsin Siraj 2012년 6월 4일
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
Jan
Jan 2012년 7월 8일
편집: Jan 2012년 7월 8일
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 2012년 8월 24일
(This message should not be closed, just cleaned up.)

댓글을 달려면 로그인하십시오.

답변 (16개)

Suat Gumussoy
Suat Gumussoy 2012년 6월 14일
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
M.Mohsin Siraj
M.Mohsin Siraj 2012년 6월 14일
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 2012년 6월 14일
it*

댓글을 달려면 로그인하십시오.


Suat Gumussoy
Suat Gumussoy 2012년 6월 14일
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 2012년 6월 14일
B data has incompatible dimensions.

Suat Gumussoy
Suat Gumussoy 2012년 6월 14일
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 2012년 6월 14일
Which matlab version do you have?

Suat Gumussoy
Suat Gumussoy 2012년 6월 14일
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 2012년 6월 14일
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 2012년 6월 14일
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 2012년 6월 20일
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 2012년 6월 14일
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 2012년 6월 14일
Sorry for the typo...
B = [4; 2; 8.718; 7.071]
That's the correct B.

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

M.Mohsin Siraj
M.Mohsin Siraj 2012년 6월 14일
I have MATLAB 7.12.0 R2011a.
  댓글 수: 1
Jan
Jan 2012년 7월 8일
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.

댓글을 달려면 로그인하십시오.


M.Mohsin Siraj
M.Mohsin Siraj 2012년 6월 14일
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
Suat Gumussoy
Suat Gumussoy 2012년 7월 13일
Yes, they do support descriptor systems.

댓글을 달려면 로그인하십시오.


M.Mohsin Siraj
M.Mohsin Siraj 2012년 6월 15일
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
Craig
Craig 2012년 6월 15일
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 2012년 6월 15일
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.

댓글을 달려면 로그인하십시오.


M.Mohsin Siraj
M.Mohsin Siraj 2012년 6월 30일
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
Suat Gumussoy
Suat Gumussoy 2012년 7월 13일
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 2012년 7월 13일
Stability can be easily checked by isstable(sys).

댓글을 달려면 로그인하십시오.

이 질문은 마감되었습니다.

Community Treasure Hunt

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

Start Hunting!

Translated by