Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab中创建幻方函数_Matlab_Function_Magic Square - Fatal编程技术网

在Matlab中创建幻方函数

在Matlab中创建幻方函数,matlab,function,magic-square,Matlab,Function,Magic Square,我在matlab中创建了一个大小为n的幻方函数,用zeros()命令初始化,并使用迭代器I使用for循环 我得到的输出是正确的,但我无法确定如何解决这样一个问题,即如果该位置的对角线对于行和列都超出边界。在幻方(5)中,这个数字将是16 magicsqure(5) 母体= 0 0 1 8 15 0 5 7 14 0 4 6 13 0 0 10 12 0 0 3 11

我在matlab中创建了一个大小为n的幻方函数,用zeros()命令初始化,并使用迭代器I使用for循环

我得到的输出是正确的,但我无法确定如何解决这样一个问题,即如果该位置的对角线对于行和列都超出边界。在幻方(5)中,这个数字将是16

magicsqure(5)

母体=

 0     0     1     8    15
 0     5     7    14     0
 4     6    13     0     0
10    12     0     0     3
11     0     0     2     9
%
函数输出=magicsquare(n)
%使用zeros()函数初始化
矩阵=零(n);
%排名第一
列=(n-1)/2+1;%第一排幻方在中行中间开始
行=1;%第一排
%带迭代器i的for循环
对于i=1:(n^2)%1到n^2(n大小矩阵的完美平方)
%如果已填充,则从原始位置向下移动
如果(矩阵(行,列)~=0)%。。。
行=行+2;%。。。向下移动2行。。。
列=列-1;%。。。左边有一列
结束
%上一个,对吗
矩阵(行,列)=矩阵(a,b)位置输入i的i%
行=行-1;%上移一行
列=列+1;%右移一列
%矩阵空间外——包裹矩阵
如果列位于列1的左侧,则列小于1%
col=n;%转到最右边的列
结束
if row>(n+1)%if row超过最后一行超过一个空格
行=2;%到第二排
结束
如果行>n%不存在于一个空格中
行=1;%到第一排
结束
如果列>n
列=1;%转到最左边的列
结束
如果行<1
行=n;%到最后一排
结束
如果行<1&&col>n%!!故障排除
行=2;
col=n;
结束

输出=矩阵;%打印幻方图
故障排除行(如果行<1&&col>n)几乎解决了我的问题。如果行<1,则只需将其上移到前面

%重要提示:仅适用于大于3的奇数
函数输出=magicsquare(n)
%使用zeros()函数初始化
矩阵=零(n);
%排名第一
列=(n-1)/2+1;%第一排幻方在中行中间开始
行=1;%第一排
%带迭代器i的for循环
对于i=1:(n^2)%1到n^2(n大小矩阵的完美平方)
%如果已填充,则从原始位置向下移动一个
如果(矩阵(行,列)~=0)%。。。
行=行+2;%。。。向下移动2行。。。
列=列-1;%。。。左边有一列
结束
%上一个,右一个方法
矩阵(行,列)=矩阵(a,b)位置输入i的i%
行=行-1;%上移一行
列=列+1;%右移一列
%超出矩阵空间--创建换行矩阵
如果列位于列1的左侧,则列小于1%
col=n;%转到最右边的列
结束
if row>(n+1)%if row超过最后一行超过一个空格
行=2;%到第二排
结束
如果行>n%不存在于一个空格中
行=1;%到第一排
结束
如果行<1&&col>n%对角线,则行和列都超出边界
行=2;
col=n;
结束
如果列>n
列=1;%转到最左边的列
结束
如果行<1
行=n;%到最后一排
结束
结束
输出=矩阵;%打印魔方
结束