H infinity, Robust Control, [a b2;c1 d12] does not have full column rank at s=0 error
Show older comments
Dear Friends,
I'm trying to find such a robust controller for inverted pendulum using Hinf method. But I'm getting rank error that I need help to solve it. error is presneted below. So what I have to change in model tol solve it.
[a b2;c1 d12] does not have full column rank at s=0
Error in ==> hinf_st at 13
fail = 0;
??? Output argument "r12" (and maybe others) not assigned during call to "C:\Program
Files\MATLAB\R2010b\toolbox\robust\rctobsolete\mutools\subs\hinf_st.m>hinf_st".
Error in ==> hinfsyn at 171
[p,r12,r21,fail,gmin] = hinf_st(p,nmeas,ncon,gmin,gmax,quiet);
Error in ==> hin_ltcp at 17
[K_hin,clp]=hinfsyn(hin_ic,nmeas,ncon,gmin,gmax,tol);
My perturbation system matrix is called hin_ic from disturbance to performance errors like below.
0.0e+000 1.0e+000 0.0e+000 0.0e+000 0.0e+000 0.0e+000 | 0.0e+000 0.0e+000
0.0e+000 -3.3e-002 -3.3e+000 0.0e+000 0.0e+000 0.0e+000 | 0.0e+000 3.3e-001
0.0e+000 0.0e+000 0.0e+000 1.0e+000 0.0e+000 0.0e+000 | 0.0e+000 0.0e+000
0.0e+000 3.3e-002 1.3e+001 0.0e+000 0.0e+000 0.0e+000 | 0.0e+000 -3.3e-001
0.0e+000 0.0e+000 4.2e-003 0.0e+000 -1.0e-003 0.0e+000 | 4.2e-003 0.0e+000
0.0e+000 0.0e+000 0.0e+000 0.0e+000 0.0e+000 -1.0e+002 | 0.0e+000 5.4e-001
-------------------------------------------------------------|--------------------
0.0e+000 0.0e+000 1.8e-005 0.0e+000 4.2e-003 0.0e+000 | 1.8e-005 0.0e+000
0.0e+000 0.0e+000 0.0e+000 0.0e+000 0.0e+000 5.4e-001 | 0.0e+000 -3.0e-003
0.0e+000 0.0e+000 -1.0e+000 0.0e+000 0.0e+000 0.0e+000 | -1.0e+000 0.0e+000
Answers (1)
Have you checked to see if you have any poles on the imaginary axis?
If so (as is likely the case) can this dependant state be truncated? These few lines may provide you with some answers
function [G_temp] = shift(TF_siso)
p = pole(TF_siso(1,1));
z = zero(TF_siso(1,1));
% Pole/s on the imaginary axis which violates the H infinity
% design. shift roots by .001
p = p - .001;
z = z - .001;
% construct poly from the roots
poly_p = poly(p);
poly_z = poly(z);
% symbolic representation
symbolic_tf = poly2sym(poly_z)/poly2sym(poly_p);
% Output
G_temp = sym2tf(symbolic_tf);
Cheers
6 Comments
dipan
on 28 Feb 2012
Hi Jamie, thanks for this answer. I had a similar problem and now it is solved. However could you please explain the reasoning behind the failure of Hinfsyn methods with with systems that have poles on imaginary axis ? Reference to any reading material would also be appreciated ... thanks a lot once again.
Jamie
on 17 May 2012
The controller does not accomodate poles on the imaginary axis as these would result in closed loop instability.
Have a look at Postlethwaite's text. The chapter on H2 and Hinf should provide some answers. I believe the title of the text is 'Multivariable feedback control'. Failing that the majority of texts on Hinf design should outline the 4/5 assumptions upon which the control design is based
Regards,
Jamie
skorp41
on 8 Aug 2013
Hi Jamie,
i have the same problem, i get the same error message. One pole of the system is on the imaginary axis. So is there a possibility to solve this problem?
skorp41
Hi Skorp41, apologies, I only just saw your post. Yes, certainly. If you find postlethwaite's text a little heavy going I recently saw a text by Xue, Chen and Atherton that included some matlab examples. The text is titled "Linear feedback control. analysis and design with matlab"
To answer your question, you may be able to truncate the zero eigenvalue depending on your problem (simply a dependant state) alternatively you can always 'shift the system' while computing the controller so the pole no longer falls on the imaginary axis.
Adeel
on 26 Oct 2013
Hello Jamie,
I am getting the same error. I have a system with 15 states, with the state space A matrix having following pole pair:
-0.0488 + 11.8217i
-0.0488 - 11.8217i
Although they do have negative real parts, do you think they might cause a problem (in terms of being "too close" to the imaginary axis?
Thank you.
Hi Adeel,
No the poles you allude to dont lie on the imaginary axis. In the snipet of code I posted above the poles were shifted from 0 to 0.001 rad/s away from the imaginary axis. I just provided the snippet to emphasise a point but as you can see the poles in the example sit much closer to the imaginary axis than roots you list.
Categories
Find more on H-Infinity Synthesis in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!