我想知道如何创建一个具有随机自然数的矩阵,但每列的总和也等于每行的总和以及对角线总和。
我的意思是您创建一个函数,通过选择行、列和对角线的维度和总和,可以为您提供如上所述的方阵,但每行和列上的数字不同。
有谁知道如何做到这一点?
我想自己创建一个没有任何包的函数来完全理解程序。
我想知道如何创建一个具有随机自然数的矩阵,但每列的总和也等于每行的总和以及对角线总和。
我的意思是您创建一个函数,通过选择行、列和对角线的维度和总和,可以为您提供如上所述的方阵,但每行和列上的数字不同。
有谁知道如何做到这一点?
我想自己创建一个没有任何包的函数来完全理解程序。
您可以使用一个名为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
您无法决定矩阵的总和是多少。它将会成为:
.
其中“ n ”是矩阵的维数。
但是你可以将它乘以一个数字(最好是一个整数)。
有用的链接:什么是魔方?
如果你想弄清楚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")
# }
您需要查看上面出现的其他功能以完全理解该过程。