Hadamard Matrices

From tehowiki
Jump to navigation Jump to search

In the last chapter of Ian Stewart's book "The Great Mathematical Problems" (ISBN 978-1846683374), there is a section about Hadamard matrices. These are square arrays whose entries are either 1 or 0 (Hadamard's original definition used −1 of 0). Each row in the matrix, when compared with some different row, must have exactly one half of the entries matching and one half non-matching. The first 4 matrices are:

2x2      4x4            8x8                  12x12
1 1    1 1 1 1    1 1 1 1 1 1 1 1    1 1 1 1 1 1 1 1 1 1 1 1
1 0    1 0 1 0    1 0 1 0 1 0 1 0    1 0 0 1 0 1 0 1 0 1 0 1
       1 1 0 0    1 1 0 0 1 1 0 0    1 0 1 0 1 1 0 0 0 0 1 1
       1 0 0 1    1 0 0 1 1 0 0 1    1 1 0 0 1 0 0 1 0 1 1 0
                  1 1 1 1 0 0 0 0    1 0 1 1 1 0 1 1 0 0 0 0
                  1 0 1 0 0 1 0 1    1 1 1 0 0 0 1 0 0 1 0 1
                  1 1 0 0 0 0 1 1    1 0 0 0 1 1 1 0 1 1 0 0
                  1 0 0 1 0 1 1 0    1 1 0 1 1 0 0 0 1 0 0 1
                                     1 0 0 0 0 0 1 1 1 0 1 1
                                     1 1 0 1 0 1 1 0 0 0 1 0
                                     1 0 1 1 0 0 0 0 1 1 1 0
                                     1 1 1 0 0 1 0 1 1 0 0 0

Hadamard matrices have many applications, among them error-correcting codes.

The conjecture

Jacques Hadamard (1865 - 1963) himself proved that, apart from the 2 x 2 matrix, the edge lengths of all Hadamard matrices must be divisible by 4. In 1867 Sylvester gave a construction for all Hadamard matrices of order 2k, k >= 2. Paley published two construction methods for two special clases of orders in 1933. The smallest order that could not be constructed by a combination of Sylvester's and Paley's methods was 92. Several other authors published specialized constructions and raised the minimal unknown order to 428, and since 2005 that order is 668.

Mathematicians believe, but still cannot prove, that Hadamard matrices of all orders 4*n can be constructed.

The 3D model

Since the 0/1-entries of the matrices quickly appear as random noise, I tried to visualize the inner structure of the matrices in a better way, and one result is a 3D model for the 22 matrices with order 4, 8, 12, ... 88.

As one can see in the examples above, there basic building blocks of 2x2 entries. In a first step, the two rows are encoded as binary values:

a b  ->  a b c d           1 1  -> 1 1 1 0  -> e
c d                        1 0 

The resulting 4-bit pattern is encoded as a hexadecimal digit 0-9a-f. Now it is much easier to recognize the structure in the 4 example matrices above:

e    ee    eeee    eddddd
     e1    e1e1    b8e11e
           ee11    be8e11
           e11e    b1e8e1
                   b11e8e
                   be11e8

The 3D model was developped with the great Javascript package threejs.org. The matrices are represented by little cubes whose opacities resp. colors are given by the hexadecimal encoding described above. The matrices are then stacked as a pyramid. The cubes inside the pyramid are omitted since from outside they cannot be seen anyway.

The model turns slowly by itself. It can be rotated with the mouse cursor, and with the mouse wheel the user can zoom in or out.

Technical details

The article https://arxiv.org/html/2411.18897v1 describes in detail how to compute the matrices with SageMath. Online you can run https://sagecell.sagemath.org/ with the following program:

from sage.combinat.matrices.hadamard_matrix import hadamard_matrix, skew_hadamard_matrix

for i in range(1,11):
  H = hadamard_matrix(4*i)
  print(i, "========")
  print(H.str())

The model uses mainly the following programs on github.com/gfis/fasces:

  • hapyramid.html
  • hapyramid_world.js
  • hapyramid_blocks.js (generated by hapy_blocks.pl)

There is a makefile that controls the whole generation process.