-
Notifications
You must be signed in to change notification settings - Fork 0
/
example_infeasibility.m
50 lines (43 loc) · 1.02 KB
/
example_infeasibility.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
clc; clear; close all;
restoredefaultpath;
addpath(genpath('../SOSTOOLS'))
addpath(genpath('../../../mosek'))
x = mpvar('x',2,1); % dummy x
h = [x'*x - 1];
g = [3*x(2)-x(1)^3-2;
x(1)-8*x(2)^3];
g = [g; g(1)*g(2)];
prog = sosprogram(x);
kappa = 6;
lhs = 0;
lams = {};
for i = 1:length(h)
hi = h(i);
deg_hi = hi.maxdeg;
deg_lam = 2*kappa - deg_hi;
[prog,lam] = sospolyvar(prog,monomials(x,0:deg_lam));
lhs = lhs + lam*hi;
lams{end+1} = lam;
end
sigs = {};
for i = 1:length(g)
gi = g(i);
deg_gi = gi.maxdeg;
if deg_gi <= 2*kappa
deg_sig = floor((2*kappa - deg_gi)/2);
[prog,sig] = sossosvar(prog,monomials(x,0:deg_sig));
lhs = lhs + sig*gi;
sigs{end+1} = sig;
end
end
prog = soseq(prog,lhs+1);
options.solver = 'mosek';
prog = sossolve(prog,options);
lams_val = {};
for i = 1:length(lams)
lams_val{end+1} = cleanpoly(sosgetsol(prog,lams{i}),1e-6);
end
sigs_val = {};
for i = 1:length(sigs)
sigs_val{end+1} = cleanpoly(sosgetsol(prog,sigs{i}),1e-6);
end