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.
Get empty results from hinfsyn
7 ビュー (過去 30 日間)
古いコメントを表示
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.
0 件のコメント
採用された回答
その他の回答 (5 件)
Arkadiy Turevskiy
2014 年 5 月 15 日
This seems strange. Hard to diagnose without having access to your data. Can you share it? You can also contact technical support .
0 件のコメント
Dominik
2014 年 9 月 19 日
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!
0 件のコメント
KARAN
2018 年 3 月 5 日
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
0 件のコメント
farid
2018 年 3 月 7 日
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.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Robust Control Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!