Wie kann ich eine dreieckige Matrix erstellen, die auf einem Vektor-basierte, in MATLAB?

StackOverflow https://stackoverflow.com/questions/1000535

  •  05-07-2019
  •  | 
  •  

Frage

Lassen Sie uns sagen, dass ich einen Vektor wie diese haben:

A = [101:105]

Was ist eigentlich:

[ 101, 102, 103, 104, 105 ]

Und ich möchte nur Vektor / Matrix-Funktionen und Operatoren verwenden, um erzeugt die Matrix:

101 102 103 104 105
102 103 104 105 0
103 104 105 0   0
104 105 0   0   0
105 0   0   0   0

oder die folgende Matrix:

101 102 103 104 105
0   101 102 103 104
0   0   101 102 103
0   0   0   101 102
0   0   0   0   101

Gibt es jemand Ideen?

(Ich bin sehr viel ein Neuling in MATLAB, aber ich habe das Zeug gesattelt worden ...)

War es hilfreich?

Lösung

hankel(A) werden Ihnen die erste Matrix erhalten

triu(toeplitz(A)) erhalten Sie die zweite bekommen.

- Loren

Andere Tipps

Die besten Lösungen werden von Loren . Es ist auch möglich, diese Matrizen SPDIAGS zu erstellen:

vec = 101:105;
A = full(spdiags(repmat(vec,5,1),0:4,5,5));  % The second matrix
B = fliplr(full(spdiags(repmat(fliplr(vec),5,1),0:4,5,5)));  % The first matrix

Ich erinnere mich an die Schaffung Bandmatrizen wie diese, bevor ich über einige der integrierten Funktionen herausgefunden Loren erwähnt. Es ist nicht annähernd so einfach und sauber, wie sie verwendet wird, aber es funktionierte. =)

So wie ich darüber gehen würde, ist eine Matrix A zu erstellen:

101 102 103 104 105
101 102 103 104 105
101 102 103 104 105
101 102 103 104 105
101 102 103 104 105

Und dann eine Matrix B finden, dass, wenn Sie A*B multiplizieren Sie das Ergebnis bekommen Sie wollen. Im Grunde tut die lineare Algebra auf dem Papier und dann hat Matlab die Berechnung tun.

Für solche Dreiecksmatrizen mit einer solchen regelmäßigen Muster zu erzeugen, verwenden Sie die toeplitz Funktion, z.

m=toeplitz([1,0,0,0],[1,2,3,4])

für den anderen Fall, Verwendung rot90(m)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top