[37] | 1 | function regress_sos |
---|
| 2 | |
---|
| 3 | ops1 = sdpsettings('solver','sdpt3','sos.cong',0,'sos.model',1,'verbose',0); |
---|
| 4 | ops2 = sdpsettings('solver','sdpt3','sos.cong',1,'sos.model',2,'verbose',0); |
---|
| 5 | ops3 = sdpsettings('solver','sdpt3','sos.cong',0,'sos.newton',0,'verbose',0,'sos.extlp',0); |
---|
| 6 | |
---|
| 7 | if 1 |
---|
| 8 | sdpvar x s t; |
---|
| 9 | F = set(sos(1+x+(1-s)*x^2-s))+set(sos(2+2*x+x^4-8*t))+set(s>0.49)+set(s+t<0.55); |
---|
| 10 | obj= -s-t; |
---|
| 11 | |
---|
| 12 | fail = regresstest(F,obj,ops1); |
---|
| 13 | regressreport('Test 1',fail) |
---|
| 14 | fail = regresstest(F,obj,ops2); |
---|
| 15 | regressreport('Test 2',fail) |
---|
| 16 | fail = regresstest(F,obj,ops3); |
---|
| 17 | regressreport('Test 3',fail) |
---|
| 18 | |
---|
| 19 | |
---|
| 20 | % Disjoint variables |
---|
| 21 | x = sdpvar(1,1); |
---|
| 22 | y = sdpvar(1,1); |
---|
| 23 | t = sdpvar(1,1); |
---|
| 24 | F = set(sos(1+y^2-t))+set(sos(1+x^2-t)); |
---|
| 25 | obj = -t; |
---|
| 26 | fail = regresstest(F,obj,ops1); |
---|
| 27 | regressreport('Test 4',fail) |
---|
| 28 | fail = regresstest(F,obj,ops2); |
---|
| 29 | regressreport('Test 5',fail) |
---|
| 30 | fail = regresstest(F,obj,ops3); |
---|
| 31 | regressreport('Test 6',fail) |
---|
| 32 | |
---|
| 33 | % Disjoint variables and parameters |
---|
| 34 | x = sdpvar(1,1); |
---|
| 35 | y = sdpvar(1,1); |
---|
| 36 | t = sdpvar(1,1); |
---|
| 37 | s = sdpvar(1,1); |
---|
| 38 | F = set(sos(1+y^2-t))+set(sos(1+x^2-s)); |
---|
| 39 | obj = -s-t; |
---|
| 40 | fail = regresstest(F,obj,ops1); |
---|
| 41 | regressreport('Test 7',fail) |
---|
| 42 | fail = regresstest(F,obj,ops2); |
---|
| 43 | regressreport('Test 8',fail) |
---|
| 44 | fail = regresstest(F,obj,ops3); |
---|
| 45 | regressreport('Test 9',fail) |
---|
| 46 | |
---|
| 47 | |
---|
| 48 | % Disjoint variables and parameters |
---|
| 49 | x = sdpvar(1,1); |
---|
| 50 | y = sdpvar(1,1); |
---|
| 51 | t = sdpvar(1,1); |
---|
| 52 | s = sdpvar(1,1); |
---|
| 53 | F = set(sos(1+y^2-t))+set(sos(1+x^2-s))+set(t>0); |
---|
| 54 | obj = -s-t; |
---|
| 55 | fail = regresstest(F,obj,ops1); |
---|
| 56 | regressreport('Test 10',fail) |
---|
| 57 | fail = regresstest(F,obj,ops2); |
---|
| 58 | regressreport('Test 11',fail) |
---|
| 59 | fail = regresstest(F,obj,ops3); |
---|
| 60 | regressreport('Test 12',fail) |
---|
| 61 | |
---|
| 62 | % Disjoint variables and parameters |
---|
| 63 | x = sdpvar(1,1); |
---|
| 64 | y = sdpvar(1,1); |
---|
| 65 | t = sdpvar(1,1); |
---|
| 66 | s = sdpvar(1,1); |
---|
| 67 | F = set(sos(1+y^2-t))+set(sos(1+x^2-s))+set(t>0)+set(s>0); |
---|
| 68 | obj = -s-t; |
---|
| 69 | fail = regresstest(F,obj,ops1); |
---|
| 70 | regressreport('Test 13',fail) |
---|
| 71 | fail = regresstest(F,obj,ops2); |
---|
| 72 | regressreport('Test 14',fail) |
---|
| 73 | fail = regresstest(F,obj,ops3); |
---|
| 74 | regressreport('Test 15',fail) |
---|
| 75 | |
---|
| 76 | x = sdpvar(1,1); |
---|
| 77 | y = sdpvar(1,1); |
---|
| 78 | t = sdpvar(1,1); |
---|
| 79 | s = sdpvar(1,1); |
---|
| 80 | F = set(sos(1+y^2-t))+set(sos(1+x^2-s))+set(t>0)+set(s>0.5); |
---|
| 81 | obj = -s-t; |
---|
| 82 | fail = regresstest(F,obj,ops1); |
---|
| 83 | regressreport('Test 16',fail) |
---|
| 84 | fail = regresstest(F,obj,ops2); |
---|
| 85 | regressreport('Test 17',fail) |
---|
| 86 | fail = regresstest(F,obj,ops3); |
---|
| 87 | regressreport('Test 18',fail) |
---|
| 88 | |
---|
| 89 | x = sdpvar(1,1); |
---|
| 90 | y = sdpvar(1,1); |
---|
| 91 | t = sdpvar(1,1); |
---|
| 92 | s = sdpvar(1,1); |
---|
| 93 | F = set(sos(1+y^2-t-s))+set(sos(1+x^2-s))+set(t>0)+set(s>-0.5); |
---|
| 94 | obj = -s-t; |
---|
| 95 | fail = regresstest(F,obj,ops1); |
---|
| 96 | regressreport('Test 19',fail) |
---|
| 97 | fail = regresstest(F,obj,ops2); |
---|
| 98 | regressreport('Test 20',fail) |
---|
| 99 | fail = regresstest(F,obj,ops3); |
---|
| 100 | regressreport('Test 21',fail) |
---|
| 101 | |
---|
| 102 | |
---|
| 103 | x = sdpvar(1,1); |
---|
| 104 | y = sdpvar(1,1); |
---|
| 105 | t = sdpvar(1,1); |
---|
| 106 | s = sdpvar(1,1); |
---|
| 107 | F = set(sos(1+y^2-t-s))+set(sos(1+x^2-s))+set(t>0)+set(s>-0.5)+set(s>0); |
---|
| 108 | obj = -s-t; |
---|
| 109 | fail = regresstest(F,obj,ops1); |
---|
| 110 | regressreport('Test 19',fail) |
---|
| 111 | fail = regresstest(F,obj,ops2); |
---|
| 112 | regressreport('Test 20',fail) |
---|
| 113 | fail = regresstest(F,obj,ops3); |
---|
| 114 | regressreport('Test 21',fail) |
---|
| 115 | |
---|
| 116 | x = sdpvar(1,1); |
---|
| 117 | y = sdpvar(1,1); |
---|
| 118 | t = sdpvar(1,1); |
---|
| 119 | s = sdpvar(1,1); |
---|
| 120 | F = set(sos(t*x^4+s*y^2-t))+set(sos(1+x^2-s)); |
---|
| 121 | obj = -t; |
---|
| 122 | fail = regresstest(F,obj,ops1,[s t]); |
---|
| 123 | regressreport('Test 22',fail) |
---|
| 124 | fail = regresstest(F,obj,ops2,[s t]); |
---|
| 125 | regressreport('Test 23',fail) |
---|
| 126 | fail = regresstest(F,obj,ops3,[s t]); |
---|
| 127 | regressreport('Test 24',fail) |
---|
| 128 | |
---|
| 129 | x = sdpvar(1,1); |
---|
| 130 | y = sdpvar(1,1); |
---|
| 131 | t = sdpvar(1,1); |
---|
| 132 | s = sdpvar(1,1); |
---|
| 133 | sdpvar u |
---|
| 134 | F = set(sos(t*x^4+s*y^2-t))+set(sos(1+x^2-s)); |
---|
| 135 | obj = -t; |
---|
| 136 | fail = regresstest(F,obj,ops1,[s t u]); |
---|
| 137 | regressreport('Test 25',fail) |
---|
| 138 | fail = regresstest(F,obj,ops2,[s t u]); |
---|
| 139 | regressreport('Test 26',fail) |
---|
| 140 | fail = regresstest(F,obj,ops3,[s t u]); |
---|
| 141 | regressreport('Test 27',fail) |
---|
| 142 | |
---|
| 143 | |
---|
| 144 | x = sdpvar(1,1); |
---|
| 145 | y = sdpvar(1,1); |
---|
| 146 | z = sdpvar(1,1); |
---|
| 147 | t = sdpvar(1,1); |
---|
| 148 | s = sdpvar(1,1); |
---|
| 149 | w = sdpvar(1,1); |
---|
| 150 | F = set(sos(x^4+z^6))+set(sos(x^2+(t+s+w-6)*x*z)) + set([w;s]>0)+set(t>3); |
---|
| 151 | obj = w; |
---|
| 152 | fail = regresstest(F,obj,ops1,t+s+w); |
---|
| 153 | regressreport('Test 28',fail) |
---|
| 154 | fail = regresstest(F,obj,ops2,t+s+w); |
---|
| 155 | regressreport('Test 29',fail) |
---|
| 156 | fail = regresstest(F,obj,ops3,t+s+w); |
---|
| 157 | regressreport('Test 30',fail) |
---|
| 158 | |
---|
| 159 | sdpvar x s t u |
---|
| 160 | F = set(sos(1+x+16*s*x^2+13*u+t))+set(sos(2+2*x+(-8+u)*x^4+5-pi*t))+set(t>0)+set(t+u>0); |
---|
| 161 | obj = t; |
---|
| 162 | fail = regresstest(F,obj,ops1,t+s+u); |
---|
| 163 | regressreport('Test 31',fail) |
---|
| 164 | fail = regresstest(F,obj,ops2,t+s+u); |
---|
| 165 | regressreport('Test 32',fail) |
---|
| 166 | fail = regresstest(F,obj,ops3,t+s+u); |
---|
| 167 | regressreport('Test 33',fail) |
---|
| 168 | |
---|
| 169 | sdpvar x s t u |
---|
| 170 | F = set(sos(1+x+16*s*x^2+13*u+t))+set(sos(2+2*x+(-8+u)*x^4+5-pi*t))+set(t>0)+set(t+u>0); |
---|
| 171 | obj = t; |
---|
| 172 | fail = regresstest(F,obj,ops1,t+s+u); |
---|
| 173 | regressreport('Test 34',fail) |
---|
| 174 | fail = regresstest(F,obj,ops2,t+s+u); |
---|
| 175 | regressreport('Test 35',fail) |
---|
| 176 | fail = regresstest(F,obj,ops3,t+s+u); |
---|
| 177 | regressreport('Test 36',fail) |
---|
| 178 | |
---|
| 179 | sdpvar x s t u |
---|
| 180 | F = set(sos(1+x+16*s*x^2+13*u+t))+set(sos(2+2*x+(-8+u)*x^4+5-pi*t))+set(t>0)+set(t+u>0); |
---|
| 181 | obj = s; |
---|
| 182 | fail = regresstest(F,obj,ops1,t+s+u); |
---|
| 183 | regressreport('Test 37',fail) |
---|
| 184 | fail = regresstest(F,obj,ops2,t+s+u); |
---|
| 185 | regressreport('Test 38',fail) |
---|
| 186 | fail = regresstest(F,obj,ops3,t+s+u); |
---|
| 187 | regressreport('Test 39',fail) |
---|
| 188 | |
---|
| 189 | sdpvar x s u |
---|
| 190 | F = set(sos(x+(t-100)*x^2+4*s-2+u))+set(s>0) + set(s<3) + set(u<4) + set(u>3) + set(t<102)+set(t>101.8)+set(t>0); |
---|
| 191 | obj = -s-t; |
---|
| 192 | fail = regresstest(F,obj,ops1,t+s+u); |
---|
| 193 | regressreport('Test 40',fail) |
---|
| 194 | fail = regresstest(F,obj,ops2,t+s+u); |
---|
| 195 | regressreport('Test 41',fail) |
---|
| 196 | fail = regresstest(F,obj,ops3,t+s+u); |
---|
| 197 | regressreport('Test 42',fail) |
---|
| 198 | |
---|
| 199 | |
---|
| 200 | sdpvar x s t u |
---|
| 201 | F = set(sos(1+x+s*x^2))+set(sos(2+2*s*x+u*x^4)); |
---|
| 202 | obj = s; |
---|
| 203 | fail = regresstest(F,obj,ops1,t+s+u); |
---|
| 204 | regressreport('Test 43',fail) |
---|
| 205 | fail = regresstest(F,obj,ops2,t+s+u); |
---|
| 206 | regressreport('Test 44',fail) |
---|
| 207 | fail = regresstest(F,obj,ops3,t+s+u); |
---|
| 208 | regressreport('Test 45',fail) |
---|
| 209 | |
---|
| 210 | end |
---|
| 211 | sdpvar x y a b c |
---|
| 212 | V = x^2*a+b*y^2+x*y+3; |
---|
| 213 | F=set(sos(V))+set([a-4 b c]); |
---|
| 214 | obj=a; |
---|
| 215 | fail = regresstest(F,obj,ops1,a+b+c); |
---|
| 216 | regressreport('Test 46',fail) |
---|
| 217 | fail = regresstest(F,obj,ops2,a+b+c); |
---|
| 218 | regressreport('Test 47',fail) |
---|
| 219 | fail = regresstest(F,obj,ops3,a+b+c); |
---|
| 220 | regressreport('Test 48',fail) |
---|
| 221 | |
---|
| 222 | |
---|
| 223 | sdpvar x s t |
---|
| 224 | F = set(sos(x^4+(s+t-2)*x^3+s+t)); |
---|
| 225 | obj = max(s,t); |
---|
| 226 | fail = regresstest(F,obj,ops1,s+t); |
---|
| 227 | regressreport('Test 49',fail) |
---|
| 228 | fail = regresstest(F,obj,ops2,s+t); |
---|
| 229 | regressreport('Test 50',fail) |
---|
| 230 | fail = regresstest(F,obj,ops3,s+t); |
---|
| 231 | regressreport('Test 51',fail) |
---|
| 232 | |
---|
| 233 | |
---|
| 234 | % Markus tentacles problem |
---|
| 235 | sdpvar x y a |
---|
| 236 | f = x^4 * y^2 + x^2 * y^4 - 3 * x^2 * y^2 + 1, k = 0; |
---|
| 237 | df = jacobian(f, [x y]); |
---|
| 238 | g = 1 - (df(1)^2 + df(2)^2) * (x^2 + y^2); |
---|
| 239 | if k >= 0 |
---|
| 240 | v = monolist([x; y], 2*k); |
---|
| 241 | coeffVec = sdpvar(length(v), 1); |
---|
| 242 | t = coeffVec' * v; |
---|
| 243 | constraints = set(sos(f - a - t * g)) + set(sos(t)); |
---|
| 244 | else |
---|
| 245 | coeffVec = []; |
---|
| 246 | constraints = set(sos(f - a)); |
---|
| 247 | end |
---|
| 248 | F = constraints; |
---|
| 249 | obj = -a; |
---|
| 250 | fail = regresstest(F,obj,ops1,[a; coeffVec]); |
---|
| 251 | regressreport('Test 52',fail) |
---|
| 252 | fail = regresstest(F,obj,ops2,[a; coeffVec]); |
---|
| 253 | regressreport('Test 53',fail) |
---|
| 254 | fail = regresstest(F,obj,ops3,[a; coeffVec]); |
---|
| 255 | regressreport('Test 54',fail) |
---|
| 256 | |
---|
| 257 | |
---|
| 258 | |
---|
| 259 | |
---|
| 260 | return |
---|
| 261 | |
---|
| 262 | |
---|
| 263 | |
---|
| 264 | F = set(sos(x^4+z^6))+set(sos(x^2+(t+s+w-6)*x*z)) + set([w;s]>0)+set(t>3); |
---|
| 265 | solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.model',1,'solver','sedumi'),s+t+w) |
---|
| 266 | double([s t w]) |
---|
| 267 | solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.model',0,'solver','sedumi'),s+t+w) |
---|
| 268 | double([s t w]) |
---|
| 269 | |
---|
| 270 | % Automatic detection of non-negative cones |
---|
| 271 | sdpvar x s t u |
---|
| 272 | F = set(sos(1+x+16*x^2+1)); |
---|
| 273 | solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.solvedual',0,'solver','sedumi')) |
---|
| 274 | |
---|
| 275 | |
---|
| 276 | % Failure before since no free |
---|
| 277 | sdpvar x s t u |
---|
| 278 | F = set(sos(x+(t-100)*x^2+4*s-2+u))+set(s>0) + set(s<3) + set(u<4) + set(u>3) + set(t<102)+set(t>101.8)+set(t>0); |
---|
| 279 | solvesos(F,-s-t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t) |
---|
| 280 | double([s t]) |
---|
| 281 | |
---|
| 282 | % Mixed constraint, all free |
---|
| 283 | sdpvar x s t |
---|
| 284 | F = set(sos(x+(t-100)*x^2+4*s-2))+set(s>1) + set(s<3) + set(t<102)+set(t>101.8)+set(2*s+t>104); |
---|
| 285 | solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t) |
---|
| 286 | double([s t]) |
---|
| 287 | |
---|
| 288 | % Mixed constraint, one free |
---|
| 289 | sdpvar x s t |
---|
| 290 | F = set(sos(x+(t-100)*x^2+4*s-2))+set(s>1) + set(s>0) + set(s<3) + set(t<102)+set(t>101.8)+set(2*s+t>104); |
---|
| 291 | solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t) |
---|
| 292 | double([s t]) |
---|
| 293 | |
---|
| 294 | |
---|
| 295 | % Mixed constraint, all free |
---|
| 296 | sdpvar x s t |
---|
| 297 | F = set(sos(x+(t-100)*x^2+4*s-2))+set(s>1) + set(t>0) + set(s<3) + set(t<102)+set(t>101.8)+set(2*s+t>104); |
---|
| 298 | solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t) |
---|
| 299 | double([s t]) |
---|
| 300 | |
---|
| 301 | |
---|
| 302 | |
---|
| 303 | % Mixed constraint, all free |
---|
| 304 | sdpvar x s t |
---|
| 305 | F = set(sos(x+(t-100)*x^2+4*s-2))+set(1.001*s>1) + set(1.001*t>1) + set(s<3) + set(t<102)+set(1.01*t>101.8)+set(2*s+t>104); |
---|
| 306 | solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t) |
---|
| 307 | double([s t]) |
---|
| 308 | |
---|
| 309 | |
---|
| 310 | % Mixed constraint, negative variables |
---|
| 311 | sdpvar x s u t |
---|
| 312 | F = set(sos(x+(t-100)*x^2+pi*s+6+u)) + set(t>1) + set(-12.34567<s<-1) + set(t<102)+set(t>101.8); |
---|
| 313 | solvesos(F,s+t+u,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t+u) |
---|
| 314 | double([s t u]) |
---|
| 315 | |
---|
| 316 | % Mixed constraint, all free |
---|
| 317 | sdpvar x s t u |
---|
| 318 | F = set(sos(x+t*x^2+s+u)) + set(t>1.2) + set(s+t==4) + set(u<0.01) + set(u+t==0.1) |
---|
| 319 | solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t+u) |
---|
| 320 | double([s t u]) |
---|
| 321 | |
---|
| 322 | |
---|
| 323 | % Mixed constraint, all constrained |
---|
| 324 | sdpvar x s t u |
---|
| 325 | F = set(sos(x+t*x^2+s+u)) + +set(u>0) + set(t==9) + set(s+t==11) + set(u==0.01) |
---|
| 326 | solvesos(F,s+t,sdpsettings('sos.traceobj',0,'sos.solvedual',1),s+t+u) |
---|
| 327 | double([s t u]) |
---|
| 328 | |
---|
| 329 | % |
---|
| 330 | % |
---|
| 331 | % % Failure : t is not used |
---|
| 332 | sdpvar x s t u |
---|
| 333 | F = set(sos(1+x+s*x^2))+set(sos(2+2*s*x+u*x^4)); |
---|
| 334 | solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.solvedual',1,'solver','sedumi'),s+t+u) |
---|
| 335 | double([s t u]) |
---|
| 336 | |
---|
| 337 | |
---|
| 338 | |
---|
| 339 | |
---|
| 340 | |
---|
| 341 | % Automatic detection of diagional constraints |
---|
| 342 | sdpvar x s t u |
---|
| 343 | F = set(sos(s+x+x^2))+set(sos(s+2*s*x+u*x^4)); |
---|
| 344 | solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.solvedual',1,'solver','sedumi'),s+u) |
---|
| 345 | double([s t u]) |
---|
| 346 | |
---|
| 347 | |
---|
| 348 | |
---|
| 349 | % Automatic detection of diagional constraints |
---|
| 350 | sdpvar x s t u |
---|
| 351 | F = set(sos(1+x^2+x^4)); |
---|
| 352 | solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.solvedual',1,'solver','sedumi')) |
---|
| 353 | double([s t u]) |
---|
| 354 | |
---|
| 355 | |
---|
| 356 | % Automatic detection of diagional constraints |
---|
| 357 | sdpvar x y s t u |
---|
| 358 | F = set(sos(1+x^2+x^4+x^2*y^2+y^4))+set(sos((7-t)*y^8+y^12)); |
---|
| 359 | solvesos(F,[],sdpsettings('sos.traceobj',1,'sos.solvedual',1,'solver','sedumi'),t) |
---|
| 360 | double([s t u]) |
---|
| 361 | |
---|
| 362 | |
---|
| 363 | x = sdpvar(1,1); |
---|
| 364 | y = sdpvar(1,1); |
---|
| 365 | z = sdpvar(1,1); |
---|
| 366 | p = x^4*y^2+x^2*y^4+z^6-3*x*x*y*y*z*z; |
---|
| 367 | solvesos(set(sos(p))) |
---|
| 368 | solvesos(set(sos(p)),[],sdpsettings('sos.model',2)) |
---|
| 369 | |
---|
| 370 | % PP, p 41 |
---|
| 371 | x = sdpvar(1,1); |
---|
| 372 | y = sdpvar(1,1); |
---|
| 373 | z = sdpvar(1,1); |
---|
| 374 | p = 2*x^4+2*x^3*y-x^2*y^2+5*y^4; |
---|
| 375 | solvesos(set(sos(p))) |
---|
| 376 | solvesos(set(sos(p)),[],sdpsettings('sos.model',2)) |
---|
| 377 | |
---|
| 378 | % PP, p 42 |
---|
| 379 | x = sdpvar(1,1); |
---|
| 380 | y = sdpvar(1,1); |
---|
| 381 | z = sdpvar(1,1); |
---|
| 382 | p = x^4-(2*y*z+1)*x^2+(y^2*z^2+2*y*z+2) |
---|
| 383 | solvesos(set(sos(p))) |
---|
| 384 | solvesos(set(sos(p)),[],sdpsettings('sos.model',2)) |
---|
| 385 | |
---|
| 386 | |
---|
| 387 | % PP, p 43 |
---|
| 388 | x = sdpvar(1,1); |
---|
| 389 | y = sdpvar(1,1); |
---|
| 390 | z = sdpvar(1,1); |
---|
| 391 | p = x^4+x^2+z^6-3*x*x*z*z; |
---|
| 392 | solvesos(set(sos(p))) |
---|
| 393 | solvesos(set(sos(p)),[],sdpsettings('sos.model',2)) |
---|
| 394 | |
---|
| 395 | x = sdpvar(1,1); |
---|
| 396 | y = sdpvar(1,1); |
---|
| 397 | z = sdpvar(1,1); |
---|
| 398 | p = x^2+y^2+x^4+z^6+(x*x-y^3+z*z*y)^2 |
---|
| 399 | solvesos(set(sos(p))) |
---|
| 400 | solvesos(set(sos(p)),[],sdpsettings('sos.model',2)) |
---|
| 401 | |
---|
| 402 | |
---|
| 403 | % robinson |
---|
| 404 | x = sdpvar(1,1); |
---|
| 405 | y = sdpvar(1,1); |
---|
| 406 | p = x^6+y^6-x^4*y^2-y^4*x^2-x^4-y^4-x^2-y^2+3*x^2*y^2+10 |
---|
| 407 | solvesos(set(sos(p))) |
---|
| 408 | solvesos(set(sos(p)),[],sdpsettings('sos.model',2)) |
---|
| 409 | |
---|
| 410 | |
---|
| 411 | |
---|
| 412 | |
---|
| 413 | |
---|
| 414 | |
---|
| 415 | |
---|
| 416 | |
---|
| 417 | |
---|
| 418 | function regressreport(text,fail) |
---|
| 419 | |
---|
| 420 | switch fail |
---|
| 421 | case 0 |
---|
| 422 | disp(['No problems in ' text]); |
---|
| 423 | case 1 |
---|
| 424 | disp(['Objective differ in ' text]); |
---|
| 425 | case 2 |
---|
| 426 | disp(['Infeasible solution in ' text]); |
---|
| 427 | otherwise |
---|
| 428 | end |
---|
| 429 | |
---|
| 430 | |
---|
| 431 | function fail = regresstest(F,obj,ops,pv); |
---|
| 432 | |
---|
| 433 | if nargin==3 |
---|
| 434 | pv = []; |
---|
| 435 | end |
---|
| 436 | |
---|
| 437 | ops.sos.model = 1; |
---|
| 438 | solvesos(F,obj,ops,pv); |
---|
| 439 | obj1 = double(obj); |
---|
| 440 | p1s = checkset(F(find(is(F,'sos')))); |
---|
| 441 | p1e = checkset(F(find(~is(F,'sos')))); |
---|
| 442 | |
---|
| 443 | ops.sos.model = 2; |
---|
| 444 | solvesos(F,obj,ops,pv); |
---|
| 445 | obj2 = double(obj); |
---|
| 446 | p2s = checkset(F(find(is(F,'sos')))); |
---|
| 447 | p2e = checkset(F(find(~is(F,'sos')))); |
---|
| 448 | |
---|
| 449 | |
---|
| 450 | fail = 0; |
---|
| 451 | |
---|
| 452 | if abs(obj1-obj2) > 1e-4 |
---|
| 453 | fail = 1; |
---|
| 454 | end |
---|
| 455 | |
---|
| 456 | if any(p1s>1e-4) |
---|
| 457 | fail = 2; |
---|
| 458 | p1s |
---|
| 459 | end |
---|
| 460 | if any(p2s>1e-4) |
---|
| 461 | fail = 2; |
---|
| 462 | p2s |
---|
| 463 | end |
---|
| 464 | if any(p1e<-1e-4) |
---|
| 465 | fail = 2; |
---|
| 466 | p1e |
---|
| 467 | end |
---|
| 468 | if any(p2e<-1e-4) |
---|
| 469 | fail = 2; |
---|
| 470 | p2e |
---|
| 471 | end |
---|
| 472 | if fail==0 |
---|
| 473 | disp('Correct solution'); |
---|
| 474 | end |
---|
| 475 | |
---|