2017-11-03 8 views
0

Zum Beispiel möchte ich die folgende Spalte drehen:Wie erstelle ich eine symmetrische Matrix aus einer Spalte?

[90; 175; 600; 650; 655; 660] 

in die Matrix:

[ 90, 175, 600, 650, 655, 660; 
175, 600, 650, 655, 660, 655; 
600, 650, 655, 660, 655, 650; 
650, 655, 660, 655, 650, 600; 
655, 660, 655, 650, 600, 175; 
660, 655, 650, 600, 175, 90] 

Welchen Algorithmus würde ich verwenden?

Bisher habe ich:

col = [90; 175; 600; 650; 655; 660]; 
[numrows, temp] = size(col); 
Z = zeros(numrows, numrows); 
for i = 1:1:numrows 
    for j = 1:1:numrows 
     Z(i,j) = col(i); 
     Z(j,i) = col(i); 
    end 
end 

Antwort

3

Die eingebaute Funktion toeplitz gibt, was Sie nach ein paar Flips wollen:

>> col = [90; 175; 600; 650; 655; 660]; 
>> result = flipud(toeplitz(flip(col))) 
result = 
    90 175 600 650 655 660 
    175 600 650 655 660 655 
    600 650 655 660 655 650 
    650 655 660 655 650 600 
    655 660 655 650 600 175 
    660 655 650 600 175 90 
2

Der folgende Code wird das tun, was Sie wollen:

col = [90; 175; 600; 650; 655; 660]; 
numrows = size(col, 1); 
Z = zeros(numrows, numrows); 
for i = 1:numrows 
    for j = 1:numrows 
     Z(i,j) = col(numrows - abs(numrows - (i+j-1))); 
    end 
end 

Ein kritischer Fehler mit Ihrem Verständnis des Codes durch die Linie gezeigt wird Z(j,i) = col(i) unmittelbar nach Z(i,j) = col(i) . Da Sie jeden Index der Matrix durchlaufen, werden viele Indizes mehr als einmal geschrieben, jedes Mal mit anderen Ergebnissen. Es gibt Ihnen ein symmetrisches Muster, aber nicht das, was Sie wollen. Statt Z(i,j)undZ(j,i) verwenden, sollten Sie (wie ich, oben) zuweisen nur Z(i,j) einmal, und stattdessen den Index col berechnen sowohl die Verwendung von i und j.

3

Die hankel Funktion verwendet werden kann, um die Matrix zu erzeugen:

col = [90; 175; 600; 650; 655; 660] 
result = hankel(col, flip(col)); 
Verwandte Themen