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

조회 수: 8 (최근 30일)
M.K.H. CHANDAN
M.K.H. CHANDAN 2013년 6월 26일
편집: M.K.H. CHANDAN 2015년 5월 18일
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.

답변 (1개)

Lokesh Ravindranathan
Lokesh Ravindranathan 2013년 6월 26일
편집: Lokesh Ravindranathan 2013년 6월 26일
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.
  댓글 수: 1
M.K.H. CHANDAN
M.K.H. CHANDAN 2015년 5월 18일
편집: M.K.H. CHANDAN 2015년 5월 18일
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?

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by