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]
Pia_A_sym = P_kiemel(Pia,x)
Pia_lfr = P_LFR_reduction_v6(sym2lfr(Pia_A_sym),x);
H = [ Pia_lfr.A Pia_lfr.B ]
tPia = Pia_lfr.Pib
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
Pia_A_sym =
[ 1, 0]
[ 0, 1]
[ x1*x2, 0]
[ x2, 0]
[ x1^3*x2 + x1^2 - x1*x2 - 2*x2^2, 0]
[ x2*x1^2 + x1 - x2, -x2]
H =
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 -1 1 0 1 0 0 2 0
0 0 0 0 1 0 1 -1 0 1
tPia =
x1
x2
x1^2*x2
x1^4*x2
x1^3*x2
x1^3
x1^2
x1*x2
-x1*x2^2
-x2^2
Nb_sym = P_annihilator_linsolve_v6(Pib,x)
Na_sym = P_annihilator_linsolve_v6(tPia,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, 0, 0, 0, 0, 0, -1, 0, 0, 0] [ x2, 0, 0, 0, 0, 0, 0, -1, 0, 0] [ 0, x1, 0, 0, 0, 0, 0, -1, 0, 0] [ 0, x2, 0, 0, 0, 0, 0, 0, 0, 1] [ 0, 0, 1, 0, 0, 0, 0, -x1, 0, 0] [ 0, 0, x1, 0, 0, -x2, 0, 0, 0, 0] [ 0, 0, x2, 0, 0, 0, 0, 0, x1, 0] [ 0, 0, 0, 1, -x1, 0, 0, 0, 0, 0] [ 0, 0, 0, 0, 1, -x2, 0, 0, 0, 0] [ 0, 0, 0, 0, 0, 1, -x1, 0, 0, 0] [ 0, 0, 0, 0, 0, 0, x2, -x1, 0, 0] [ 0, 0, 0, 0, 0, 0, 0, x2, 0, x1] [ 0, 0, 0, 0, 0, 0, 0, 0, 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 = H' * (Pa' + Pa) * H;
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 : 152
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 : 152
Cones : 0
Scalar variables : 0
Matrix variables : 44
Integer variables : 0
Optimizer - threads : 4
Optimizer - solved problem : the primal
Optimizer - Constraints : 152
Optimizer - Cones : 0
Optimizer - Scalar variables : 0 conic : 0
Optimizer - Semi-definite variables: 44 scalarized : 1430
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 : 1.01e+04 after factor : 1.01e+04
Factor - dense dim. : 0 flops : 2.99e+06
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.01
1 3.7e+00 1.7e-01 4.0e-01 1.00e+00 0.000000000e+00 0.000000000e+00 1.7e-01 0.04
2 7.0e-01 3.2e-02 1.8e-01 1.00e+00 0.000000000e+00 0.000000000e+00 3.2e-02 0.05
3 3.2e-02 1.4e-03 3.7e-02 1.00e+00 0.000000000e+00 0.000000000e+00 1.4e-03 0.06
4 2.0e-06 9.0e-08 2.9e-04 1.00e+00 0.000000000e+00 0.000000000e+00 9.0e-08 0.07
5 2.1e-12 9.6e-14 9.4e-14 1.00e+00 0.000000000e+00 0.000000000e+00 9.4e-14 0.08
Optimizer terminated. Time: 0.19
Interior-point solution summary
Problem status : PRIMAL_AND_DUAL_FEASIBLE
Solution status : OPTIMAL
Primal. obj: 0.0000000000e+00 nrm: 2e-11 Viol. con: 6e-12 barvar: 0e+00
Dual. obj: 0.0000000000e+00 nrm: 2e+00 Viol. con: 0e+00 barvar: 1e-13
Optimizer summary
Optimizer - time: 0.19
Interior-point - iterations : 5 time: 0.08
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.3387
solvertime: 0.2033
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.3387
solvertime: 0.2033
info: 'Successfully solved (MOSEK)'
problem: 0
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| ID| Constraint| Primal residual| Dual residual|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| #1| Matrix inequality| 0.44015| 1.9578e-14|
| #2| Matrix inequality| 0.072979| 1.6942e-14|
| #3| Matrix inequality| 0.55009| 1.6896e-14|
| #4| Matrix inequality| 0.13522| 1.3339e-14|
| #5| Matrix inequality| 0.332| 8.8256e-15|
| #6| Matrix inequality| 0.021842| 1.0614e-14|
| #7| Matrix inequality| 0.33555| 8.0214e-15|
| #8| Matrix inequality| 0.030098| 1.1553e-14|
| #9| Matrix inequality| 0.42532| 6.5821e-15|
| #10| Matrix inequality| 0.078285| 1.2779e-14|
| #11| Matrix inequality| 0.57217| 7.0473e-15|
| #12| Matrix inequality| 0.11565| 1.077e-14|
| #13| Matrix inequality| 0.39507| 1.3622e-14|
| #14| Matrix inequality| 0.034383| 9.7487e-15|
| #15| Matrix inequality| 0.38119| 1.638e-14|
| #16| Matrix inequality| 0.030096| 1.3266e-14|
| #17| Matrix inequality| 0.40875| 1.7985e-14|
| #18| Matrix inequality| 0.044486| 1.6769e-14|
| #19| Matrix inequality| 0.38051| 1.4766e-14|
| #20| Matrix inequality| 0.071962| 1.0628e-14|
| #21| Matrix inequality| 0.49314| 1.8673e-14|
| #22| Matrix inequality| 0.13396| 1.5077e-14|
| #23| Matrix inequality| 0.36393| 1.473e-14|
| #24| Matrix inequality| 0.054104| 1.0389e-14|
| #25| Matrix inequality| 0.49148| 6.5182e-15|
| #26| Matrix inequality| 0.12377| 1.2858e-14|
| #27| Matrix inequality| 0.48355| 1.894e-14|
| #28| Matrix inequality| 0.11603| 1.4469e-14|
| #29| Matrix inequality| 0.38771| 1.7573e-14|
| #30| Matrix inequality| 0.022603| 1.4861e-14|
| #31| Matrix inequality| 0.34639| 1.521e-14|
| #32| Matrix inequality| 0.020188| 1.1532e-14|
| #33| Matrix inequality| 0.30716| 8.2921e-15|
| #34| Matrix inequality| 0.024224| 1.0083e-14|
| #35| Matrix inequality| 0.37521| 7.3749e-15|
| #36| Matrix inequality| 0.047215| 1.2066e-14|
| #37| Matrix inequality| 0.34966| 7.1193e-15|
| #38| Matrix inequality| 0.012399| 5.6006e-23|
| #39| Matrix inequality| 0.52729| 1.1714e-14|
| #40| Matrix inequality| 0.065655| 1.0137e-14|
| #41| Matrix inequality| 0.48931| 1.2216e-14|
| #42| Matrix inequality| 0.046868| 9.252e-15|
| #43| Matrix inequality| 0.42941| 1.0083e-14|
| #44| Matrix inequality| 0.046219| 1.0911e-14|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
Eddig volt: 344
nr_Variables = ...
m*(m+1)/2 + ... P
numel(Lb) + numel(La)
nr_Variables = 152