Main Content

magic

Description

example

M = magic(n) returns an n-by-n matrix constructed from the integers 1 through n2 with equal row and column sums. The order n must be a scalar greater than or equal to 3 in order to create a valid magic square.

Examples

collapse all

Compute the third-order magic square M.

M = magic(3)
M = 3×3

     8     1     6
     3     5     7
     4     9     2

The sum of the elements in each column and the sum of the elements in each row are the same.

sum(M)
ans = 1×3

    15    15    15

sum(M,2)
ans = 3×1

    15
    15
    15

Visually examine the patterns in magic square matrices with orders between 9 and 24 using imagesc. The patterns show that magic uses three different algorithms, depending on whether the value of mod(n,4) is 0, 2, or odd.

for n = 1:16
    subplot(4,4,n)
    ord = n+8;
    m = magic(ord);
    imagesc(m)
    title(num2str(ord))
    axis equal
    axis off
end

Figure contains 16 axes. Axes 1 with title 9 contains an object of type image. Axes 2 with title 10 contains an object of type image. Axes 3 with title 11 contains an object of type image. Axes 4 with title 12 contains an object of type image. Axes 5 with title 13 contains an object of type image. Axes 6 with title 14 contains an object of type image. Axes 7 with title 15 contains an object of type image. Axes 8 with title 16 contains an object of type image. Axes 9 with title 17 contains an object of type image. Axes 10 with title 18 contains an object of type image. Axes 11 with title 19 contains an object of type image. Axes 12 with title 20 contains an object of type image. Axes 13 with title 21 contains an object of type image. Axes 14 with title 22 contains an object of type image. Axes 15 with title 23 contains an object of type image. Axes 16 with title 24 contains an object of type image.

Input Arguments

collapse all

Matrix order, specified as a scalar integer greater than or equal to 3. If n is complex, not an integer, or not scalar, then magic converts it into a usable integer with floor(real(double(n(1)))).

If you supply n less than 3, then magic returns either a nonmagic square, or the degenerate magic squares 1 and [].

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char

Extended Capabilities

See Also

|

Introduced before R2006a