# DeterminantalRepresentations -- computing determinantal representations of polynomials

## Description

The goal of this package is to compute symmetric determinantal representations of real polynomials. A polynomial $f$ in $\mathbb{R}[x_1, \ldots, x_n]$ of total degree $d$ (not necessarily homogeneous) is called determinantal if $f$ is the determinant of a matrix of linear forms - in other words, there exist matrices $A_0, \ldots, A_n\in \mathbb{R}^{d\times d}$ such that $f(x_1, \ldots, x_n) = det(A_0 + x_1A_1 + \ldots + x_nA_n)$. The matrix pencil $A_0 + x_1A_1 + \ldots + x_nA_n$ is said to give a determinantal representation of $f$ of size $d$. If the matrices $A_i$ can be chosen to be all symmetric, then the determinantal representation is called symmetric. The determinantal representation is called definite if $A_0$ is positive definite, and monic if $A_0 = I_d$ is the identity matrix.

Deciding whether or not a degree $d$ polynomial has a determinantal representation of size $d$ is in general difficult, and computing such a representation even more so. Computing (monic) symmetric determinantal representations (even in 2 variables) is of interest owing to a connection with real-zero and hyperbolic polynomials, due to a celebrated theorem of Helton-Vinnikov. In general, determinantal polynomials also have connections to convex algebraic geometry and semidefinite programming.

Currently, the functions in this package are geared towards computing monic symmetric determinantal representations of quadrics, as well as plane curves of low degree (i.e., cubics and quartics). The algorithms implemented in this package can be found in [1], [2].

Additionally, a number of helper functions are included for creating/working with various classes of matrices, which may be of general interest (and are not limited to the scope of determinantal representations). These include: creating/testing orthogonal, symmetric, doubly stochastic, unipotent, and positive semidefinite matrices, Hadamard products, Cholesky decomposition, and lifting/rounding matrices from CC to RR/QQ.

References:

• Justin Chen
• Papri Dey

## Certification

Version 1.3.0 of this package was accepted for publication in volume 10 of The Journal of Software for Algebra and Geometry on 5 December 2019, in the article Computing symmetric determinantal representations. That version can be obtained from the journal or from the Macaulay2 source code repository.

## Version

This documentation describes version 1.3.1 of DeterminantalRepresentations.

## Source code

The source code from which this documentation is derived is in the file DeterminantalRepresentations.m2.

## Exports

• Functions and commands
• Methods
• "bivariateDiagEntries(RingElement)" -- see bivariateDiagEntries -- computes diagonal entries and eigenvalues for a determinantal representation of a bivariate polynomial
• "cholesky(Matrix)" -- see cholesky -- computes the Cholesky decomposition of a positive semidefinite matrix
• "coeffMatrices(Matrix)" -- see coeffMatrices -- gets coefficient matrices for a matrix of linear forms
• "companionMatrix(RingElement)" -- see companionMatrix -- companion matrix of a univariate polynomial
• "detRep(RingElement)" -- see detRep -- compute determinantal representations
• "generalizedMixedDiscriminant(List)" -- see generalizedMixedDiscriminant -- computes generalized mixed discriminant of a list of matrices
• "isDoublyStochastic(Matrix)" -- see isDoublyStochastic -- whether a matrix is doubly stochastic
• "isOrthogonal(Matrix)" -- see isOrthogonal -- whether a matrix is orthogonal
• "orthogonalFromOrthostochastic(Matrix)" -- see orthogonalFromOrthostochastic -- computes orthogonal matrices for a given orthostochastic matrix
• "randomIntegerSymmetric(ZZ)" -- see randomIntegerSymmetric -- constructs a random integer symmetric matrix
• "randomIntegerSymmetric(ZZ,Ring)" -- see randomIntegerSymmetric -- constructs a random integer symmetric matrix
• "randomOrthogonal(ZZ)" -- see randomOrthogonal -- constructs a random special orthogonal matrix
• "randomOrthogonal(ZZ,Thing)" -- see randomOrthogonal -- constructs a random special orthogonal matrix
• "randomPSD(ZZ)" -- see randomPSD -- constructs a random positive semidefinite matrix
• "randomPSD(ZZ,RR)" -- see randomPSD -- constructs a random positive semidefinite matrix
• "randomPSD(ZZ,ZZ)" -- see randomPSD -- constructs a random positive semidefinite matrix
• "randomPSD(ZZ,ZZ,RR)" -- see randomPSD -- constructs a random positive semidefinite matrix
• "randomUnipotent(ZZ)" -- see randomUnipotent -- constructs a random unipotent matrix
• "randomUnipotent(ZZ,Thing)" -- see randomUnipotent -- constructs a random unipotent matrix
• "realPartMatrix(Matrix)" -- see realPartMatrix -- real part of a matrix over CC
• "roundMatrix(ZZ,Matrix)" -- see roundMatrix -- lifts matrix over RR to matrix over QQ
• Symbols

## For the programmer

The object DeterminantalRepresentations is .