|
18 | 18 |
|
19 | 19 | set_monos(bases::Vector{<:MB.MonomialBasis}) = Set([basis.monomials for basis in bases]) |
20 | 20 |
|
21 | | -function Certificate.Sparsity.sparsity(monos::AbstractVector{<:MP.AbstractMonomial}, domain::SemialgebraicSets.BasicSemialgebraicSet, sp::Sparsity.Monomial, maxdegree, degs) |
22 | | - half_monos = Certificate.maxdegree_gram_basis(MB.MonomialBasis, variables, div(maxdegree, 2)) |
23 | | - P = Set(monos) |
24 | | -end |
25 | | - |
26 | 21 | """ |
27 | 22 | wml19() |
28 | 23 |
|
@@ -82,8 +77,11 @@ function wml19() |
82 | 77 | ])) |
83 | 78 | @test set_monos(Certificate.Sparsity.sparsity(f, SignSymmetry(), certificate)) == expected |
84 | 79 | end |
85 | | - @testset "Example 5.4" begin |
86 | | - preorder_certificate = Certificate.Putinar(Certificate.MaxDegree(SOSCone(), MB.MonomialBasis, 4), SOSCone(), MB.MonomialBasis, 4) |
| 80 | + @testset "Example 5.4 $(typeof(ideal_certificate))" for ideal_certificate in [ |
| 81 | + Certificate.MaxDegree(SOSCone(), MB.MonomialBasis, 4), |
| 82 | + Certificate.Newton(SOSCone(), MB.MonomialBasis, tuple()), |
| 83 | + ] |
| 84 | + preorder_certificate = Certificate.Putinar(ideal_certificate, SOSCone(), MB.MonomialBasis, 4) |
87 | 85 | @polyvar x[1:2] |
88 | 86 | f = x[1]^4 + x[2]^4 + x[1] * x[2] |
89 | 87 | K = @set 1 - 2x[1]^2 - x[2]^2 >= 0 |
@@ -168,9 +166,8 @@ function l09() |
168 | 166 | ])) |
169 | 167 | end |
170 | 168 | end |
171 | | -function square_domain() |
172 | | - d = 6 |
173 | | - preorder_certificate = Certificate.Putinar(Certificate.MaxDegree(SOSCone(), MB.MonomialBasis, 6), SOSCone(), MB.MonomialBasis, 6) |
| 169 | +function square_domain(ideal_certificate, d) |
| 170 | + preorder_certificate = Certificate.Putinar(ideal_certificate, SOSCone(), MB.MonomialBasis, d) |
174 | 171 | @polyvar x y |
175 | 172 | f = x^2*y^4 + x^4*y^2 - 3*x^2*y*2 + 1 |
176 | 173 | K = @set(1 - x^2 >= 0 && 1 - y^2 >= 0) |
@@ -238,22 +235,37 @@ function drop_monomials() |
238 | 235 | end |
239 | 236 | @test set_monos(Certificate.Sparsity.sparsity(f, Sparsity.Monomial(ChordalCompletion(), k, use_all_monomials), certificate)) == expected |
240 | 237 | end |
241 | | - preorder_certificate = Certificate.Putinar(Certificate.MaxDegree(SOSCone(), MB.MonomialBasis, 4), SOSCone(), MB.MonomialBasis, 3) |
242 | | - f = polynomial(x^3) |
243 | | - K = @set x >= 0 |
244 | | - @testset "$k $use_all_monomials" for k in 0:3, use_all_monomials in [false, true] |
245 | | - basis, preorder_bases = Certificate.Sparsity.sparsity(f, K, Sparsity.Monomial(ChordalCompletion(), k, use_all_monomials), preorder_certificate) |
246 | | - if k == 1 && !use_all_monomials |
247 | | - @test set_monos(basis) == Set(monovec.([[x^2, x]])) |
248 | | - elseif (k == 2 && !use_all_monomials) || (k == 1 && use_all_monomials) |
249 | | - @test set_monos(basis) == Set(monovec.([[x^2, 1], [x^2, x]])) |
250 | | - else |
251 | | - @test set_monos(basis) == Set(monovec.([[x^2, x, 1]])) |
252 | | - end |
253 | | - if k == 1 && !use_all_monomials |
254 | | - @test set_monos(preorder_bases[1]) == Set(monovec.([[x]])) |
255 | | - else |
256 | | - @test set_monos(preorder_bases[1]) == Set(monovec.([[x, 1]])) |
| 238 | + @testset "$(typeof(ideal_certificate))" for ideal_certificate in [ |
| 239 | + Certificate.MaxDegree(SOSCone(), MB.MonomialBasis, 4), |
| 240 | + Certificate.Newton(SOSCone(), MB.MonomialBasis, tuple()), |
| 241 | + ] |
| 242 | + preorder_certificate = Certificate.Putinar(ideal_certificate, SOSCone(), MB.MonomialBasis, 3) |
| 243 | + f = polynomial(x^3) |
| 244 | + K = @set x >= 0 |
| 245 | + @testset "$k $use_all_monomials" for k in 0:3, use_all_monomials in [false, true] |
| 246 | + basis, preorder_bases = Certificate.Sparsity.sparsity(f, K, Sparsity.Monomial(ChordalCompletion(), k, use_all_monomials), preorder_certificate) |
| 247 | + if ideal_certificate isa Certificate.Newton |
| 248 | + if use_all_monomials |
| 249 | + @test set_monos(basis) == Set(monovec.([[x]])) |
| 250 | + @test set_monos(preorder_bases[1]) == Set(monovec.([[x, 1]])) |
| 251 | + else |
| 252 | + @test isempty(basis) |
| 253 | + @test set_monos(preorder_bases[1]) == Set(monovec.([[x]])) |
| 254 | + end |
| 255 | + else |
| 256 | + if k == 1 && !use_all_monomials |
| 257 | + @test set_monos(basis) == Set(monovec.([[x^2, x]])) |
| 258 | + elseif (k == 2 && !use_all_monomials) || (k == 1 && use_all_monomials) |
| 259 | + @test set_monos(basis) == Set(monovec.([[x^2, 1], [x^2, x]])) |
| 260 | + else |
| 261 | + @test set_monos(basis) == Set(monovec.([[x^2, x, 1]])) |
| 262 | + end |
| 263 | + if (k == 1 && !use_all_monomials) |
| 264 | + @test set_monos(preorder_bases[1]) == Set(monovec.([[x]])) |
| 265 | + else |
| 266 | + @test set_monos(preorder_bases[1]) == Set(monovec.([[x, 1]])) |
| 267 | + end |
| 268 | + end |
257 | 269 | end |
258 | 270 | end |
259 | 271 | end |
|
262 | 274 | xor_complement_test() |
263 | 275 | wml19() |
264 | 276 | l09() |
265 | | - square_domain() |
| 277 | + square_domain(Certificate.MaxDegree(SOSCone(), MB.MonomialBasis, 6), 6) |
| 278 | + square_domain(Certificate.Newton(SOSCone(), MB.MonomialBasis, tuple()), 6) |
266 | 279 | sum_square(8) |
267 | 280 | @test Certificate.Sparsity.appropriate_type(32) == Int64 |
268 | 281 | sum_square(32) |
|
0 commit comments