Wolfram mathematica wolfram mathematica中的n阶幻方

Wolfram mathematica wolfram mathematica中的n阶幻方,wolfram-mathematica,magic-square,Wolfram Mathematica,Magic Square,请你能帮我用Wolfram Mathematica为魔方创建函数吗。我必须创建函数MagicSquare[n_],它的输出是前n^2个整数的sqare矩阵,并且每列、每行和对角线上这些整数的总和必须相同。请帮帮我,我试了几天,结果失败了。我的学校作业需要这个。这里有一个简单的暴力方法。请注意,检查值m为最大值 (将随机值设置为数组变量可以巧妙地使用HoldFirst) 8 3 4 1 5 9 672 这是另一种适用于n=3的蛮力方法 n = 3 m = n (n^2 + 1) /2 Se

请你能帮我用Wolfram Mathematica为魔方创建函数吗。我必须创建函数MagicSquare[n_],它的输出是前n^2个整数的sqare矩阵,并且每列、每行和对角线上这些整数的总和必须相同。请帮帮我,我试了几天,结果失败了。我的学校作业需要这个。

这里有一个简单的暴力方法。请注意,检查值
m
为最大值

(将随机值设置为数组变量可以巧妙地使用
HoldFirst

8 3 4

1 5 9

672


这是另一种适用于n=3的蛮力方法

 n = 3
 m = n  (n^2 + 1) /2
 Select[
     Partition[#  , n] & /@ 
        Permutations[Range[n^2]],
          (Union @(Total /@ # )) == {m} &&
          (Union @(Total /@ Transpose[#] )) == {m} &&
          Total@Diagonal[#] == m  && 
          Total@Diagonal[Reverse@#] == m & ][[1]] // MatrixForm

这样做的好处是,对于较大的n,会立即产生内存不足错误,而Chris'将永远运行。:)

展示你的尝试。这是一个非常离题的问题,但它只适用于n=3。我需要适用于每个n的代码。我试过这样的方法:我创建了matrix matrix=Partition[Table[0,{n^2}],n]这是一个包含nxn和全零的矩阵。然后我尝试用这个和[matrix[[I][[j]],{I,1,1},{I,1,n}]==(n^3+n)/2来实现这个规则;和[矩阵[[i]][[j]],{i,1,n},{i,1,1}]==(n^3+n)/2;但我不能用这些规则实现代码,只是我认为这是一个好的开始(@Alex-理论上,我的答案是可伸缩的,这取决于
n
的设置。然而,这需要很长时间(或一台超级计算机)为
n>3
找到一个解决方案。描述了正确的实现过程。非常感谢george的介绍,但它只适用于n=3。我需要适用于每个n的代码。我尝试了以下方法:我创建了矩阵=分区[表[0,{n^2}],n]这是一个有nxn和全零的矩阵。然后我试着用这个和[matrix[[I][[j]],{I,1,1},{I,1,n}]==(n^3+n)/2;和[matrix[[I][[j]],{I,1,n},{I,1,1}]==(n^3+n)/2来实现这个规则;但我不能用这些规则来实现代码,只是我认为这是一个好的开始(当然,对于大于3的n,我会出现内存不足错误。您需要实现wikipedia页面上概述的一种或多种已知方法。
 n = 3
 m = n  (n^2 + 1) /2
 Select[
     Partition[#  , n] & /@ 
        Permutations[Range[n^2]],
          (Union @(Total /@ # )) == {m} &&
          (Union @(Total /@ Transpose[#] )) == {m} &&
          Total@Diagonal[#] == m  && 
          Total@Diagonal[Reverse@#] == m & ][[1]] // MatrixForm