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
Dans les diagrammes utilisant MATLAB comme langage d’action, faites référence aux éléments d’un vecteur ou d’une matrice en utilisant l’indexation de base 1 délimitée par des parenthèses. Séparez les indices pour les dimensions différentes avec des virgules.
Dans les diagrammes utilisant le C comme langage d’action, faites référence aux éléments d’un vecteur ou d’une matrice en utilisant l’indexation de base 0 délimitée par des crochets. Placez les indices pour les dimensions différentes entre leurs propres crochets.
| 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
Ce tableau récapitule l’interprétation de toutes les opérations binaires dans les opérandes de vecteur et de matrice en fonction de leur ordre de priorité (1 = le plus élevé, 3 = le plus faible). Les opérations binaires sont associatives à gauche. De ce fait, dans toute expression, les opérateurs présentant la même priorité sont évalués de gauche à droite. Sauf pour les opérateurs de multiplication et de division matricielles dans les diagrammes utilisant MATLAB comme langage d’action, tous les opérateurs binaires effectuent des opérations élément par élément.
Opération | Priorité | MATLAB comme langage d’action | C comme langage d’action. |
|---|---|---|---|
| 1 | Multiplication matricielle. | Multiplication élément par élément. Pour la multiplication matricielle, utilisez l’opération |
| 1 | Multiplication élément par élément. | Non pris en charge. Utilisez l’opération |
| 1 | Division à droite de matrice. | Division à droite élément par élément. Pour la division à droite de matrice, utilisez l’opération |
| 1 | Division à droite élément par élément. | Non pris en charge. Utilisez l’opération |
| 1 | Division à gauche de matrice. | Non pris en charge. Utilisez l’opération |
| 1 | Division à gauche élément par élément. | Non pris en charge. Utilisez l’opération |
| 2 | Addition. | Addition. |
| 2 | Soustraction. | Soustraction. |
| 3 | Comparaison, égal à. | Comparaison, égal à. |
| 3 | Comparaison, différent de. | Comparaison, différent de. |
| 3 | Non pris en charge. Utilisez l’opération | Comparaison, différent de. |
| 3 | Non pris en charge. Utilisez l’opération | Comparaison, différent de. |
Opérations et actions unitaires
Ce tableau récapitule l’interprétation de l’ensemble des opérations et actions unitaires des opérandes de vecteur et de matrice. Opérations unitaires :
Sont prioritaires par rapport aux opérateurs binaires.
Sont associatives à droite. De ce fait, dans toute expression, elles sont évaluées de droite à gauche.
Effectuent des opérations élément par élément.
Exemple | 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
Ce tableau récapitule l’interprétation des opérations d’affectation dans les opérandes de vecteur et de matrice.
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; |
Attribuer des valeurs à tous les éléments d’une matrice
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 s’applique à toutes les fonctions graphiques, des tables de vérité, MATLAB et Simulink. Supposons que vous définissez les arguments formels d’une fonction f comme scalaires. Ce tableau décrit les règles de l’expansion scalaire pour l’appel de fonction y = f(u).
Sortie y | Entrée u | Résultat |
|---|---|---|
| Scalaire | Scalaire | Aucune expansion scalaire ne se produit. |
| Scalaire | Vecteur ou matrice | Le diagramme génère une erreur de désadaptation de taille. |
| Vecteur ou matrice | Scalaire | Le diagramme utilise l’expansion scalaire pour attribuer la valeur de sortie scalaire de y[i][j] = f(u) |
| Vecteur ou matrice | Vecteur ou matrice | Le diagramme utilise l’expansion scalaire pour calculer une valeur de sortie pour chaque élément de y[i][j] = f(u[i][j]) y et u ne sont pas de même taille, le diagramme génère une erreur de désadaptation de taille. |
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.
Appliquer des opérations arithmétiques à l’aide de fonctions MATLAB
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.