2016-10-13 15 views
-2

対称巡回行列を作成したい。 4次の対称巡回行列R

例:オーダー8の

 
1 2 : 3 4 
2 1 : 4 3 
......... 
3 4 : 1 2 
4 3 : 2 1 

例:

 
1 2 3 4 : 5 6 7 8 
2 1 4 3 : 6 5 8 7 
3 4 1 2 : 7 8 5 6 
4 3 2 1 : 8 7 6 5 
.................. 
5 6 7 8 : 1 2 3 4 
6 5 8 7 : 2 1 4 3 
7 8 5 6 : 3 4 1 2 
8 7 6 5 : 4 3 2 1 

私はRでこれをどのように行うのですか?

+0

ここで使用している定義は何ですか?入力はちょうど4番でしょうか? – MrFlick

+0

はい、すべての入力は数字です。これは単なる一例です。 – hira

+0

ここに始まりますhttp://stackoverflow.com/questions/15795318/efficient-way-to-create-a-circulant-matrix-in-r –

答えて

2

これは問題を解決するように見えますが、あまりにも巧妙です。 flip(x)==1イディオムは

flip <- function(x) x[rev(seq(nrow(x))),] 
x <- matrix(c(1,2,2,1),2) 
x2 <- kronecker(2*(flip(x)==1),x,"+") ## 4x4 solution 
x3 <- kronecker(4*(flip(x)==1),x2,"+") ## 8x8 solution 
...(あなたはこれをたくさん行いたい場合 forループに埋め込む)サイズ 2^nの大きな行列の繰り返しをフォーム [0 1; 1 0]の(一度数値に変換)行列を与えます。..あなたが望む答えが、サイズが 2^n(例えば、12x12)ではないマトリックスについてはわかりませんが、この機械を拡張する方法を見つけることができます。