Is a square matrix square palindromic?
Implementation of various properties presented in a paper by Arthur T. Benjamin and K. Yasuda
is.square.palindromic(m, base=10, give.answers=FALSE) is.centrosymmetric(m) is.persymmetric(m)
m |
The square to be tested |
base |
Base of number expansion, defaulting to 10; not relevant for the “sufficient” part of the test |
give.answers |
Boolean, with |
The following tests apply to a general square matrix m
of size
n*n.
A centrosymmetric square is one in which
a[i,j]=a[n+1-i,n+1-j]
; use is.centrosymmetric()
to test
for this (compare an associative square). Note that this
definition extends naturally to hypercubes: a hypercube a
is
centrosymmetric if all(a==arev(a))
.
A persymmetric square is one in which
a[i,j]=a[n+1-j,n+1-i]
; use is.persymmetric()
to test for
this.
A matrix is square palindromic if it satisfies the rather complicated conditions set out by Benjamin and Yasuda (see refs).
These functions return a list of Boolean variables whose value depends
on whether or not m
has the property in question.
If argument give.answers
takes the default value of
FALSE
, a Boolean value is returned that shows whether the
sufficient conditions are met.
If argument give.answers
is TRUE
, a detailed list is
given that shows the status of each individual test, both for the
necessary and sufficient conditions. The value of the second element
(named necessary
) is the status of their Theorem 1 on page 154.
Note that the necessary conditions do not depend on the base b
(technically, neither do the sufficient conditions, for being a square
palindrome requires the sums to match for every base b
.
In this implementation, “sufficient” is defined only with
respect to a particular base).
Every associative square is square palindromic, according to Benjamin and Yasuda.
Function is.square.palindromic()
does not yet take a
give.answers
argument as does, say, is.magic()
.
Robin K. S. Hankin
Arthur T. Benjamin and K. Yasuda. Magic “Squares” Indeed!, American Mathematical Monthly, vol 106(2), pp152-156, Feb 1999
is.square.palindromic(magic(3)) is.persymmetric(matrix(c(1,0,0,1),2,2)) #now try a circulant: a <- matrix(0,5,5) is.square.palindromic(circulant(10)) #should be TRUE
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.