2017-04-26 60 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 

但我的問題是,我有一個矩陣包含1和零。在這種特殊情況下,上述解決方案不起作用。

回答

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 

此外,僅供參考,magic在MATLAB中內置的功能,如果你命名你的變量magic,你會覆蓋函數定義,所以我建議使用一個名稱,如magic_matrix

+0

因爲此功能是一個encription過程的一部分。所以在描述部分,我只會有我的魔法功能的輸出,從我需要的原始圖像 –