H infinity, Robust Control, [a b2;c1 d12] does not have full column rank at s=0 error

16 views (last 30 days)
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)

Jamie
Jamie on 25 Nov 2011
Edited: Jamie on 8 Jul 2013
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
Jamie
Jamie on 28 Oct 2013
Edited: Jamie on 28 Oct 2013
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.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!