Come posso creare una matrice triangolare basata su un vettore, in MATLAB?
-
05-07-2019 - |
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 ...)
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)