我有问题。我用暹罗方法拖拽了一个矩阵,我使用了这段代码:
function magic = magicsquare(matrix,n)
magic=zeros(n,n);
i=1;
j=(n+1)/2;
for ki=1:n
for kj=1:n
is=i;
js=j;
magic(i,j)=matrix(ki,kj);
i=n-rem(n+1-i,n);
j=rem(j,n)+1;
if magic(i,j)~=0
i=rem(is,n)+1;
j=js;
end
end
end
现在,只有洗牌矩阵,我需要得到初始矩阵。我怎样才能做到这一点? 另外我必须提到我的矩阵只包含0和1。
更新:如果我有一个从1到n的数字的魔术方(我测试了11x11和5x5的矩阵),获取初始矩阵的代码是:
function magic = reversemagicsquare(matrix,n)
i=1;
j=(n+1)/2;
for ki=1:n
for kj=1:n
is=i;
js=j;
magic(ki,kj)=matrix(i,j);
i=n-rem(n+1-i,n);
j=rem(j,n)+1;
end
if matrix(i,j)~=0
i=rem(is,n)+1;
j=js;
end
end
但我的问题是我有一个包含1和0的矩阵。在这种特殊情况下,上述解决方案不起作用。
答案 0 :(得分:0)
为什么不在第3行添加以下内容以及其他功能输出:
function [magic,original_matrix] = magicsquare(matrix,n)
magic=zeros(n,n);
original_matrix= magic; %original matrix
i=1;
j=(n+1)/2;
for ki=1:n
for kj=1:n
is=i;
js=j;
magic(i,j)=matrix(ki,kj);
i=n-rem(n+1-i,n);
j=rem(j,n)+1;
if magic(i,j)~=0
i=rem(is,n)+1;
j=js;
end
end
end
另外,仅仅是FYI,magic
是matlab中的内置函数,如果您将变量命名为magic
,那么您将覆盖函数定义,因此我可以建议使用magic_matrix
等名称。