# Why Magic Square[ magic(n) ] gives results diifferent on different situation?

7 views (last 30 days)
M.K.H. CHANDAN on 26 Jun 2013
Edited: M.K.H. CHANDAN on 18 May 2015
As per Magic Square Help/Defn.:
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.
Now in MATLAB ,
1. The output of magic(2) not valid for 2 sums. diagonal sums and row sums in MATLAB Version 7.5.0.342 (R2007b)
>> magic(2)
ans =
1 3
4 2
2.It should not work for negative nos , but showing different results for different negative inputs.
>> magic(-4) ??? Error using ==> reshape Size vector elements should be nonnegative.
Error in ==> magic at 26 M = reshape(1:n*n,n,n)';
>> magic(-5)
ans =
[]
>>
Manoj Harichandan>>> In above cases both -4 & -5 are both negative no's , but getting differnt results for different values, for all odd negative numbers it is showing null matrix and for all even negative numbers it is showing as : "Size vector elements should be nonnegative". It should show same error logs for both the cases. I think , From the start only it should stop the procedures to call other functions, as input given to the magic() function is wrong , instead of it is calling reshape function,the error is also showing , which are related to the error of reshape fuction.
Sean de Wolski on 26 Jun 2013
Why are you calling magic with a negative number?

Lokesh Ravindranathan on 26 Jun 2013
Edited: Lokesh Ravindranathan on 26 Jun 2013
If you look at the documentation for magic function http://www.mathworks.com/help/matlab/ref/magic.html. There is an algorithms section which explains three different methods of implementation depending on the type of numbers. In your case, -4 is being treated as a number divisible by 4 and -5 is being treated as an odd number.
This is the reason for the difference in error messages.
M.K.H. CHANDAN on 18 May 2015
Edited: M.K.H. CHANDAN on 18 May 2015
Yes,I know it ,
On newer version , it is updated only on help
but Can't we restrict it when argument is a negative after a function call, just on after entry to the function the function, instead of processing so many lines of code in MATLAB?

### Categories

Find more on Logical in Help Center and File Exchange

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!