Teljes Matlab script
(és live script)
kiegészítő függvényekkel.
Tekintsd meg LiveEditor nézetben is!
File: vdp_v7_egyszerusitett_Pia.m
Author: Peter Polcz (ppolcz@gmail.com)
Created on 2017. November 26.
% Automatically generated stuff
global SCOPE_DEPTH VERBOSE
SCOPE_DEPTH = 0;
VERBOSE = 0;
P_generate_symvars_v1_caller(2,0);
% define f(x):
e = 1;
A_sym = [
0 , -1
x1*x2 + 1 , -1
];
f_sym = expand(A_sym * x)
G_lfr = sym2lfr(A_sym);
lfr = P_lfrdata_v6(G_lfr);
lfr = P_LFR_reduction_v6(lfr, x);
f_sym =
-x2
x2*x1^2 + x1 - x2
A = lfr.A
B = lfr.B
Pi = lfr.Pi
Pib = lfr.Pib
n = numel(x);
p = numel(Pi);
m = numel(Pib);
A =
0 -1
1 -1
B =
0 0
1 0
Pi =
x1^2*x2
x1*x2
Pib =
x1
x2
x1^2*x2
x1*x2
dPi = expand(jacobian(Pi,x) * f_sym)
Pia = [Pib ; dPi]
dPi =
x1^4*x2 + x1^3 - x1^2*x2 - 2*x1*x2^2
x1^3*x2 + x1^2 - x1*x2 - x2^2
Pia =
x1
x2
x1^2*x2
x1*x2
x1^4*x2 + x1^3 - x1^2*x2 - 2*x1*x2^2
x1^3*x2 + x1^2 - x1*x2 - x2^2
Nb_sym = P_annihilator_linsolve_v6(Pib,x)
Na_sym = P_annihilator_linsolve_v6(Pia,x)
Na = matlabFunction(Na_sym,'vars',{x});
Nb = matlabFunction(Nb_sym,'vars',{x});
Nb_sym = [ x2, 0, 0, -1] [ 0, x1, 0, -1] [ 0, 0, 1, -x1] Na_sym = [ x1, -x2, x1, -1, 0, -1] [ x2, 0, 0, -1, 0, 0] [ 0, x1, 0, -1, 0, 0] [ 0, 0, 1, -x1, 0, 0] [ 0, 0, 0, x2, 1, -x1]
Aa = [
A B zeros(n,p)
zeros(p,m) eye(p)
];
P = sdpvar(m);
Pa = [ eye(m) ; zeros(p,m) ] * P * Aa;
R = (Pa' + Pa);
La = sdpvar(size(Na_sym,2),size(Na_sym,1),'full');
Lb = sdpvar(size(Nb_sym,2),size(Nb_sym,1),'full');
U = @(A) A + A';
X_v = [
-1.1463 -2.3221
-0.2645 -2.3221
1.7930 -0.2645
1.7930 0.9112
1.2051 2.3809
0.3233 2.3809
-1.7343 0.3233
-1.7343 -1.1463
-1.5227 -1.6840
-1.7950 -0.2723
-0.7462 -2.4000
-1.8555 -0.2218
0.8112 2.5000
-0.7296 -2.5204
-1.6480 -1.5306
-1.9133 -0.5306
1.9133 0.2449
1.5561 1.7245
1.6582 1.8469
-1.2194 0.8878
-1.3716 0.7544
1.3747 -0.7296
] * 0.8;
chull = convhull(X_v(:,1),X_v(:,2));
xv = X_v(chull,1);
yv = X_v(chull,2);
figure, plot(xv,yv), grid on
Constraints = [];
for i = 1:size(X_v,1)
w = X_v(i,:)';
Constraints = [ Constraints ...
P + U(Lb*Nb(w)) >= 0
R + U(La*Na(w)) <= 0
];
end
sol = optimize(Constraints)
Problem
Name :
Objective sense : min
Type : CONIC (conic optimization problem)
Constraints : 52
Cones : 0
Scalar variables : 0
Matrix variables : 44
Integer variables : 0
Optimizer started.
Presolve started.
Linear dependency checker started.
Linear dependency checker terminated.
Eliminator - tries : 0 time : 0.00
Lin. dep. - tries : 1 time : 0.00
Lin. dep. - number : 0
Presolve terminated. Time: 0.00
Problem
Name :
Objective sense : min
Type : CONIC (conic optimization problem)
Constraints : 52
Cones : 0
Scalar variables : 0
Matrix variables : 44
Integer variables : 0
Optimizer - threads : 4
Optimizer - solved problem : the primal
Optimizer - Constraints : 52
Optimizer - Cones : 0
Optimizer - Scalar variables : 0 conic : 0
Optimizer - Semi-definite variables: 44 scalarized : 682
Factor - setup time : 0.00 dense det. time : 0.00
Factor - ML order time : 0.00 GP order time : 0.00
Factor - nonzeros before factor : 1018 after factor : 1018
Factor - dense dim. : 0 flops : 2.91e+05
ITE PFEAS DFEAS GFEAS PRSTATUS POBJ DOBJ MU TIME
0 2.2e+01 1.0e+00 1.0e+00 0.00e+00 0.000000000e+00 0.000000000e+00 1.0e+00 0.02
1 5.5e+00 2.5e-01 5.0e-01 1.00e+00 0.000000000e+00 0.000000000e+00 2.5e-01 0.03
2 1.6e+00 7.2e-02 2.7e-01 1.00e+00 0.000000000e+00 0.000000000e+00 7.2e-02 0.03
3 6.3e-01 2.9e-02 1.7e-01 1.00e+00 0.000000000e+00 0.000000000e+00 2.9e-02 0.03
4 7.9e-02 3.6e-03 6.0e-02 1.00e+00 0.000000000e+00 0.000000000e+00 3.6e-03 0.04
5 4.3e-04 2.0e-05 4.4e-03 1.00e+00 0.000000000e+00 0.000000000e+00 2.0e-05 0.04
6 4.7e-11 2.1e-12 2.1e-12 1.00e+00 0.000000000e+00 0.000000000e+00 2.1e-12 0.04
Optimizer terminated. Time: 0.16
Interior-point solution summary
Problem status : PRIMAL_AND_DUAL_FEASIBLE
Solution status : OPTIMAL
Primal. obj: 0.0000000000e+00 nrm: 5e-10 Viol. con: 1e-10 barvar: 9e-20
Dual. obj: 0.0000000000e+00 nrm: 2e+00 Viol. con: 0e+00 barvar: 2e-12
Optimizer summary
Optimizer - time: 0.16
Interior-point - iterations : 6 time: 0.04
Basis identification - time: 0.00
Primal - iterations : 0 time: 0.00
Dual - iterations : 0 time: 0.00
Clean primal - iterations : 0 time: 0.00
Clean dual - iterations : 0 time: 0.00
Simplex - time: 0.00
Primal simplex - iterations : 0 time: 0.00
Dual simplex - iterations : 0 time: 0.00
Mixed integer - relaxations: 0 time: 0.00
sol =
struct with fields:
yalmiptime: 0.2529
solvertime: 0.1738
info: 'Successfully solved (MOSEK)'
problem: 0
sol
check(Constraints)
P = value(P);
R = value(R);
V_sym = Pib'*P*Pib;
% dV_sym = tPia'*R*tPia;
dV_sym = jacobian(V_sym,x)*f_sym;
V = matlabFunction(V_sym);
dV = matlabFunction(dV_sym);
xmin = min(X_v(:,1));
xmax = max(X_v(:,1));
ymin = min(X_v(:,2));
ymax = max(X_v(:,2));
res = 100;
xres = round((xmax - xmin) * res);
yres = round((ymax - ymin) * res);
[xx1,xx2] = meshgrid(linspace(xmin,xmax,xres), linspace(ymin,ymax,yres));
V_num = V(xx1,xx2);
dV_num = dV(xx1,xx2);
figure('Position', [ 276 433 1331 416 ], 'Color', [1 1 1]),
subplot(121), hold on
surf(xx1,xx2,V_num), shading interp; light
contour(xx1,xx2,V_num)
view([ -37.5 , 30 ])
subplot(122),
surf(xx1,xx2,dV_num), shading interp; light
sol =
struct with fields:
yalmiptime: 0.2529
solvertime: 0.1738
info: 'Successfully solved (MOSEK)'
problem: 0
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| ID| Constraint| Primal residual| Dual residual|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| #1| Matrix inequality| 0.37842| 9.5991e-13|
| #2| Matrix inequality| 0.048157| 6.861e-13|
| #3| Matrix inequality| 0.45156| 8.3305e-13|
| #4| Matrix inequality| 0.039812| 5.371e-13|
| #5| Matrix inequality| 0.26263| 8.1209e-13|
| #6| Matrix inequality| 0.0075104| 7.7204e-13|
| #7| Matrix inequality| 0.27416| 7.4719e-13|
| #8| Matrix inequality| 0.036734| 5.0074e-13|
| #9| Matrix inequality| 0.36922| 7.5827e-13|
| #10| Matrix inequality| 0.039496| 7.0519e-13|
| #11| Matrix inequality| 0.49103| 8.2538e-13|
| #12| Matrix inequality| 0.025742| 3.4772e-13|
| #13| Matrix inequality| 0.32599| 7.7018e-13|
| #14| Matrix inequality| 0.008136| 6.8466e-13|
| #15| Matrix inequality| 0.32249| 8.2947e-13|
| #16| Matrix inequality| 0.042676| 6.4787e-13|
| #17| Matrix inequality| 0.35255| 9.0568e-13|
| #18| Matrix inequality| 0.051868| 7.4551e-13|
| #19| Matrix inequality| 0.3156| 7.717e-13|
| #20| Matrix inequality| 0.036537| 7.4291e-13|
| #21| Matrix inequality| 0.41808| 9.0507e-13|
| #22| Matrix inequality| 0.053264| 6.3829e-13|
| #23| Matrix inequality| 0.29657| 7.6783e-13|
| #24| Matrix inequality| 0.02242| 6.7639e-13|
| #25| Matrix inequality| 0.4283| 7.8694e-13|
| #26| Matrix inequality| 0.028204| -8.8674e-20|
| #27| Matrix inequality| 0.4083| 9.0221e-13|
| #28| Matrix inequality| 0.026841| 9.3425e-13|
| #29| Matrix inequality| 0.3308| 8.7891e-13|
| #30| Matrix inequality| 0.042479| 7.2418e-13|
| #31| Matrix inequality| 0.27983| 7.7432e-13|
| #32| Matrix inequality| 0.012526| 5.0385e-13|
| #33| Matrix inequality| 0.23843| 7.8881e-13|
| #34| Matrix inequality| 0.012151| 4.0557e-13|
| #35| Matrix inequality| 0.31962| 7.3682e-13|
| #36| Matrix inequality| 0.044969| 2.9032e-13|
| #37| Matrix inequality| 0.29272| 7.3548e-13|
| #38| Matrix inequality| 0.023739| 6.1944e-13|
| #39| Matrix inequality| 0.46878| 7.9055e-13|
| #40| Matrix inequality| 0.077407| 8.2064e-13|
| #41| Matrix inequality| 0.42751| 7.8493e-13|
| #42| Matrix inequality| 0.055244| 8.2772e-13|
| #43| Matrix inequality| 0.3679| 7.8819e-13|
| #44| Matrix inequality| 0.060539| 7.602e-13|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
figure('Position', [ 276 433 1331 416 ], 'Color', [1 1 1]),
V_num(inpolygon(xx1,xx2,xv,yv) == 0) = NaN;
dV_num(inpolygon(xx1,xx2,xv,yv) == 0) = NaN;
subplot(121), hold on
surf(xx1,xx2,V_num), shading interp; light
contour(xx1,xx2,V_num)
view([ -37.5 , 30 ])
subplot(122),
surf(xx1,xx2,dV_num), shading interp; light