2017-04-26 4 views
0

問題があります。私はシャムの方法で行列をシャッフルし、私はこのコードを使用:matlabでシャッフルされた行列の初期行列を取得します

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 

しかし、私の問題は、私はとゼロを含む行列を持っていることである:行列です。この特定のケースでは、上記の解決策は機能しません。

答えて

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のような名前を使用することをおすすめします。

+0

この機能は、暗号化プロセスの一部であるためです。したがって、私は元のイメージを取得する必要があるから私は私の魔法の機能の出力を持っています –

関連する問題