D'après votre description, cela ressemble à une simple opération de matrice. Vous devez juste vous assurer que vous avez les bonnes dimensions pour C et S. C doit être un vecteur de colonne (longueur (C) -en-1) et S doit être un vecteur ligne (longueur 1 par cas (S)). Si l'on suppose qu'ils sont les bonnes dimensions, il suffit de faire ce qui suit:
mat = C*S;
Si vous n'êtes pas sûr de leurs dimensions, cela devrait fonctionner:
mat = (C(:))*(S(:)');
EDIT: En fait, je suis allé un peu fou avec les parenthèses. Certains d'entre eux sont inutiles, car il n'y a pas de problèmes d'ordre de fonctionnement. Voici une version plus propre:
mat = C(:)*S(:)';
EXPLICATION:
Le matrix multiplication operator en Matlab produira soit un inner product (résultant en une valeur scalaire) ou un outer product (résultant dans une matrice) en fonction les dimensions des vecteurs auxquels il est appliqué.
La dernière équation ci-dessus produit un produit externe en raison de l'utilisation du colon operator pour remodeler les dimensions des arguments vectoriels. La syntaxe C (:) remodèle le contenu de C en un vecteur à colonne unique. La syntaxe S (:) ' remodèle le contenu de S en un vecteur colonne, puis le transpose en vecteur ligne. Lorsque multiplié, ceci résulte en une matrice de taille (longueur (C) -par- longueur (S)).
Note: Cette utilisation de l'opérateur du côlon est applicable aux vecteurs et matrices de toute dimension, vous permettant de remodeler leur contenu dans un vecteur de colonne unique (ce qui rend certaines opérations plus faciles, comme le montre this other SO question).
Je pense que vous avez une faute de frappe. La ligne "mat (1, :) = ..." va simplement continuer à écraser la première ligne, ne faisant rien aux lignes restantes. Voulez-vous dire "mat (j, :) = ..." à la place? – gnovice
Oui, vous avez raison, ça aurait dû être mat (j, :). Désolé pour ça. – NoMoreZealots
Pas de problème. Je l'ai réparé pour éviter toute confusion supplémentaire. =) – gnovice