A collection of utilities to generate spherical (t,t)-designs (henceforth, t-designs) in Rd and Cd with given parameters.
This software was written by me under the supervision of Shayne Waldron for a summer research scholarship at the University of Auckland in 2019-2020; view the scholarship report.
A spherical (3,3)-design of 157 vectors in C^5
- MATLAB (at least R2018b).
- To use the Manopt scripts, you will need the Manopt software package installed somewhere in the MATLAB path.
For the Python utilities, you also need:
- Python 3.x, where x is a version supported by the MATLAB API for Python (for Python utility only).
- The MATLAB API for Python itself (installation instructions). This comes with MATLAB, it just needs to be manually enabled.
The following MATLAB scripts may be used by modifying the parameters at the top of each file. In general, the scripts using the Manopt optimiser are both much faster and much more accurate.-
runtf.m
, which tries to generate a t-design with given fixed parameters.runtfMO.m
, the same asruntf.m
but using Manopt.search_designs.m
, which tries to find a t-design for lots of n, given a fixed d and t.search_designsMO.m
, the same assearch_designs.m
but using Manopt.exp12.m
, which takes an existing design generated byruntf.m
and makes it better.countDesigns.m
, which counts projective unitary equivalence classes of (d,n,t)-designs by computing triple products (see [2] sec. 8.2). This uses Manopt.tabulate.m
, which calculates all(!) minimal designs (table 6.2 of [2], for more up to date lists see also [3] and [4]) until the end of time.
For the more technical user, here are the functions and objects that you can call and use from your own scripts. The three scripts listed above should be decent examples of the usage of these utilities.
DesignPotential
is an object representing an error function and the gradient of that function, for use in computations. One example isComplexDesignPotential
(which deals with the complex case).getRandomComplexSeed
generates a good starting matrix for iteration.iterateOnDesign
takes a starting matrix and aDesignPotential
instance and tries to iterate it to compute a better design.iterateOnDesignMO
is the Manopt version ofiterateOnDesign
. To pick a starting matrix automatically, set the initial parameterA
to be anNaN
matrix of the correct dimensions.compute3Products
takes a design and returns the list of its 3-products in ascending order.guessOrderLowerBound
, which uses results of [1] to bound below the sizes of possible designs.
Remarks.
- Designs are always stored as d by n matrices.
runtf.m
andexp12.m
will both produce a file in the current directory, named liketf_run_YYYY_MM_DD_hh_mm_ss.mat
, containing all the data used to generate the design, as well as the design itself, and a list of the error of the design produced at each iteration.search_designs.m
will produce a whole directory (in the current directory), named likesearch_designs_D_T_YYYY_MM_DD_hh_mm_ss/
, which contains.mat
files like those generated byruntf.m
(named according to n) and plots of the associated errors.runtf.m
takes anerrorMultiplier
parameter (the step size at each iteration is thenerrorMultiplier * (error)^errorExp
); this needs to be chosen by the user for a given d,n,t triple and can be fiddly to do. An example of an automated method, which seems to work reasonably well, may be found insearch_designs.m
(in particular, the for loop onr_try
).
The Python scripts accept a --help
argument. Here is a list of the scripts.
generate_repo.py
, which takes a directory of output files from the MATLAB scripts and produces a standalone directory containing an HTML index file to all of them.fmagma.py
, which takes a single.mat
file and produces a.magma
file containing the same design.project.py
, which takes a single.mat
file and produces a simple LaTeX/TiKZ visualisation. There are a number of configuration options; the image below was produced from a design with parameters (d,n,t) = (2,12,4) by running the following command inexamples
:
python3.7 ../project.py 2_12_4.mat -arif -o 2_12_4.tex && pdflatex 2_12_4 && convert 2_12_4.pdf 2_12_4.png
project3d.py
, which takes a single.mat
file and produces a 3D version of theproject.py
LaTeX/TiKZ visualisation. The image below was produced from a design with parameters (d,n,t) = (2,12,4) by running the following command inexamples
:
python3.7 ../project3d.py 2_12_4.mat -o 2_12_4_3D.tex -ee && pdflatex 2_12_4_3D && convert -flatten -density 150 2_12_4_3D.pdf -quality 100 2_12_4_3D.png
- P. Delsarte, J. M. Goethals, and J. J. Seidel. "Spherical codes and designs". In: Geometriae Dedicata 6.3 (1977), pp. 363–388. MR485471.
- Shayne Waldron. An introduction to finite tight frames. Applied and Numerical Harmonic Analysis. Birkhäuser/Springer, 2018. ISBN: 978-0-8176-4814-5; 978-0-8176-4815-2. MR3752185. See in particular chapter 6.
- Mozhgan Mohammadpour and Shayne Waldron. Constructing high order spherical designs as a union of two of lower order. 2019. arXiv:1912.07151
- Daniel Hughes and Shayne Waldron. "Spherical (t,t)-designs with a small number of vectors". In: Linear Algebra and its Applications 608 (2021), pp. 84-106. MR4142198.