在matlab中获取混洗矩阵的初始矩阵

时间:2017-04-26 17:27:12

标签: matlab matrix

我有问题。我用暹罗方法拖拽了一个矩阵,我使用了这段代码:

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的矩阵。在这种特殊情况下,上述解决方案不起作用。

1 个答案:

答案 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等名称。