Contenu principal

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 VV(1)V[0]
Le ie élément d’un vecteur VV(i)V[i-1]
L’élément dans la ligne 4 et colonne 5 d’une matrice MM(4,5)M[3][4]
L’élément dans la ligne i et colonne j d’une matrice MM(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.

a * b

Multiplication matricielle.

Multiplication élément par élément. Pour la multiplication matricielle, utilisez l’opération * dans une fonction MATLAB.

a .* b

Multiplication élément par élément.

Non pris en charge. Utilisez l’opération a * b.

a / b

Division à droite de matrice.

Division à droite élément par élément. Pour la division à droite de matrice, utilisez l’opération / dans une fonction MATLAB.

a ./ b

Division à droite élément par élément.

Non pris en charge. Utilisez l’opération a / b.

a \ b

Division à gauche de matrice.

Non pris en charge. Utilisez l’opération \ dans une fonction MATLAB.

a .\ b

Division à gauche élément par élément.

Non pris en charge. Utilisez l’opération .\ dans une fonction 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
Avant d’appeler la fonction, spécifiez les propriétés pour les données d’entrée et de sortie, tel que décrit dans Set Data Properties.

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.

a + b

Addition.

Addition.

a - b

Soustraction.

Soustraction.

Opérations de comparaison (priorité 3)

Opération

MATLAB comme langage d’action

C comme langage d’action.

a == b

Comparaison, égal à.

Comparaison, égal à.

a ~= b

Comparaison, différent de.

Comparaison, différent de.

a != b

Non pris en charge. Utilisez l’opération a ~= b.

Comparaison, différent de.

a <> b

Non pris en charge. Utilisez l’opération a ~= b.

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.

~a

Opérateur logique NOT. Pour l’opérateur binaire NOT, utilisez la fonction bitcmp.

  • Opérateur binaire NOT (par défaut). Activez cette opération en sélectionnant la propriété de diagramme Enable C-bit operations.

  • Opérateur logique NOT. Activez cette opération en désactivant la propriété de diagramme Enable C-bit operations.

Pour plus d’informations, veuillez consulter Opérations bit à bit et Enable C-bit operations.

!a

Non pris en charge. Utilisez l’opération ~a.

Opérateur logique NOT.

-a

Négatif.

Négatif.

a++

Non pris en charge.

Incrémentez tous les éléments du vecteur ou de la matrice. Équivaut à a = a+1.

a--

Non pris en charge.

Décrémentez tous les éléments du vecteur ou de la matrice. Équivaut à a = a-1.

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.

a = b

Affectation simple.

Affectation simple.

a += b

Non pris en charge. Utilisez l’expression a = a+b.

Équivaut à a = a+b.

a -= b

Non pris en charge. Utilisez l’expression a = a-b.

Équivaut à a = a-b.

a *= b

Non pris en charge. Utilisez l’expression a = a*b.

Équivaut à a = a*b.

a /= b

Non pris en charge. Utilisez l’expression a = a/b.

Équivaut à a = a/b.

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 yEntrée uRésultat
ScalaireScalaireAucune expansion scalaire.
ScalaireVecteur ou matriceErreur de désadaptation de taille.
Vecteur ou matriceScalaire

Chaque élément de y reçoit la sortie scalaire y[i][j] = f(u).

Vecteur ou matriceVecteur ou matrice

Opération élément par élément y[i][j] = f(u[i][j]).

Si y et u ne sont pas de la même taille, une erreur de désadaptation de taille se produit.

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.

Voir aussi

Rubriques