Opérations pour les vecteurs et matrices dans Stateflow
Les diagrammes Stateflow® des modèles Simulink® possèdent une propriété de langage d’action qui définit la syntaxe que vous utilisez pour calculer avec des vecteurs et des matrices. Les propriétés de langage d’action sont les suivantes :
MATLAB® comme langage d’action.
C comme langage d’action.
Pour plus d’informations, veuillez consulter Differences Between MATLAB and C as Action Language Syntax.
Notation d’indexation
La façon d’accéder aux éléments des vecteurs et des matrices dépend du langage d’action du diagramme.
Les diagrammes dont le langage d’action est MATLAB utilisent l’indexation de base 1 avec des parenthèses. Pour les tableaux multidimensionnels, séparez les indices par des virgules dans une même paire de parenthèses, M(i,j).
Les diagrammes dont le langage d’action est le C utilisent l’indexation de base 0 avec des crochets. Pour les tableaux multidimensionnels, placez l’indice de chaque dimension dans sa propre paire de crochets, M[i][j].
| Exemple | MATLAB comme langage d’action | C comme langage d’action. |
|---|---|---|
Le premier élément d’un vecteur V | V(1) | V[0] |
Le ie élément d’un vecteur V | V(i) | V[i-1] |
L’élément dans la ligne 4 et colonne 5 d’une matrice M | M(4,5) | M[3][4] |
L’élément dans la ligne i et colonne j d’une matrice M | M(i,j) | M[i-1][j-1] |
Opérations binaires
Les opérations binaires sur les vecteurs et les matrices suivent les règles de priorité standard (1 = la plus élevée, 3 = la plus faible). Lorsque les opérateurs présentent la même priorité, ils ont évalués de gauche à droite.
Tous les opérateurs binaires effectuent des opérations élément par élément, à une seule exception près : dans les diagrammes utilisant MATLAB comme langage d’action, les opérateurs *, / et \ effectuent des opérations matricielles à la place.
Opérations de multiplication et de division (priorité 1)
Opération | MATLAB comme langage d’action | C comme langage d’action. |
|---|---|---|
| Multiplication matricielle. | Multiplication élément par élément. Pour la multiplication matricielle, utilisez l’opération |
| Multiplication élément par élément. | Non pris en charge. Utilisez l’opération |
| Division à droite de matrice. | Division à droite élément par élément. Pour la division à droite de matrice, utilisez l’opération |
| Division à droite élément par élément. | Non pris en charge. Utilisez l’opération |
| Division à gauche de matrice. | Non pris en charge. Utilisez l’opération |
| Division à gauche élément par élément. | Non pris en charge. Utilisez l’opération |
Dans les diagrammes utilisant le C comme langage d’action, les opérations * et / effectuent des multiplications et divisions élément par élément. Pour effectuer des multiplications et divisions matricielles standard dans un diagramme en C, utilisez la fonction MATLAB.
Supposons que vous souhaitez effectuer ces opérations sur des matrices carrées u1 et u2 :
Calculez le produit matriciel standard
y1 = u1 * u2.Résolvez l’équation
u1 * y2 = u2.Résolvez l’équation
y3 * u1 = u2.
Pour terminer ces calculs dans un diagramme en C, ajoutez une fonction MATLAB qui exécute ce code :
function [y1, y2, y3] = my_matrix_ops(u1, u2) %#codegen y1 = u1 * u2; % matrix multiplication y2 = u1 \ u2; % matrix division from the right y3 = u1 / u2; % matrix division from the left
Dans les diagrammes utilisant MATLAB comme langage d’action, les opérations *, / et \ effectuent des multiplications et divisions matricielles standard. Vous pouvez utiliser ces opérations directement dans les actions d’état et de transition.
Opérations d’addition et de soustraction (priorité 2)
Opération | MATLAB comme langage d’action | C comme langage d’action. |
|---|---|---|
| Addition. | Addition. |
| Soustraction. | Soustraction. |
Opérations de comparaison (priorité 3)
Opération | MATLAB comme langage d’action | C comme langage d’action. |
|---|---|---|
| Comparaison, égal à. | Comparaison, égal à. |
| Comparaison, différent de. | Comparaison, différent de. |
| Non pris en charge. Utilisez l’opération | Comparaison, différent de. |
| Non pris en charge. Utilisez l’opération | Comparaison, différent de. |
Opérations et actions unitaires
Les opérations unitaires s’appliquent à une seule valeur et se comportent différemment des opérations binaires. Opérations unitaires :
Sont prioritaires par rapport aux opérateurs binaires.
Sont associatives à droite. En d’autres termes, le diagramme les évalue de droite à gauche.
Effectuent des opérations élément par élément.
Opération | MATLAB comme langage d’action | C comme langage d’action. |
|---|---|---|
| Opérateur logique NOT. Pour l’opérateur binaire NOT, utilisez la fonction |
Pour plus d’informations, veuillez consulter Opérations bit à bit et Enable C-bit operations. |
| Non pris en charge. Utilisez l’opération | Opérateur logique NOT. |
| Négatif. | Négatif. |
| Non pris en charge. | Incrémentez tous les éléments du vecteur ou de la matrice. Équivaut à |
| Non pris en charge. | Décrémentez tous les éléments du vecteur ou de la matrice. Équivaut à |
Opérations d’affectation
Les opérations d’affectation stockent les valeurs dans des variables. Les diagrammes utilisant le C comme langage d’action supportent les opérateurs d’affectation composés qui associent des opérations arithmétiques à l’affectation.
Opération | MATLAB comme langage d’action | C comme langage d’action. |
|---|---|---|
| Affectation simple. | Affectation simple. |
| Non pris en charge. Utilisez l’expression | Équivaut à |
| Non pris en charge. Utilisez l’expression | Équivaut à |
| Non pris en charge. Utilisez l’expression | Équivaut à |
| Non pris en charge. Utilisez l’expression | Équivaut à |
Attribuer des valeurs à des éléments individuels d’une matrice
Vous pouvez attribuer une valeur à une entrée individuelle de vecteur ou de matrice en utilisant la syntaxe d’indexation appropriée au langage d’action du diagramme.
| Exemple | MATLAB comme langage d’action | C comme langage d’action. |
|---|---|---|
Attribuez la valeur 10 au premier élément du vecteur V. | V(1) = 10; | V[0] = 10; |
Attribuez la valeur 77 à l’élément de la ligne 2 et colonne 9 de la matrice M. | M(2,9) = 77; | M[1][8] = 77; |
Affecter des valeurs à tous les éléments
Dans les diagrammes qui utilisent MATLAB comme langage d’action, vous pouvez utiliser une action unique pour spécifier tous les éléments d’un vecteur ou d’une matrice. Par exemple, cette action attribue chaque élément de la matrice A 2 par 3 à une valeur différente :
A = [1 2 3; 4 5 6];
Dans les diagrammes qui utilisent le C comme langage d’action, vous pouvez utiliser l’expansion scalaire pour définir tous les éléments d’un vecteur ou d’une matrice sur la même valeur. L’expansion scalaire convertit les données scalaires pour qu’elles correspondent aux dimensions des données vectorielles ou matricielles. Par exemple, cette action définit tous les éléments de la matrice A sur 10 :
A = 10;
L’expansion scalaire convertit automatiquement les valeurs scalaires pour qu’elles correspondent aux dimensions du vecteur ou de la matrice. Elle s’applique aux fonctions graphiques, de table de vérité, MATLAB et Simulink.
Pour une fonction y = f(u) avec des arguments formels scalaires :
Sortie y | Entrée u | Résultat |
|---|---|---|
| Scalaire | Scalaire | Aucune expansion scalaire. |
| Scalaire | Vecteur ou matrice | Erreur de désadaptation de taille. |
| Vecteur ou matrice | Scalaire | Chaque élément de y reçoit la sortie scalaire |
| Vecteur ou matrice | Vecteur ou matrice | Opération élément par élément Si |
Pour les fonctions ayant plusieurs sorties, les mêmes règles s’appliquent sauf si les sorties et les entrées sont toutes des vecteurs ou des matrices. Dans ce cas, le diagramme génère une erreur de désadaptation de taille et l’expansion scalaire ne se produit pas.
Seules les matrices de taille fixe supportent l’expansion scalaire.
Les diagrammes utilisant MATLAB comme langage d’action ne supportent pas l’expansion scalaire.