www.gusucode.com > elmat工具箱matlab源码程序 > elmat/magic.m
function M = magic(n) %MAGIC Magic square. % MAGIC(N) is an N-by-N matrix constructed from the integers % 1 through N^2 with equal row, column, and diagonal sums. % Produces valid magic squares for all N > 0 except N = 2. % Copyright 1984-2015 The MathWorks, Inc. n = floor(real(double(n(1)))); if mod(n,2) == 1 % Odd order M = oddOrderMagicSquare(n); elseif mod(n,4) == 0 % Doubly even order. % Doubly even order. J = fix(mod(1:n,4)/2); K = J' == J; M = (1:n:(n*n))' + (0:n-1); M(K) = n*n+1 - M(K); else % Singly even order. p = n/2; %p is odd. M = oddOrderMagicSquare(p); M = [M M+2*p^2; M+3*p^2 M+p^2]; if n == 2 return end i = (1:p)'; k = (n-2)/4; j = [1:k (n-k+2):n]; M([i; i+p],j) = M([i+p; i],j); i = k+1; j = [1 i]; M([i; i+p],j) = M([i+p; i],j); end function M = oddOrderMagicSquare(n) p = 1:n; M = n*mod(p'+p-(n+3)/2,n) + mod(p'+2*p-2,n) + 1;