Domanda

Diciamo che ho un vettore come questo:

A = [101:105]

Che è davvero:

[ 101, 102, 103, 104, 105 ]

E vorrei usare solo le funzioni e gli operatori vettore / matrice per produrre la matrice:

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

o la seguente matrice:

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

Qualche idea qualcuno?

(Sono molto alle prime armi in MATLAB, ma sono stato sellato questa roba ...)

È stato utile?

Soluzione

hankel (A) ti darà la prima matrice

triu (toeplitz (A)) ti darà il secondo.

- Loren

Altri suggerimenti

Le migliori soluzioni sono elencate da Loren . È anche possibile creare queste matrici usando SPDIAGS :

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

Ricordo di aver creato matrici fasciate come questa prima di scoprire alcune delle funzioni integrate menzionate da Loren. Non è così semplice e pulito come usare quelli, ma ha funzionato. =)

Il modo in cui lo farei è creare una matrice A :

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

E poi trova una matrice B tale che quando moltiplichi A * B otterrai il risultato che desideri. Fondamentalmente fai prima l'algebra lineare su carta e poi fai fare il calcolo a Matlab.

Per generare tali matrici triangolari con un modello così regolare, utilizzare la funzione toeplitz, ad esempio

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

per l'altro caso, utilizzare rot90(m)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top