Yalmip LMI solving H2 optimal control problem run into problem

128 views
Skip to first unread message

David peter

unread,
Jul 8, 2020, 10:37:37 PM7/8/20
to YALMIP
Dear Professor,
 
  l am trying to use Yalmip toolbox to solve H2 optimal control problem.

l use the following LMI, While there is something wrong with my code, l can't get the expected result,

P1.PNG

P2.PNG

l use the formula (4.4,4.6,4.7)
clear;
clc;
% system parameters
A = [-3 -2 1;
 1 2 1;
1 -1 -1];
B1 = [1 0.2 0]';
B2 = [0.4 1 0.6]';
C1 = [1.2 0.5 0.3];
D12 = 1;
% declare the variable
P = sdpvar(3);
Z = sdpvar(1);
F = sdpvar(1,3);
mu = sdpvar(1);
% describe the LMI
mat1 = [A*P+P*A'+B2*F+F'*B2' P*C1'+F'*D12';
(P*C1'+F'*D12')' -eye(1)];
mat2 = [Z B1';
B1 P];
% declare the constraints
F = [mat1<0; mat2>0; P>0; Z>0 ;trace(Z)<mu];
optimize(F, mu);
% result
K = value(F)*inv(value(P))
H2_norm = sqrt(value(mu))

I get the following result ,


SeDuMi 1.3 by AdvOL, 2005-2008 and Jos F. Sturm, 1998-2003.
Alg = 2: xz-corrector, theta = 0.250, beta = 0.500
eqs m = 11, order n = 14, dim = 44, blocks = 4
nnz(A) = 61 + 0, nnz(ADA) = 97, nnz(L) = 54
it : b*y gap delta rate t/tP* t/tD* feas cg cg prec
0 : 2.90E+00 0.000
1 : -6.66E-01 6.49E-01 0.000 0.2239 0.9000 0.9000 1.72 1 1 1.9E+00
2 : -7.69E-01 1.94E-01 0.000 0.2995 0.9000 0.9000 1.17 1 1 5.3E-01
3 : -9.76E-01 6.63E-02 0.000 0.3410 0.9000 0.9000 0.50 1 1 2.2E-01
4 : -1.18E+00 2.25E-02 0.000 0.3396 0.9000 0.9000 0.25 1 1 9.0E-02
5 : -1.44E+00 9.77E-03 0.000 0.4343 0.9000 0.9000 0.10 1 1 6.0E-02
6 : -1.75E+00 3.75E-03 0.000 0.3836 0.9000 0.9000 0.03 1 1 3.7E-02
7 : -2.16E+00 1.33E-03 0.000 0.3553 0.9000 0.9000 0.22 1 1 1.9E-02
8 : -2.46E+00 5.28E-04 0.000 0.3964 0.9000 0.9000 0.23 1 1 1.1E-02
9 : -2.79E+00 1.44E-04 0.000 0.2725 0.9000 0.9000 0.58 1 1 3.6E-03
10 : -2.93E+00 3.91E-05 0.000 0.2716 0.9000 0.9000 0.68 1 1 1.2E-03
11 : -2.99E+00 3.03E-06 0.000 0.0775 0.9900 0.9900 0.90 1 2 9.5E-05
12 : -2.99E+00 1.98E-07 0.000 0.0653 0.9900 0.9900 0.97 1 2 6.3E-06
13 : -2.99E+00 3.82E-08 0.000 0.1934 0.9000 0.9000 0.93 3 3 1.3E-06
14 : -2.99E+00 1.16E-08 0.000 0.3044 0.9000 0.9000 0.76 7 4 4.6E-07
15 : -2.99E+00 4.26E-09 0.000 0.3662 0.9000 0.9000 0.60 16 14 2.1E-07
Run into numerical problems.
iter seconds digits c*x b*y
15 0.1 5.9 -2.9940592991e+00 -2.9940558596e+00
|Ax-b| = 2.8e-07, [Ay-c]_+ = 6.4E-08, |x|= 2.2e+02, |y|= 1.7e+02
Detailed timing (sec)
Pre IPM Post
8.500E-02 1.940E-01 7.800E-02
Max-norms: ||b||=1, ||c|| = 2,
Cholesky |add|=0, |skip| = 0, ||L.L|| = 167.62.
the error message:
错误使用 lmi/value (line 12)
Double not applicable on list of constraints
出错 H2_state_feedback_control_LMI_method (line 274)
Kd = value(F)*inv(value(P))

I have check my code several times  l don’t know how to deal with this problem,


Any suggestion will be appreciated !

Best Regards
David

Johan Löfberg

unread,
Jul 9, 2020, 2:44:01 AM7/9/20
to YALMIP
First, don't you get a lot of sad kittens telling you strict inequalities aren't supported?

As for the question, you are using the variable name F for two different things hence it is no longer an sdpvar when you try to extract value

David peter

unread,
Jul 9, 2020, 5:14:00 AM7/9/20
to YALMIP
 Thank  you very much !!!   it works !   it  was a avoidable mistake. l was too careless

Again  thanks Professor !

clear; clc;
% system parameters
A = [-3 -2 1;
   1   2 1;
      1 -1 -1];
B1 = [1 0.2 0]';
B2 = [0.4 1 0.6]';
C1 = [1.2 0.5 0.3];
D12 = 1;
% declare the variable
P = sdpvar(3);
Z = sdpvar(1);
F = sdpvar(1,3);
mu = sdpvar(1);
% describe the LMI
mat1 = [A*P+P*A'+B2*F+F'*B2' P*C1'+F'*D12';
               (P*C1'+F'*D12')' -eye(1)];
mat2 = [Z B1';
             B1 P];
% declare the constraints
Fd = [mat1<=0; mat2>=0; P>=0; Z>=0 ;trace(Z)<=mu];
optimize(Fd, mu);
% result
K = value(F)*inv(value(P))
H2_norm = sqrt(value(mu))

Reply all
Reply to author
Forward
0 new messages