2017-05-30 12 views
-1

ランダムな自然数を持つ行列を作成する方法は不思議ですが、すべての列の合計がすべての行と対角の合計の合計にも等しくなります。ランダムなマジック四角を生成する

私はあなたが上になく、それぞれの行と列に異なる番号が記載されているように、行、列、対角線の寸法との和を選択することによって、あなたの正方行列を与えること機能を作成することを意味します。

これを行う方法を知っている人はいますか?

プログラムを完全に理解するためのパッケージがなくても、私自身で関数を作成したいと考えています。

+2

各列の合計が、各列の合計値である場合は、数字の多くは、他人に依存して – HubertL

+1

ランダムすることはできませんあなたは[魔方陣]について話している(https://en.wikipedia.org/ wiki/Magic_square)?建設に関するヒントについては、ウィキペディアの記事をご覧ください。 – MrFlick

+3

'magic :: magic(4)' – Masoud

答えて

4

あなたはパッケージを使用することができますがmagicと呼ばれる:

library(magic) 
magic(4) 

出力は次のようになります。

#  [,1] [,2] [,3] [,4] 
# [1,] 1 12 8 13 
# [2,] 15 6 10 3 
# [3,] 14 7 11 2 
# [4,] 4 9 5 16 

あなたは行列のための和であるかを決定することはできません。

enter image description here:あることを行っています。

ここで、「n」は、マトリックスの寸法です。

ただし、数値に(好ましくは整数)を掛けることができます。

便利なリンク:関数に見てどのようにWhat is Magic Square?

?あなたはmagic機能がどのように動作するかを把握したい場合は

、あなたはこれを使用することができますし、ステップバイステップでそれを掘り下げます。

>functionBody(magic) 

# { 
#  if (length(n) > 1) { 
#   return(sapply(n, match.fun(sys.call()[[1]]))) 
#  } 
#  n <- round(n) 
#  if (n == 2) { 
#   stop("Normal magic squares of order 2 do not exist") 
#  } 
#  if (n%%2 == 1) { 
#   return(as.standard(magic.2np1(floor(n/2)))) 
#  } 
#  if (n%%4 == 0) { 
#   return(as.standard(magic.4n(round(n/4)))) 
#  } 
#  if (n%%4 == 2) { 
#   return(as.standard(magic.4np2(round((n - 2)/4)))) 
#  } 
#  stop("This cannot happen") 
# } 

プロセスを完全に理解するためには、上記の他の機能を調べる必要があります。

+0

ああ、私はその機能について知りませんでした.. –

関連する問題