circulant {magic} | R Documentation |
Circulant matrices of any order
Description
Creates and tests for circulant matrices of any order
Usage
circulant(vec,doseq=TRUE)
is.circulant(m,dir=rep(1,length(dim(m))))
Arguments
vec , doseq |
In |
m |
In |
dir |
In |
Details
A matrix a
is circulant if all major diagonals, including
broken diagonals, are uniform; ie if
a_{ij}=a_{kl}
when i-j=k-l
(modulo
n
). The standard values to use give 1:n
for the top row.
In function is.circulant()
, for arbitrary dimensional arrays,
the default value for dir
checks that
a[v]==a[v+rep(1,d)]==...==a[v+rep((n-1),d)]
for all v
(that is, following lines parallel to the major diagonal); indices are
passed through process()
.
For general dir
, function is.circulant()
checks that
a[v]==a[v+dir]==a[v+2*dir]==...==a[v+(n-1)*d]
for all
v
.
A Toeplitz matrix is one in which a[i,j]=a[i',j']
whenever |i-j|=|i'-j'|
. See function toeplitz()
of the
stats
package for details.
Author(s)
Robin K. S. Hankin
References
Arthur T. Benjamin and K. Yasuda. Magic “Squares” Indeed!, American Mathematical Monthly, vol 106(2), pp152-156, Feb 1999
Examples
circulant(5)
circulant(2^(0:4))
is.circulant(circulant(5))
a <- outer(1:3,1:3,"+")%%3
is.circulant(a)
is.circulant(a,c(1,2))
is.circulant(array(c(1:4,4:1),rep(2,3)))
is.circulant(magic(5)%%5,c(1,-2))