Get empty results from hinfsyn

6 visualizzazioni (ultimi 30 giorni)
Omid
Omid il 13 Mag 2014
Risposto: farid il 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.

Risposta accettata

Omid
Omid il 18 Mag 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.

Più risposte (5)

Arkadiy Turevskiy
Arkadiy Turevskiy il 15 Mag 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 il 19 Set 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 il 19 Lug 2016
Hello, I am having the same problem; have you ever solved it?
  1 Commento
farid
farid il 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.

Accedi per commentare.


KARAN
KARAN il 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 il 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.

Categorie

Scopri di più su Robust Control Toolbox in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by