Abstract

We provide a closed formula for the degree of \(\mathop{\mathrm{SO}}\nolimits (n, \mathbb{C})\). In addition, we test symbolic and numerical techniques for computing the degree of \(\mathop{\mathrm{SO}}\nolimits (n, \mathbb{C})\). As an application of our results, we give a formula for the number of critical points of a low-rank semidefinite programming problem. Finally, we provide evidence for a conjecture regarding the real locus of \(\mathop{\mathrm{SO}}\nolimits (n, \mathbb{C})\).

MSC 2010 codes:

Notes

Acknowledgements

This article was initiated during the Apprenticeship Weeks (22 August–2 September 2016), led by Bernd Sturmfels, as part of the Combinatorial Algebraic Geometry Semester at the Fields Institute. The authors are very grateful to Jan Draisma for his tremendous help with understanding the Kazarnovskij Formula and to Kristian Ranestad for many helpful discussions. The authors thank Anton Leykin for performing the computation of \(\mathop{\mathrm{SO}}\nolimits (7, \mathbb{C})\). The first three authors would also like to thank the Max Planck Institute for Mathematics in the Sciences in Leipzig, Germany for their hospitality where some of this article was completed. The motivation for computing the degree of the orthogonal group came from project that started by the fifth author at the suggestion of Benjamin Recht. The first author was supported by the National Science Foundation Graduate Research Fellowship under Grant No. DGE 1106400, and the second author was partially supported by the NSF GRFP under Grant No. DGE-1256259 and the Wisconsin Alumni Research Foundation.

Appendix: Macaulay2 Code

This section contains Macaulay2 [9] code for computing the degree of
\(\mathop{\mathrm{SO}}\nolimits (n, \mathbb{C})\). We typically compute
the degree of \(\mathop{\mathrm{O}}\nolimits (n, \mathbb{C})\), and
divide by to 2 to
obtain the degree of \(\mathop{\mathrm{SO}}\nolimits (n, \mathbb{C})\),
because this approach eliminates the polynomial of highest degree, the condition that the
determinant equal 1.

First, we compute the degree of \(\mathop{\mathrm{SO}}\nolimits (5)\) using Gröbner bases . The computation is done over the finite field \(\mathbb{Z}/2\mathbb{Z}\) for \(\mathop{\mathrm{O}}\nolimits (5, \mathbb{C})\) and the result is halved to give the degree of \(\mathop{\mathrm{SO}}\nolimits (5, \mathbb{C})\).

deg1SO = n -> (

R := ZZ/2[x_(1,1)..x_(n,n)];

M := genericMatrix(R,n,n);

J := minors(1, M * transpose(M) - id_(R^n));

(degree J) // 2)

Our second function uses the package NumericalAlgebraicGeometry to solve the zero-dimensional system arising from a linear slice of the variety \(\mathop{\mathrm{O}}\nolimits (3, \mathbb{C})\). The command solveSystem employs the standard method of polynomial homotopy continuation.

needsPackage ‘‘NumericalAlgebraicGeometry’’;

deg2SO = n -> (

R := CC[x_(1,1)..x_(n,n)];

M := genericMatrix(R,n,n);

B := M * transpose(M) - id_(R^n);

polys := unique flatten entries B;

linearSlice := apply(binomial(n,2),

i -> random(1,R) - random(CC));

S := solveSystem(polys | linearSlice);

#S // 2)

We next provide code that computes the degree of \(\mathop{\mathrm{SO}}\nolimits (n, \mathbb{C})\) using the package MonodromySolver. Again we do not include the determinant condition, but this time we do not need to halve the result. This is because our starting point, the identity matrix, lies on \(\mathop{\mathrm{SO}}\nolimits (n, \mathbb{C})\) and this method only discovers points on the irreducible component corresponding to our starting point. The linear slices are parametrized by the t and c variables which are varied within the function monodromySolve to create monodromy loops. The method stops when ten consecutive loops provide no new points. Although it is possible that this stopping criterion is satisfied prematurely, in our case the program stopped at the correct number.

needsPackage ‘‘MonodromySolver’’;

deg3SO = n -> (

d := binomial(n,2);

R := CC[c_1..c_d,

t_(1,1,1)..t_(d,n,n)][x_(1,1)..x_(n,n)];

M := genericMatrix(R,n,n);

B := M * transpose(M) - id_(R^n);

polys := unique flatten entries B;

linearSlice := for i from 1 to d list (

c_i + sum flatten for j from 1 to n list (

for k from 1 to N list t_(i,j,k)*x_(j,k)));

G := polySystem( polys | linearSlice);

setRandomSeed 0;

(p0, x0) := createSeedPair(G,

flatten entries id_(CC^n));

(V, npaths) = monodromySolve(G, p0, {x_0},

NumberOfNodes => 2, NumberOfEdges => 4);

# flatten points V.PartialSols)

Finally, we may use Theorem 1.1 to compute the degree of \(\mathop{\mathrm{SO}}\nolimits (n, \mathbb{C})\).