Get empty results from hinfsyn

49 views (last 30 days)
Omid
Omid on 13 May 2014
Answered: farid on 7 Mar 2018
Hi all,
I have used the hinfsyn function several times before without any problem. But recently I am working on a new project that I decided to implement H∞ robust controller. For some reason, the code returns empty values of K, CL, GAM, and INFO according to the following syntax:
[K,CL,GAM,INFO] = hinfsyn(P,NMEAS,NCON,'GMIN',gamma_min);
where P is my system matrices based on hinfsyn help, NMEAS is the number of measured outputs, NCON is the number of control inputs, and gamma_min is my desired minimum gamma.
As said above, I do not know why it keeps giving me absolutely empty values without any errors or warnings!
Has anyone had similar problem before? What could potentially be wrong?
Thanks and I look forwarding to getting some help.

Accepted Answer

Omid
Omid on 18 May 2014
Actually, I accidentally solved the problem but still I do not know what was the reason. My matrix A is full rank, the system is both controllable and observable. I made a little tweak and problem was resolved. I gave very very small values to a few zero elements of matrix A and it worked.

More Answers (5)

Arkadiy Turevskiy
Arkadiy Turevskiy on 15 May 2014
This seems strange. Hard to diagnose without having access to your data. Can you share it? You can also contact technical support .

Dominik
Dominik on 19 Sep 2014
Hey friends, I've got the same problem but can't figure out, how to solve it. I have a system matrix G with a lot of zero-entries and the non-zero entries all of the form
G(i,j) = +-k/s^2
or
G(i,j) = +-k/s^4.
The system is observable and controllable. I shift the 0-poles by -.001 in order to fulfill the necessary conditions and it works fine if I try it for single transfer functions. But as soon as I plug in my whole transfer matrix G, the code will run and afterwards return an empty controller
K = []
without any explanation or error message. What am I doing wrong? Here's some code that reproduces the problem:
s = tf('s');
% Weighting Functions
W1= 0.1 * (s+100)/(100*s+1) .* eye(6);
W2 = 10 * eye(4);
W3 = [];
% Actual System
G0 = [0,318.3/s^2,0,0;0,0,318.3/s^2,0;0,0,0,848.8/s^2;0,0,-3270/s^4,0;0,3270/s^4,0,0;-10/s^2,0,0,0];
% Tweaked System
G = [0,318.3/(s^2+0.002*s+1e-06),0,0;0,0,318.3/(s^2+0.002*s+1e-06),0;0,0,0,848.8/(s^2+0.002*s+1e-06);0,0,-3270/(s^4 + 0.004*s^3 + 6e-06*s^2 + 4e-09*s + 1e-12),0;0,3270/(s^4 + 0.004*s^3 + 6e-06*s^2 + 4e-09*s + 1e-12),0,0;-10/(s^2+0.002*s+1e-06),0,0,0];
% Mixed Sensitivity
[K,CL,GAM,INFO] = mixsyn(G, W1, W2, W3)
Any help would be greatly appreciated!

Mümtazcan
Mümtazcan on 19 Jul 2016
Hello, I am having the same problem; have you ever solved it?
  1 Comment
farid
farid on 21 Feb 2018
hello to all friends I have the same problem.in fact, the value of gamma , k,CL, is empty matrix. the result is:gamma=[];k=[]; !!! can you help me? thanks a lot.

Sign in to comment.


KARAN
KARAN on 5 Mar 2018
I faced a similar issue. Converting all subsystems that form the generalized plant to state-space representation fixed the issue. In other words, weights and plant were changed to ss from tf, before forming the GenP. Please do reply if you know why this happened.
Working code:
% begin code
s = tf('s');
P = (-s+10)/(s^2-0.5*s+1);
W1 = 0.5*(s+4.5)/(s+0.01);
W2 = 0.5*((s+10)/(s+2))^2;
W3 = [];
% Convert to ss
P = ss(P);
W1 = ss(W1);
W2 = ss(W2);
W3 = ss(W3);
[n_e_orig,n_u]=size(P); % Original plant
systemnames='P W1 W2';
inputvar = ['r(1); u(1)'];
outputvar=['[W1; W2; r-P]'];
input_to_P='[u]';
input_to_W1='[r-P]';
input_to_W2='[u]';
cleanupsysic='yes';
GenP=sysic;
[K_hinfsyn,CL,GAM,info]=hinfsyn(GenP,n_e_orig,n_u)
% end code
Problematic code:
% begin code
s = tf('s');
P = (-s+10)/(s^2-0.5*s+1);
W1 = 0.5*(s+4.5)/(s+0.01);
W2 = 0.5*((s+10)/(s+2))^2;
W3 = [];
[n_e_orig,n_u]=size(P); % Original plant
systemnames='P W1 W2';
inputvar = ['r(1); u(1)'];
outputvar=['[W1; W2; r-P]'];
input_to_P='[u]';
input_to_W1='[r-P]';
input_to_W2='[u]';
cleanupsysic='yes';
GenP=sysic;
[K_hinfsyn,CL,GAM,info]=hinfsyn(GenP,n_e_orig,n_u)
% end code

farid
farid on 7 Mar 2018
Your problem is a bit unusual, but my problem was due to the incorrect adjustment of the weights. Weights should be adjusted individually, it is the best.

Community Treasure Hunt

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

Start Hunting!