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 ...)

Était-ce utile?

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top