# circulant: Circulant matrices of any order In magic: Create and Investigate Magic Squares

## Description

Creates and tests for circulant matrices of any order

## Usage

 ```1 2``` ```circulant(vec,doseq=TRUE) is.circulant(m,dir=rep(1,length(dim(m)))) ```

## Arguments

 `vec,doseq` In `circulant()`, vector of elements of the first row. If `vec` is of length one, and `doseq` is `TRUE`, then interpret `vec` as the order of the matrix and return a circulant with first row `seq_len(vec)` `m` In `is.circulant()`, matrix to be tested for circulantism `dir` In `is.circulant()`, the direction of the diagonal. In a matrix, the default value (`c(1,1)`) traces the major diagonals

## Details

A matrix a is circulant if all major diagonals, including broken diagonals, are uniform; ie if a[i,j]==a[k,j] 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

 ``` 1 2 3 4 5 6 7 8 9 10 11``` ```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)) ```

magic documentation built on May 2, 2019, 12:21 p.m.