# Magic Squares, Part 1, Low Order 1

Posted by **Cleve Moler**,

With origins in centuries old recreational mathematics, magic squares demonstrate MATLAB array operations.

### Contents

#### Magic Squares

An *n* -by- *n* magic square is an array containing the integers from 1 to $n^2$, arranged so that each of the rows, each of the columns, and the two principal diagonals have the same sum. For each $n > 3$, there are many different magic squares of order *n*. The MATLAB function `magic(n)` generates one particular one.

There is no magic square of order $n = 2$. The statement

A = magic(2)

produces

A =

1 3 4 2

The column sums are the same, but the row and diagonal sums are not, so this is not a magic square.

#### Lo Shu

(Illustration thanks to Byerly Wiser Cline.)

Magic squares predate recorded history. An ancient Chinese legend tells of a turtle emerging from the Lo river during a flood. The turtle's shell showed a very unusual pattern -- a 3-by-3 grid containing various numbers of spots. Of course, we do not have any eye-witness accounts, so we can only imagine what the turtle looked like. Each of the three rows, the three columns, and the two diagonals contain a total of 15 spots. References to Lo Shu and the Lo Shu numerical pattern occur throughout Chinese history. Today, it is the mathematical basis for *Feng Shui*, the philosophy of balance and harmony in our surroundings and lives.

MATLAB can generate Lo Shu with

A = magic(3)

This produces

A = 8 1 6 3 5 7 4 9 2

The command

sum(A)

sums the elements in each column to produce

15 15 15

The command

sum(A')'

transposes the matrix, sums the columns of the transpose, and then transposes the results to produce the row sums

15 15 15

The command

sum(diag(A))

sums the main diagonal of A, which runs from upper left to lower right, to produce `15`.

The opposite diagonal, which runs from upper right to lower left, is less important in linear algebra, so finding its sum is a little trickier. One way to do it makes use of the function that "flips" a matrix "upside-down."

sum(diag(flipud(A)))

produces `15`.

This verifies that `A` has equal row, column, and diagonal sums and so is a magic square.

Why is the magic sum equal to 15? The command `sum(1:9)` tells us that the sum of the integers from `1` to `9` is `45`. If these integers are allocated to 3 columns with equal sums, that sum must be `sum(1:9)/3` which is `15`.

There are eight possible ways to orient a photo in a slide show. Similarly, there are eight possible ways to display the magic square of order 3. The statements

for k = 0:3 rot90(A,k) rot90(A',k) end

produce the eight displays

8 1 6 8 3 4 3 5 7 1 5 9 4 9 2 6 7 2

6 7 2 4 9 2 1 5 9 3 5 7 8 3 4 8 1 6

2 9 4 2 7 6 7 5 3 9 5 1 6 1 8 4 3 8

4 3 8 6 1 8 9 5 1 7 5 3 2 7 6 2 9 4

The 5 is always in the center, the other odd numbers are always in the centers of the edges, and the even numbers are always in the corners.

#### Melancholia

Melancholia I is a famous Renaissance engraving by the German artist and amateur mathematician Albrecht Dürer. It shows many mathematical objects, including a sphere, a truncated rhombohedron, and, in the upper right hand corner, a magic square of order 4.

Issue these MATLAB commands

load durer whos

You will see

X 648x509 2638656 double array caption 2x28 112 char array map 128x3 3072 double array

The elements of the array `X` are indices into the gray-scale color map named `map`. The image is displayed with

image(X) colormap(map) axis image

Click the magnifying glass with a "+" in the toolbar and use the mouse to zoom in on the magic square in the upper right-hand corner. The scanning resolution becomes evident as you zoom in.

To display the higher resolution scan of the area around the magic square use the commands

load detail image(X) colormap(map) axis image

You will see

The command

A = magic(4)

produces a 4-by-4 magic square.

A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

The commands

sum(A), sum(A'), sum(diag(A)), sum(diag(flipud(A)))

yield enough `34`'s to verify that `A` is indeed a magic square.

The 4-by-4 magic square generated by MATLAB is not the same as Dürer's magic square. We need to interchange the second and third columns.

A = A(:,[1 3 2 4])

changes `A` to

A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1

Interchanging columns does not change the column sums or the row sums. It usually changes the diagonal sums, but in this case both diagonal sums are still 34. So now our magic square matches the one in Dürer's etching. Dürer probably chose this particular 4-by-4 square because the date he did the work, 1514, occurs in the middle of the bottom row.

There are 880 different magic squares of order 4. To see some of them, run this:

A = magic(4); while 1 clc A = A(randperm(4),randperm(4)) pause(.5) end

The program `durerperm` available from *Experiments with MATLAB* interchanges rows and columns in the image produced from `detail` by interchanging groups of rows and columns in the array `X`. This is not especially important or useful, but it provides a curious illusion.

Get
the MATLAB code

Published with MATLAB® R2012b

## 1 CommentsOldest to Newest

http://en.wikipedia.org/wiki/Associative_magic_square

The very end of the article in the link above shows a 14 x 14 magic square tribute to the 500th anniversary of Durer’s square. Two recent programs in the ref section make this magic square calligraphy possible.