Comment créer une matrice triangulaire basée sur un vecteur dans MATLAB?
-
05-07-2019 - |
Question
Disons que j'ai un vecteur comme celui-ci:
A = [101:105]
Ce qui est vraiment:
[ 101, 102, 103, 104, 105 ]
Et j'aimerais utiliser uniquement des fonctions et opérateurs vectoriels / matriciels pour produire 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
ou la matrice suivante:
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
Des idées, ça vous tente?
(Je suis vraiment un novice chez MATLAB, mais je suis sellé par ce truc ...)
La solution
hankel (A)
vous obtiendrez la première matrice
triu (toeplitz (A))
vous obtiendrez le second.
- Loren
Autres conseils
Les meilleures solutions sont répertoriées par Loren . Il est également possible de créer ces matrices à l'aide de 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
Je me souviens d'avoir créé des matrices à bandes comme celle-ci avant de découvrir certaines des fonctions intégrées mentionnées par Loren. Ce n'est pas aussi simple et propre que de les utiliser, mais cela a fonctionné. =)
Pour ce faire, créez une 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
Trouvez ensuite une matrice B
telle que lorsque vous multipliez A * B
, vous obteniez le résultat souhaité. Faites l’algèbre linéaire sur papier d’abord, puis faites calculer par Matlab.
Pour générer de telles matrices triangulaires avec un tel motif régulier, utilisez la fonction toeplitz, par exemple
.m=toeplitz([1,0,0,0],[1,2,3,4])
dans le cas contraire, utilisez rot90 (m)