2017-04-26 7 views
0

Ich habe ein Problem. I eine Matrix mit der siamesischen Methode gemischt und ich diesen Code:Holen Sie sich die Ausgangsmatrix einer gemischten Matrix in 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 

jetzt nur noch die neu gemischt Matrix, muß ich die anfängliche Matrix erhalten. Wie kann ich das machen? Auch ich muss erwähnen, dass meine Matrix nur 0 und 1 besteht.

Update: Wenn ich ein magisches Quadrat mit Zahlen von 1 bis n habe (ich für eine Matrix von 11x11 und 5x5 getestet) den Code für die erste Matrix ist:

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 

Aber mein Problem ist, dass ich eine Matrix mit Einsen und Nullen habe. Und in diesem speziellen Fall funktioniert die oben erwähnte Lösung nicht.

Antwort

0

Warum gehst du nicht einfach addieren, folgende in Zeile 3 und eine zusätzliche Funktion ouput:

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 

Auch nur FYI, ist magic eine eingebaute Funktion in Matlab, und wenn Sie Ihre Variablennamen magic, Sie überschreiben die Funktionsdefinition, also würde ich vorschlagen, einen Namen wie magic_matrix zu verwenden.

+0

Da diese Funktion Teil eines Beschreibungsprozesses ist. Im Beschreibungsteil werde ich nur die Ausgabe meiner magischen Funktion haben, von der ich das ursprüngliche Bild bekommen muss –

Verwandte Themen